Linux教程(下)

6.1 Linux中软件安装与介绍

  1. 提前下载好CentOS7镜像,其他版本的设置都不相同。一定要是CentOS7镜像。

  2. 右击系统名,点击【设置】

  3. 勾选所有状态,设置镜像文件位置。注意:Centos7要启动运行

  4. 在root用户下配置属性

    • 创建lewis-cdroom目录mkdir /mnt/lewis-cdroom
    • 创建挂载mount -r /dev/cdrom /mnt/lewis-cdroom/,将/dev/cdrom挂载到mnt/lewis-cdroom
    • 查看文件ls /mnt/lewis-cdroom/Package

6.3 Linux中的软件安装 -RPM

6.3.1 常用选项

  • rpm -i:安装软件

  • -q:询问软件包,-qa显示已安装的所有包。如下图,telnet有这个包会正常显示,没有就不会显示

    • 利用管道符显示相关数据rpm -qa | grep telnet
  • -e:删除软件

  • -U:把一个已经安装好的软件包升级

  • -v:验证已经安装的软件包

  • -h:显示安装进度条

6.3.2 常见组合

  • -ivh安装
  • -Uvh升级
  • -qa查询
  • -e卸载,rpm -e telnet对telnet进行卸载,再利用rpn -qa | grep telnet检查telnet是否存在

6.3.3实例

  • 安装telnet命令:telnet
[root@localhost Packages]# mkdir /mnt/lewis-cdrom
[root@localhost Packages]# mount -r /dev/cdrom /mnt/lewis-cdrom
[root@localhost Packages]# cd /mnt/lewis-cdrom/Packages/
[root@localhost Packages]# telnet #检测是否有telnet这个文件
bash: telnet: command not found...
[root@localhost Packages]# ls telnet-* #查看telnet有哪些可安装的内容
telnet-0.17-65.el7_8.x86_64.rpm  telnet-server-0.17-65.el7_8.x86_64.rpm
[root@localhost Packages]# rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm 
warning: telnet-0.17-65.el7_8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:telnet-1:0.17-65.el7_8           ################################# [100%]
[root@localhost Packages]# telnet
telnet> 
  • 安装VIM编辑器:vim -commonvim -enhanced

6.3.4安装时遇到的问题

当出现如下问题,可能是Linux安装时出现了问题,可以看前面的【6.1 Linux中软件安装与介绍】章节

6.5使用yum来安装软件

6.5.1 Linux中的软件安装-yum(仓库)

  • 编写本地yum
    vim /etc/yum.repos.d/lewis.repo该文件中要写5行左右的内容
    [rhce]//yum的名 称启到标记的作用
    name=rhce//对这个文件的描述
    baseurl= fle:///yum//软件包的位置,可以是file(yum源如果是本地的就写file), ftp, http
    enable=1//1表示路径可用,0表示不可用
    gpgcheck=0//是否进行gpg检查,默认不检查,检查的话要导入公钥和私钥

6.5.2 Linux中的软件安装

  • 源码包安装---安装复杂淘汰

  • RPM安装---无法解决依赖关系

  • Yum安装
    redhat所持有的安装RMP包的工具,centOS可以免费试用,redhat需要付费

  • RMP包的命名规则:
    httpd-2.4.6-45.el7.centos.x86_64.rpm
    名称+版本号+发行号+处理器架构

[root@localhost /]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ll #显示yum.repos.d中所有的文件
total 48
-rw-r--r--. 1 root root  719 Nov  9  2020 CentOS-Linux-AppStream.repo
-rw-r--r--. 1 root root  704 Nov  9  2020 CentOS-Linux-BaseOS.repo
-rw-r--r--. 1 root root 1130 Nov  9  2020 CentOS-Linux-ContinuousRelease.repo
[root@localhost yum.repos.d]# mkdir backup
[root@localhost yum.repos.d]# mv Centos* backup/
[root@localhost yum.repos.d]# mv CentOS* backup/ #将所有CentOS移动到backup中
[root@localhost yum.repos.d]# 

后缀名repo表示仓库文件

