RHCE9学习指南 第3章 了解Linux分区和常见命令

在Windows下每个分区都要有盘符才能够正常使用,如果一个分区的盘符被删除了,则就没法使用这个分区,如下图所示。
file
但是用于表示盘符的字母是有限的,如果最后一个字母Z也被占用完,那么多余的分区就没有盘符可用了。
假设将D盘、E盘、F盘这几分区的盘符全部去掉,那么如何使用这些分区呢?可以在C盘下面创建一些文件夹,然后把这些分区装在这些文件夹中,如下图所示。
file
例如,在C盘中创建一个文件夹“Ddisk”,把第二个分区(原D盘)装在C:\Ddisk文件夹中,那么以后访问C:\Ddisk其实访问的就是第二个分区了。以此类推,我们创建C:\Edisk、C:\Fdisk,然后把第三个分区装在C:\Edisk文件夹中,把第四个分区装在C:\Fdisk文件夹中。
把某个分区装在某个文件夹中,我们把这个过程叫作挂载,这个装了其他分区的文件夹,叫作挂载点。
当打开“我的电脑”之后,我们只能看到C盘,看不到其他的分区。但是访问C盘下面对应的目录,就能访问到对应的分区,如下图所示。
file
这里C盘这个分区必须要一个盘符作为突破口,不然无法访问第一个分区,更不能在C盘中创建目录装载其他的分区了。
在Linux中分区的管理也是类似于刚刚描述的情况。Windows需要一个C盘,这里“C”作为盘符。Linux中也需要一个“C盘”,这里使用“/”作为盘符,如下图所示。
file
然后访问/时,访问的就是第一个分区sda1。然后在/下创建几个文件夹/xx、/yy、/zz,分别把sda2挂载到/xx,把sda3挂载到/yy,把sda4挂载到/zz。以后访问/xx时访问的就是sda2,如下图所示。
file
凡是在/xx下创建的目录或文件,都是在sda2中创建的。所以,就可以访问目录来访问到不同分区中的数据。要先访问/,然后才能访问到/xx,然后才能访问到/xx/aa。
从目录层面来看,整个结构就是一棵倒立的树,如下图所示。
file

3.1 路径

要访问某个文件或目录,需要知道这个文件或目录位于哪里,也就是要知道这个文件或目录的路径。路径分成两种表示,一种是绝对路径一种是相对路径。
绝对路径是从/开始算,一个完整的路径,例如,/home/tom,再如,/xx/aa。
相对路径有两个符号。
(1).表示当前路径。
(2)..表示上一层路径。
假设现在处在/home/lduan目录下,如下图所示。
file
.表示当前目录,即/home/lduan。
..表示上一层目录,即/home。
如果现在处在/xx/aa目录中,如下图所示。
file
.表示当前目录,即/xx/aa。
..表示上一层目录,即/xx。
.和..表示的路径会依据当前所在目录的不同而不同。

3.2 创建和删除目录

创建目录(文件夹)的命令是mkdir,语法如下。

mkdir dir 

或者

mkdir -p dir1/dir2

这里的意思是在dir1下创建dir2,-p的意思是,如果dir1不存在,则会连同把dir1也创建出来。
用lduan用户登录,在当前目录下创建目录xx的命令如下。

[lduan@server ~]$ mkdir xx
[lduan@server ~]$

在当前目录下的目录11中创建22目录。

[lduan@server ~]$ mkdir 11/22
mkdir: 无法创建目录 “11/22”: 没有那个文件或目录
[lduan@server ~]$ 

因为11目录不存在,所以又想在11下创建目录22,自然是创建不出来的,这里加上-p就可以了。

[lduan@server ~]$ mkdir -p 11/22
[lduan@server ~]$

可以看到,目录11不存在,也会把11创建出来,然后再在11中创建22。
删除目录的命令是rmdir,语法如下。

rmdir dir

删除目录xx的命令如下。