[root@localhost yum.repos.d]# vi 
[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d
[root@localhost yum.repos.d]# vi lewis.repo
[root@localhost yum.repos.d]# cat lewis.repo

vi lewis.repolewis.repo里面的内容如下:

[lewis]
name=It is a cdrom yum # 描述
baseurl=file:///mnt/lewis-cdrom
enable=1 #enable是否要启用这个功能
gpgcheck=0 #是否要做一个校验,验证这个yum仓库里面的数据包。

yum install bash-complish下载命令行自动补全设置

6.8 VM中的网络设置

6.8.1 linux中的网络

6.8.1.1实验环境:

1、需要两个Linux环境 :其中一个使用最小安装,
2、都添加一块网卡为HostOnly
3、做实验之间,请先最好快照

6.8.1.2 ym中的网络环境/网卡模式

1、ne twork(NAT模式)//虚拟机和真机之间连了一台路由器,表示虚拟机和真机不在同一个网段。
2、bridge(桥接模式)//桥接模式表示虚拟机和真机之间连了一台交换机,表示他们的IP地址在同一个网段。
3、Hosto Only//虚拟机和真机没有任何关系

查看lp地址: ifconfig和ip addr show
网卡的生产厂商: broadcom和Intel
Ispci :是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具Ispci | grep Ethernet

实验

  1. 给server虚拟机使用NAT模式
  2. 在server虚拟机中使用ifconfig查看ip地址
  3. 给client虚拟机使用NAT模式
  4. 在client虚拟机中使用ifconfig查看ip地址
  5. 分别在server和client虚拟机中互ping对方都可以ping通

6.9Linux中的网络设置

nmtui打开图形化界面,在这个界面中只能使用键盘操作

# 开启自动连接
[root@localhost mrflysand]# nmcli connection modify ens33 connection.autoconnect yes 
# 重启服务
[root@localhost mrflysand]# systemctl restart network

找到设置

找到网络

设置ip地址

将网络关闭后再开启

`ifconfig`查看ip地址

2台虚拟机互ping

Linux中的网络实验

  • 两台Linux虚拟机A(server)和B(clicent)
    sA的网络信息为:手动配置ip地址
    IP:192.168.1.1
    掩码:255.255.255.0
    网关:192.168.1 .254
    DNS:8.8.88

B的网络信息为:
手动配置ip地址IP:192.168.1.2
掩码:255.255.255.0
网关:192.168.1.254

配置

步骤一

步骤二

步骤三

  • 配置“虚拟网络编辑器”:点击菜单栏的【编辑】-【虚拟网络编辑器】-点击右下角的【更改设置】-点击类型中的【仅主机模式】-设置【子网IP】-点击【确定】

仅主机模式 配置

linux中的网络--命令inmcli

nmcli:是Linux的内置命令,无需安装
nmcli connetction show:列出当前的网卡设备

nmcli connection show 'name':查看该网卡的详细信息

注意:如果是最小化安装的Linux,nmcli是无法补齐命令的,需要安装如下软件包 : yum install bash-completion


nmcli connection modify:修改已经设置好的网络
nmcli connection modify static ipv4.dns 8.8.8.8:设置DNS
nmcli connection modify static+ipv4.dns 9.9.9.9:增加一个DNS
nmcli connection modify static ipv4.addresses 192. 168.1.100/24gw4 192.168.1.254:修改IP地址

6.14 Linux中的网卡聚合

6.14.1 DNS-域名解析

作用:将IP地址和WWW的域名进行一一对应。用户不需要记住IP地址,只需要记住域名就可以了。

IP地址和域名的映射关系有两种

1、静态映射,每一台设备都维护自己的映射表,只提供本设备使用
2、动态映射,搭建DNS服务器, 在该服务器上配置WWW的域名和IP地址的映射关系

命令

  1. 查看本机的域名——hostname
  2. 修改本地域名
    • 临时: hostname mrflysand.com,当主机重启时就会修改
    • 永久:
      • 修改: vim /etc/hostname文件
      • 命令: hostnamectl set-hostname mrflysand.com

DNS-实验

  • 一台Linux做服务器: server0.example.com
  • 一台Linux做客户端: desktop0.example.com
  • 需求:客户端可以ping通server0.example.com
  • 思路:静态映射,映射表在/etc/hosts

操作

  1. 在server服务器中输入hostnamectl set-hostname server0.example.com
  2. 在client服务器中输入hostnamectl set-hostname client0.example.com

7.1防火墙的介绍

  • 它是一种位于内部网络与外部网络之间的网络安全系统,它实际上是一种隔离技术

7.1.1防火墙主要类型

  • 网络层防火墙:可视为一种IP封包过滤器

    较新的防火墙能利用封包的多样属性来进行过滤,例如:来源IP地址、来源端口号、目的IP地址或端口号、服务类型(如HTTP 或是FTP)。也能经由通信协议、TL值、来源的网域名称或网段...等属性来进行过滤。

  • 应用层防火墙
    应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包

    防火墙借由监测所有的封包并找出不符规则的内容,可以防范电脑蠕虫或是木马程序的快速蔓延。不过就实现而言,这个方法既烦且杂(软件有千千百百种啊),所以大部分的防火墙都不会考虑以这种方法设计。

    根据侧重不同,可分为:包过滤型防火墙、应用层网关型防火墙、服务器型防火墙。

  • 数据库防火墙
    数据库防火墙是一款基于数据库协议分析与控制技术的数据库安全防护系统。基于主动防御机制,实现数据库的访问行为控制、危险操作阻断、可疑行为审计。

    数据库防火墙通过SQL协议分析,根据预定义的禁止和许可策略让合法的SQL操作通过,阻断非法违规操作,形成数据库的外围防御圈,实现SQL危险操作的主动预防、实时审计。

7.1.2防火墙的基本特征

1)内部网络和外部网络之间的所有网络数据流都必须经过防火墙,
2)只有符合安全策略的数据流才能通过防火墙;
3)防火墙自身应具有非常强的抗攻击免疫力,
4)应用层防火墙具备更细致的防护能力;
5)数据库防火墙针对数据库恶意攻击的阻断能力;
6)防火墙能强化安全策略;
7)防火墙能有效地记录Internet上的活动;
8)防火墙限制暴露用户点。