[lduan@server ~]$ rmdir xx
[lduan@server ~]$

如果11目录中还有一个目录2,执行命令删除目录11。

[lduan@server ~]$ rmdir 11
rmdir: 删除 '11' 失败: 目录非空
[lduan@server ~]$

因为11目录中还有一个目录22,所以rmdir没法直接删除目录11。需要把11中的内容全部清除才能删除目录11。这里可以利用后面要讲的命令rm -rf来删除。

[lduan@server ~]$ rm -rf 11
[lduan@server ~]$

这里选项r的意思是递归,如同剥洋葱,一层一层的剥,f选项是强制的意思。

3.3 cd的用法

cd的主要作用是切换到其他目录,cd的用法如下。

cd 路径   

这里的路径可以是相对路径也可以是绝对路径,如果没有明确的指明路径,则是当前路径,如cd test,test就表示当前路径下的一个目录,这种写法等同于cd ./test。

[lduan@server ~]$ mkdir -p aa/bb/cc/dd/ee/ff/{11,22}
[lduan@server ~]$

可以查看这个目录的结构。

[lduan@server ~]$ tree aa
aa
└── bb
    └── cc
        └── dd
            └── ee
                └── ff
                    ├── 11
                    └── 22

7 directories, 0 files
[lduan@server ~]$

进入11目录的命令如下。

[lduan@server ~]$ cd aa/bb/cc/dd/ee/ff/11/
[lduan@server 11]$ pwd
/home/lduan/aa/bb/cc/dd/ee/ff/11
[lduan@server 11]$

这里cd后面直接跟aa,表示当前目录下的aa。
如果想切换到22目录,绝对路径的写法如下。

[lduan@server 11]$ cd /home/lduan/aa/bb/cc/dd/ee/ff/22/
[lduan@server 22]$ pwd
/home/lduan/aa/bb/cc/dd/ee/ff/22
[lduan@server 22]$

现在是在22目录中,22目录上一层目录是ff。如果想切换到11目录,使用相对路径的写法如下。

[lduan@server 22]$ cd ../11
[lduan@server 11]$ pwd
/home/lduan/aa/bb/cc/dd/ee/ff/11
[lduan@server 11]$ 

不管在哪个目录下,只要输入cd,就可以切换到家目录中。

[lduan@server 11]$ pwd
/home/lduan/aa/bb/cc/dd/ee/ff/11
[lduan@server 11]$ cd 
[lduan@server ~]$ pwd
/home/lduan
[lduan@server ~]$

直接输入cd命令,等同于输入命令cd ~,这里~是一个变量,表示当前用户的家目录。
也可以用 ~user 表示user用户的家目录。

3.4 拷贝和剪切

如果需要拷贝文件或目录,可以用到cp命令,cp的语法如下。

cp  选项     /path1/xx  /path2/yy

如果/path2/yy是一个目录,上面的命令会把/path1/xx拷贝到/path2/yy中。如果/path2/yy不存在或是一个文件,意思是把/path1/xx拷贝到/path2中,命名为yy。
下面的操作都是用root用户做的,把/etc/hosts拷贝到/opt目录下。

[root@server ~]# cp /etc/hosts /opt/
[root@server ~]#

这里/opt是一个目录,那么这句话就是把/etc/hosts拷贝到/opt目录下,看下/opt的内容。

[root@server ~]# ls /opt/
hosts
[root@server ~]#

把/etc/hosts拷贝到/opt中,命名为xx。

[root@server ~]# cp /etc/hosts  /opt/xx
[root@server ~]# ls /opt/
hosts  xx
[root@server ~]#

原来并不存在/opt/xx,上面的操作是把/etc/hosts拷贝到/opt中,命名为xx。
看下面的例子。

[root@server ~]# mkdir /opt/11
[root@server ~]# cp /etc/hosts  /opt/11
[root@server ~]#

先创建目录/opt/11,因为/opt/11是个目录,所以这里是把/etc/hosts拷贝到/opt/11这个目录中。而不是把/etc/hosts拷贝到/opt之后命名为11。

[root@server ~]# cp /etc/hosts /opt/xx 
cp:是否覆盖'/opt/xx'? y
[root@server ~]#

因为/opt/xx不是一个目录,所以这句话是把/etc/hosts拷贝到/opt中并命名为xx。因为/opt/xx已经存在了,所以会问是否要覆盖,如果此时直接按【Enter】键,则是n的意思,即不覆盖。如果要覆盖必须要输入y,按【Enter】键。
拷贝一个文件,相当于新创建了一个文件。除文件的内容相同外,文件的时间显示的也是创建这个文件的时间。

[root@server ~]# ls -l /etc/hosts /opt/xx
-rw-r--r--. 1 root root 158 9月  10 2018 /etc/hosts
-rw-r--r--. 1 root root 158 11月 19 22:44 /opt/xx
[root@server ~]#

这里可以看到,时间不一样。
拷贝一个文件时,如果想把文件的属性一起拷贝过去,就需要加上-p选项。

[root@server ~]# ls -l /etc/hosts /opt/xx
-rw-r--r--. 1 root root 158 9月  10 2018 /etc/hosts
-rw-r--r--. 1 root root 158 9月  10 2018 /opt/xx
[root@server ~]# 

这样看起来,时间也都一致了。
下面用cp拷贝目录,把/etc拷贝到当前目录。

[root@server ~]# cp /etc/ .
cp: 未指定 -r;略过目录'/etc/'
[root@server ~]# 

此处没有拷贝成功,因为/etc/是一个目录,cp需要加上-r选项才行,-r表示递归的意思。

[root@server ~]# cp -r /etc/ .
[root@server ~]# 

删除这个etc目录。

[root@server ~]# rm -rf etc/
[root@server ~]# 

记住不要写成了 rm -rf /etc/。
如果拷贝目录,同时想保持目录属性不变,可以用-rp选项,或者-a选项。-a选项中包括一系列其他选项如-r、-p等的功能。

[root@server ~]# cp -a /etc/ .
[root@server ~]#

剪切所用的命令是mv,mv的语法如下。

mv  选项   /path1/xx  /path2/yy

如果/path2/yy是一个目录,意思是把/path1/xx剪切到/path2/yy中。
如果/path2/yy不存在或是一个文件,意思是把/path1/xx剪切到/path2中,并命名为yy。
把/opt/hosts剪切到当前目录中的命令如下。

[root@server ~]# mv /opt/hosts .
[root@server ~]# ls /opt/
11  xx
[root@server ~]# 

mv也用于重命名的操作,如把/opt/下的xx命名为yy。

[root@server ~]# mv /opt/xx /opt/yy
[root@server ~]# ls /opt
11  yy
[root@server ~]#

3.5常见命令归纳

在Windows中可以通过某文件的图标或文件的后缀,来判断是什么该文件是一个什么类型的文件,如是可执行文件,还是一个文本文件。但在Linux中,很多文件类型往往和后缀没关系,所以我们要判断一个文件是什么类型的文件可以用file来判断。file的用法如下。

file  /path/file

例如,判断/etc/hosts是什么类型的文件,命令如下。

[root@server ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@server ~]#

这里显示/etc/hosts是一个文本文件。
判断/boot/initramfs-4.18.0-305.el8.x86_64.img的文件类型。

[root@server ~]# file /boot/initramfs-5.14.0-70.13.1.el9_0.x86_64.img 
/boot/initramfs-5.14.0-70.13.1.el9_0.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
[root@server ~]#

这里显示/boot/initramfs-5.14.0-70.13.1.el9_0.x86_64.img是一个cpio归档文件。
注意:这里/boot/initramfs-5.14.0-70.13.1.el9_0.x86_64.img中的版本,请通过ls /boot来确定。
wc用于统计文件的行数、单词数、字符数,先查看/etc/hosts的内容。