7.2 Linux中的防火墙

7.2.1Linux中的防火墙——域

Firewalld把网络流量分成多个区域,从而简化防火墙管理。
Firewalld根据数据包中的源IP地址, 将流量转入相应区域。没有匹配到的流量,也会转入默认区域
大多数区域都会允许某些特点端口和协议(631/udp,ssh)。如果流量在某一个区域中没有被允许,则会拒绝。

7.2 Linux中的防火墙

Linux中的防火墙firewalld

Linux内核包含一个强大的网络过滤子系统netfilter

Netfilter允许Linux对每个数据包进行检查。无论是进入,离开还是转发的数据包,在到达用户的组件之间,都会进行检查,修改,丢弃或者拒绝。他是Redhat 7中构建防火墙的主要模块

红帽7之前,iptables就是用来和netfilter沟通的程序,该工具比较低级,管理防火墙可能具有挑战性

Linux中的防火墙-域

Firewalld把网络流量分成多个区域,从而简化防火墙管理。

Firewalld根据数据包中的源IP地址,将流量转入相应区域。没有匹配到的流量,也会转入默认区域

大多数区域都会允许某些特点端口和协议(631/udp,ssh)。如果流量在某一个区域中没有被允许,则会拒绝。

预定义域

默认情况下所有的网卡接口都在punlic域中
表格1

  • 预定义firewalld服务节选
    ssh:本地SSH服务器。到22/tcp的流量
    dhcpv6-c1ient:本地DHCPv6客户端。到fe80::/64 IPv6网络中546/udp 的流量
    ipp-c1ient:本地IPP打印。到631/udp的流量。
    samba-client:本地Windows文件和打印共享客户端。到137/udp 和138/udp的流量
    mdns:多播DNS (DNS)本地链路名称解析。到5358/udp 指向224.0.0.251(IPv4)或H02::fb (IPv6) 多播地址的流量。

  • firewall-cmd --get-services :可以列出所有的预定义服务,如下

# firewall-cmd --get-services
RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
  • /usr/lib/firewalld/services/:放了所有预定服务的配置文件

7.3图形化配置防火墙

  • 在端口中输入firewall-config图形化设置防火墙
    执行firewall-config命令即可看到firewalld的防火墙图形化管理工具,真的很强大,可以完成很多复杂的工作。

使用命令打开后的页面

设置服务为永久型

7.4图形化配置防火墙-实例

7.4.1允许其他主机访问http服务,仅当前生效。

7.5命令行设置防火墙

  • firewall-cmd --add-port=<端口号/协议>允许默认区域允许该端口的流量。
  • firewall-cmd --reload让“永久生效”的配置规则立即生效,覆盖当前的。
  • firewall-cmd --list-all查看放行了什么服务

7.5.1 添加服务

  • firewall-cmd --permanent --add-service=http添加http服务
  • firewall-cmd -reload重启服务