[root@server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@server ~]# 

然后用wc统计/etc/hosts的信息。

[root@server ~]# wc /etc/hosts
  2  10 158 /etc/hosts
[root@server ~]#

这里第一个数字2是指的是/etc/hosts有2行,第二个数字10表示/etc/hosts有10个单词,这里单词指的是以空格、、逗号隔开的字符。第三个数字158表示/etc/hosts一共有158个字符,这里统计字符数包括了空格及行末我们看不到的换行符。
以上这几个信息也可以单独查看,wc -l可以查看文件的行数。

[root@server ~]# wc -l /etc/hosts
2 /etc/hosts
[root@server ~]#

wc -w 可以查看文件的单词数。

[root@server ~]# wc -w /etc/hosts
10 /etc/hosts
[root@server ~]#

wc -c可以查看文件的字符数。

[root@server ~]# wc -c /etc/hosts
158 /etc/hosts
[root@server ~]#

touch用于创建文件或更新一个文件的时间,用法如下。

touch /path/file

如果/path/file不存在,则会把这个文件创建出来,如果存在则是用于更新这个文件的时间。
先查看/opt目录中的内容。

[root@server ~]# ls /opt/
11  yy
[root@server ~]# 

这里并不存在aa1.txt文件。

[root@server ~]# touch /opt/aa1.txt
[root@server ~]# ls /opt/
11  aa1.txt  yy
[root@server ~]#

这样就把aa1.txt创建出来了。
我们知道/etc/hosts是存在的,先查看这个文件的信息。

[root@server ~]# ls -l /etc/hosts
-rw-r--r--. 1 root root 158 9月  10 2018 /etc/hosts
[root@server ~]# 

然后对这个文件touch操作。

[root@server ~]# touch /etc/hosts
[root@server ~]# ls -l /etc/hosts
-rw-r--r--. 1 root root 158 11月 19 23:45 /etc/hosts
[root@server ~]#

可以看到,这个文件的时间更新了,这里并不会覆盖这个文件的内容,仅仅是更新了时间而已。
rm用于删除一个文件和目录。

[root@server ~]# rm /opt/aa1.txt 
rm:是否删除普通空文件 '/opt/aa1.txt'?y
[root@server ~]#

这里必须要输入y,如果什么都不输入直接回车,等同于输入n,并按【Enter】键,即不删除的意思。

[root@server ~]# rm /opt/11/
rm: 无法删除'/opt/11/': 是一个目录
[root@server ~]# 

因为/opt/11是一个目录,所以可以在rm后加上-rf选项,-r是递归-f是强制的意思。

[root@server ~]# rm -rf /opt/11/
[root@server ~]# ls /opt/
yy
[root@server ~]#

ln是做软连接的,所谓软连接就是Windows下说的快捷方式,ln的用法如下。

ln -s 源文件  快捷方式

例如,给/opt/yy创建一个快捷方式/opt/zz,命令如下。

[root@server ~]# ln -s /opt/yy  /opt/zz
[root@server ~]# ls -l /opt/zz
lrwxrwxrwx. 1 root root 7 11月 19 23:58 /opt/zz -> /opt/yy
[root@server ~]# 

查看/opt/zz的属性,可以看到/opt/zz是指向/opt/yy的,删除/opt/zz。

[root@server ~]# rm -rf /opt/zz
[root@server ~]# 

alias是用于做别名的,对于一个复杂的命令,我们可以创建一个别名,以后执行别名即可。alias的用法如下。

alias  别名='命令'

下面做一个练习,用命令ifconfig ens160创建一个别名xx,注意系统中是没有xx命令的。

[root@server ~]# xx
bash: xx: 未找到命令...
[root@server ~]#

下面为ifconfig ens160设置一个别名xx。

[root@server ~]# alias xx='ifconfig ens160'
[root@server ~]# xx
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.130  netmask 255.255.255.0  broadcast 192.168.26.255
        inet6 fe80::20c:29ff:fec4:5b02  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:5b:02  txqueuelen 1000  (Ethernet)
        RX packets 169  bytes 33613 (32.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 179  bytes 23241 (22.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@server ~]# 

可以看到,当执行xx命令时,实际上执行的是ifconfig ens160。
取消别名的语法如下。

unalias 别名。

取消xx这个别名的命令如下。

[root@server ~]# unalias xx
[root@server ~]#

cat命令用于查看比较小的(文本)文件,用法如下。

cat /path/file

例如,查看/etc/hosts中的内容,命令如下。

[root@server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@server ~]# 

但是对于比较大的文件cat就不太合适了,因为cat命令会很快地将文件的内容像翻书一样很快"翻"过去,直接到最后,我们可以用less或more命令。
more的用法如下。

more /path/file

此时显示出来的只是按终端大小来显示,如图3-10所示。
file
此时左下角显示有“更多”,说明还有更多的内容,此时按【Enter】键会一行一行地往下显示,按空格键会一页一页地显示(这里终端的大小就是一页的大小),按q退出。
比more更灵活的命令是less,用法是less /path/file,和more类似,按【Enter】键会一行一行地往下显示,按空格键会一页一页地显示。不过less支持按PgUp和PgDn往前和往后翻页,也支持按【Home】键跳到开头和按【End】键跳到结束。
head默认查看文件的前10行,如果想查看文件前几行,命令如下。

head -n N /path/file 或者 head -N /path/file

例如,查看/etc/passwd前2行,命令如下。

[root@server ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@server ~]# 

或者

[root@server ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@server ~]#

tail默认查看文件的后10行,如果想查看文件后几行,有两种方法,分别如下。

tail -n N /path/file

或者

tail -N /path/file

例如,查看/etc/passwd最后2行,命令如下。

[root@server ~]# tail -n 2 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
lduan:x:1000:1000:lduan:/home/lduan:/bin/bash
[root@server ~]# 

或者

[root@server ~]# tail -2 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
lduan:x:1000:1000:lduan:/home/lduan:/bin/bash
[root@server ~]#

3.6 重定向

执行一条命令时,命令的结果总是输出在屏幕上的。如果希望把这个命令的结果保存在某个文件中而不是输出的屏幕上,此时就要用到重定向了。重定向就是重新定位输出的方向,能用到的符号包括“>” “>>” “2>” “2>>” “&>” “&>>”,这里的“>”不要把它当做是小于号,而是把它当做是“箭头”就很容易理解了。
下面分别看下这些重定向的使用。

命令 >  /path/file 

如果/path/file不存在,则会自动创建出来,如果存在则先清空此文件的内容,然后把命令的结果写入此文件中,这种写法叫作“覆盖”写。
下面练习一下“>”重定向。

[root@server ~]# uname
Linux
[root@server ~]# ls aa.txt
ls: 无法访问'aa.txt': 没有那个文件或目录
[root@server ~]# 

这里没有重定向,uname的结果直接输出在屏幕上了,当前目录中aa.txt也是不存在的。

[root@server ~]# uname > aa.txt
[root@server ~]# 

这里用了重定向,uname的结果并没有输出在屏幕上,而是写入当前目录的aa.txt中了,如果aa不存在,则aa.txt会被创建,下面查看aa.txt的内容。

[root@server ~]# cat aa.txt 
Linux
[root@server ~]#

可以看到,aa.txt中的内容就是uname命令的结果。下面再输入一个命令重定向到aa.txt中。

[root@server ~]# cal > aa.txt
[root@server ~]#

cal的结果并没有任何输出,因为通过重定向写入aa.txt中了。

[root@server ~]# cat aa.txt 
     十一月 2021    
日 一 二 三 四 五 六
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30            

[root@server ~]#

可以看到,aa.txt中原来的内容“Linux”已经没有了,因为“>”是覆盖写,要先清空aa.txt的内容,然后再把cal命令的结果写进去。

命令 >>  /path/file

如果/path/file不存在,则会自动创建出来,如果存在,命令的结果会在/path/file原有内容的后面接着写,并不清空此文件的内容,这种写法叫作“追加”写。
下面我们执行两次uname,通过“>>”写进aa.txt中。

[root@server ~]# uname >> aa.txt
[root@server ~]# uname >> aa.txt
[root@server ~]# cat aa.txt 
     十一月 2021    
日 一 二 三 四 五 六
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30            

Linux
Linux
[root@server ~]# 

这里可以看到,aa.txt中原有的内容仍然是存在的,uname的结果是在后面接着写的。
不管是“>”还是“>>”都只能重定向正确的结果,不能重定向错误的结果。

[root@server ~]# unamexx > aa.txt
bash: unamexx: 未找到命令...
[root@server ~]# cat aa.txt 
[root@server ~]#

因为“>”会先清空aa.txt的内容,命令unamexx是不存在的、结果报错了,所以没有重定向成功aa.txt的内容被清空了。
如果要重定向错误的结果,需要用到“2>”和“2>>”。这两个符号跟“>”和“>>”一样,“2>”表示覆盖写,“2>>”是追加写,下面看个例子。

[root@server ~]# unamexx 2> aa.txt
[root@server ~]# cat aa.txt 
bash: unamexx: 未找到命令...
[root@server ~]#

这里unamexx是个错误的命令,报错信息并没有输出到屏幕上而是写入aa.txt中了。

[root@server ~]# xxxx 2> aa.txt
[root@server ~]# cat aa.txt 
bash: xxxx: 未找到命令...
[root@server ~]# 

这里再次执行了一个错误命令xxxx,结果也没有输出到屏幕上,而是覆盖的写入aa.txt中了,所以aa.txt里面没有原来的unamexx的报错信息。
再次执行两次unamexx命令,通过“2>>”进行重定向。

[root@server ~]# unamexx 2>> aa.txt
[root@server ~]# unamexx 2>> aa.txt
[root@server ~]# 
[root@server ~]# cat aa.txt 
bash: xxxx: 未找到命令...
bash: unamexx: 未找到命令...
bash: unamexx: 未找到命令...
[root@server ~]# 

因为“2>>”是追加写,所以报错信息是追加着写到aa.txt中了,并没有清空原来xxxx的报错信息。
如果想不管是正确的还是错误的结果都能重定向,可以用“&>”和“&>>”,“&>”是追加写,“&>>”是覆盖写,凡是带“>”的都是覆盖写,凡是带“>>”的都是追加写,下面练习一下。

[root@server ~]# uname &> aa.txt
[root@server ~]# xxxx &>> aa.txt
[root@server ~]# cat aa.txt 
Linux
bash: xxxx: 未找到命令...
[root@server ~]# 

这里可以看到,不管是正确的命令还是错误的命令都重定向到aa.txt中了。

3.7 管道

在Windows的cmd中执行netstat -an,会获取大量的内容显示了当前系统的端口状态及建立的连接。如果想查看端口445的状态,可以用如下命令。

C:\Users\lduan>netstat -an  |  find "445"
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    [::]:445               [::]:0                 LISTENING

C:\Users\lduan>

这里find "445"是在哪里查询445呢?是从前面命令netstat -an的结果中来查询。这当中的竖杠'|'就是管道的意思,管道的用法如下。

命令1  |  命令2

管道可以把多个命令连接起来,管道前面命令的结果作为管道后面命令的参数。
例如,要查看/etc/passwd的第6行到第10行的内容。

[root@server ~]# head /etc/passwd | tail -5
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@server ~]#