[root@client0 mrflysand]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens36
  sources: 
  services: dhcpv6-client nfs ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@client0 mrflysand]# firewall-cmd --permanent --add-service=http
success
[root@client0 mrflysand]# firewall-cmd --reload
success
[root@client0 mrflysand]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens36
  sources: 
  services: dhcpv6-client http nfs3 ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

7.5.2查询服务

在punlic中分别查询ssh、http、https服务是否被允许

[root@client0 mrflysand]# firewall-cmd --query-service=ssh
yes
[root@client0 mrflysand]# firewall-cmd --query-service=http
yes
[root@client0 mrflysand]# firewall-cmd --query-service=https
no

7.6命令行配置防火墙-实例

  • 允许https服务流量通过public区域,要求立即生效且永久有
[root@client0 mrflysand]# firewall-cmd --permanent --add-service=https
success
[root@client0 mrflysand]# firewall-cmd --reload
success
[root@client0 mrflysand]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens36
  sources: 
  services: dhcpv6-client http https nfs3 ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 不允许https服务流量通过public区域,要求立即生效且永久有效
[root@client0 mrflysand]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens36
  sources: 
  services: dhcpv6-client http https nfs3 ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@client0 mrflysand]# firewall-cmd --remove-service=https
success
[root@client0 mrflysand]# firewall-cmd --reload
success
[root@client0 mrflysand]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens36
  sources: 
  services: dhcpv6-client http nfs3 ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 	
  • 允许TCP的8080与8081端口流量通过public区域,立即生效且永久生效,并且查看是否生效。

11-1 什么是shell

用户直接面对的不是计算机硬件而是shell。.
用户把指令告诉shell,然后shell再传输给系统内核。接着内核再去支配计算机硬件去执行各种操作。
我们在Linux中输入命令的界面就成为shell。支持如下功能:
1、命令补齐tab键
2、记录历史命令
3、命令别名-alias用法: alias 命令别名='具体的命令',如alias ld='ll -h'
4、通配符
5、快捷键

实验

  1. 输入ld没有作用
  2. 测试ll -h的作用
  3. 使用命令别名alias ld='ll -h'
  4. 输入ld作用等同ll -h
[mrflysand@server0 ~]$ ld
ld: no input files
[mrflysand@server0 ~]$ ll -h
total 4.0K
-rw-r--r--. 1 root      root      22 Sep 18 19:38 1.py
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Desktop
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Documents
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Downloads
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Music
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Pictures
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Public
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Templates
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Videos
[mrflysand@server0 ~]$ alias ld='ll -h'
[mrflysand@server0 ~]$ ld
total 4.0K
-rw-r--r--. 1 root      root      22 Sep 18 19:38 1.py
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Desktop
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Documents
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Downloads
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Music
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Pictures
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Public
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Templates
drwxr-xr-x. 2 mrflysand mrflysand  6 Sep 11 04:32 Videos
[mrflysand@server0 ~]$ 

11.2Bash sheel

什么是shell脚本?
其实就是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与命令写在里面,搭配正则表达式、管道命令与数据流重定向等等功能,己达到我们想要的目的。
如果编写良好,shell 脚本自身独立执行时也可以变为强大的命令行工具,甚至可以由其他脚本进一步利用。

11.3 最简单的shell脚本

11.3.1脚本的命名

脚本名字一般有两种情况:

  1. 是以.sh结尾的,就通常代表了这是一个脚本文件;
  2. 是不带.sh的,也可以表示一个脚本,但是直观上就不能识别出来。

实例代码:

  1. touch创建1.sh文件
  2. vim 1.sh编辑内容
  3. head 1.sh 查看文件里面的内容
  4. chmod给文件添加可运行的权限
  5. 运行当前文件夹中的1.sh./表示当前文件夹
[root@server0 mrflysand]# touch 1.sh
[root@server0 mrflysand]# vim 1.sh
[root@server0 mrflysand]# head 1.sh
#! /bin/bash
echo "mrflysand"
[root@server0 mrflysand]# chmod +x 1.sh 
[root@server0 mrflysand]# ./1.sh
mrflysand

11.4变量的介绍

变量:用来存储一个可变的值,通常用于大写来命名
echo命令可以读取变量的值,同时也可以输出一些语句。$符号用来调用变量的值
变量分为两种:普通变量,环境变量

实例

  • 预设变量PATH,定义了常用命令的绝对路径,因此我们可以直接输入命令。echo $PATH输出执行路径的命令