先用head 获取/etc/passwd的前10行,然后通过管道传递给tail获取 /etc/passwd前10行的后5行,那么就是从第6行到第10行了。
如果要获取网卡ens160含有IP的那行内容。

[root@server ~]# ifconfig ens160 | grep 'inet '
        inet 192.168.26.130  netmask 255.255.255.0  broadcast 192.168.26.255
[root@server ~]#

先通过ifconfig ens160获取ens160的IP,然后通过grep从这个结果中过滤到含有'inet '的行。grep的意思是从指定的文件或内容中获取含有某个关键字的行。
注意:上面命令inet后面有个空格。
这里使用了管道之后最后只显示了最终的结果,管道前面命令的结果并没有保留。如果想把管道前面命令的结果保留下来可以用tee命令,例如,下面的命令。

[root@server ~]#  ifconfig ens160 | tee bb.txt 
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.101  netmask 255.255.255.0  broadcast 192.168.26.255
        inet6 fe80::20c:29ff:fec4:5b02  prefixlen 64  scopeid 0x20<link>
        ...输出...
[root@server ~]#

这里ifconfig ens160先把结果通过管道传递给tee命令,保存在bb.txt中,然后结果正常输出到屏幕上。这样ifconfig ens160的结果既保存在bb.txt中,也输出到屏幕上了。
再看下面的例子。

[root@server ~]#  ifconfig ens160 | tee bb.txt | grep 'inet '
        inet 192.168.26.101  netmask 255.255.255.0  broadcast 192.168.26.255
[root@server ~]#

这里ifconfig ens160先把结果传递给tee命令,保存在bb.txt中。然后结果本应继续输出到屏幕上的,但是又遇到了管道,把结果传递到grep过滤含有关键字的行,这样最终看到的是含有'inet ' 的那行。
下面查看bb.txt的内容。

[root@server ~]# cat bb.txt 
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.101  netmask 255.255.255.0  broadcast 192.168.26.255
        inet6 fe80::20c:29ff:fec4:5b02  prefixlen 64  scopeid 0x20<link>
        ...输出...
[root@server ~]#

作业

  1. 下面哪个命令能把文件myfile重命名为mynewfile?
    a. mv myfile mynewfile
    b. rm myfile mynewfile
    c. rn myfile mynewfile
    d. ren myfile mynewfile

  2. 如下哪个命令可以创建/home的软连接到/tmp/xx ?
    a. ln /tmp/xx /home
    b. ln /home /tmp/xx
    c. ln -s /home /tmp/xx
    d. ln -s /tmp/xx /home

  3. 如下哪个命令可以查看文件的前10行?
    a. head
    b. top
    c. first
    d. cat

  4. 如下哪个命令可以查看一个文本文件的行数?
    a. count
    b. list
    c. ls -l
    d. wc

  5. 你在使用less常看文档时,按哪个键能退出当前的文本文件?
    a. End
    b. PageDown
    c. q
    d. G

  6. ls的结果非常多,你想借助less查看ls的输出结果,下面哪个命令正确?
    a. ls > less
    b. ls >> less
    c. ls >| less
    d. ls | less

  7. 如果要查看/etc/passwd的第5行到第10行的内容,应该使用如下哪个命令?
    a. head –n 5-10 /etc/passwd
    b. head /etc/passwd | tail -5
    c. top –n 5-10 /etc/passwd
    d. head /etc/passwd | tail -6

  8. 某脚本aa.sh运行时,不管是对还是错,希望把输出重定向到aa.txt中的写法是?
    a. ./aa.sh > aa.txt
    b. ./aa.sh 2> aa.txt
    c. ./aa 1> aa.txt
    d. ./aa.sh &> aa.txt

  9. 如果想把/etc/service 拷贝到/opt下同时保留属性不变,请问下面哪个命令可以?
    a. cp /etc/service /opt
    b. cp –r /etc/service /opt
    c. cp –a /etc/service /opt
    d. cp –p /etc/service /opt

  10. 执行date命令,想把命令的结果显示在屏幕,同时保存在aa.txt中,哪条命令能实现?
    a. date | tee aa.txt
    b. date > aa.txt
    c. date &> aa.txt
    d. date 2> aa.txt

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读