[root@server0 mrflysand]# echo $PATH
/home/mrflysand/.local/bin:/home/mrflysand/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
[root@server0 mrflysand]# head $PATH
head: cannot open '/home/mrflysand/.local/bin:/home/mrflysand/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin' for reading: No such file or directory

11.5普通变量介绍

定义变量a,并输出。注意有$才是变量

[root@server0 mrflysand]# a=1
[root@server0 mrflysand]# echo $a
1
[root@server0 mrflysand]# echo a
a

11.5.1 环境变量

  • 环境变量:环境变量就是系统预定义的参数。在wins下也有。
  • 在Linux中环境变量按照生存周期可以分为两大类:
    1、临时的
    2、永久的

11.5.1.1临时export命令

临时的:使用export命令声明即可,变量在关闭shell时失效。
语法: export 变量名=值,如export num=1
export定义临时的环境变量,在切换shell的时候,临时的环境变量也会生效。

[root@server0 mrflysand]# num=1
[root@server0 mrflysand]# export num2=mrflysand
[root@server0 mrflysand]# sh #切换到shell下
sh-4.4# echo $num #输出num,无结果

sh-4.4# echo $num2 #正常输出
mrflysand

11.5.1.2 su命令

  • su lewissu -lewis的区别:可以理解为这时候的flysand用户还是在我们root用户的环境里面,而加了-的切换才是真正的切换用户,包括切换到用户的shell。所以我们以后在用到su命令的时候,一定要加-
[root@server0 mrflysand]# num1=1
[root@server0 mrflysand]# export num2=2
[root@server0 mrflysand]# su flysand #shell并没有发生改变
[flysand@server0 mrflysand]$ su
[flysand@server0 mrflysand]$ echo $num1 

[flysand@server0 mrflysand]$ echo $num2
2

[flysand@server0 mrflysand]$ su - flysand #切换在用户的时候shell也会切换
[flysand@server0 ~]$ echo $num1

[flysand@server0 ~]$ echo $num2

11.7 位置变量

环境变量-永久

永久的:需要修改配置文件,变量才会永久生效。
永久的环境变量分为:全局和用户
定义全局变量的文件:/etc/bashrc/etc/profile
定义用户变量的文件:~/.bashrc~/.bash profile

位置变量

用数字表示的变量
$0表示脚本名称
$1表示第一个参数
$2表示第二个参数,以此类推,$3$4
$?表示程序退出的代表(一般0代表执行成功,非0表示执行失败)
$*代表所有参数内容(整体)
$$代表当前进程的ID号码
$#代表当前shell的参数个数
$@代表所有参数内容(逐个读取)

[mrflysand@server0 ~]$ vim 1.sh
[mrflysand@server0 ~]$ head 1.sh
#! /bin/bash
echo "$0"
echo "$1"
echo "$2"
echo "$4"
echo "$?"
echo "$*"
echo "$$"
echo "$#"
echo "$@"
[mrflysand@server0 ~]$ ./1.sh a b c mrflysand
./1.sh
a
b
mrflysand
0
a b c mrflysand
5239
4
a b c mrflysand

11.8转移字符

  • 转移字符有三种: \''""

反斜杠

  • 反斜杠\:可以消除紧跟在字符后面的单个字符的特殊含义
    • 如下命令:一个#表示注释
[mrflysand@server0 ~]$ echo #mrflysand

[mrflysand@server0 ~]$ echo \#mrflysand
#mrflysand
[mrflysand@server0 ~]$ echo \#mrflysand 123
#mrflysand 123
[mrflysand@server0 ~]$ echo \#mrflysand 123 #456 
#mrflysand 123
[mrflysand@server0 ~]$ echo \#mrflysand 123#456 
#mrflysand 123#456
[mrflysand@server0 ~]$ echo \#mrflysand 123 \#456 
#mrflysand 123 #456

单引号

  • 单引号可以屏蔽一切特殊字符,一切符号都不会起作用。
[mrflysand@server0 ~]$ echo '\#mrflysand 123 \#456 $a'
\#mrflysand 123 \#456 $a

双引号

  • 双引号不会屏蔽$符号(双引号里面的$符号会起作用),其他都屏蔽。
[mrflysand@server0 ~]$ echo "\#mrflysand 123 \#456 $a"
\#mrflysand 123 \#456 
posted @ 2022-09-08 17:26  MrFlySand-飞沙  阅读(196)  评论(0)    收藏  举报