5 常见命令归纳
在Windows中,可以通过某文件的图标或文件后缀,来判断这是一个什么类型的文件, 如果是可执行文件,还是一个文本文件。但在Linux中,很多文件类型往往和后缀没有关 系,所以我们要判断一个文件是什么类型的文件可以用file来判断。file的用法如下
file /path/file
例如,判断/etc/hosts是什么类型的文件,命令如下。
[root@redhat8 ~]# file /etc/hosts
/etc/hosts: ASCII text
这里显示/etc/hosts是一个文本文件。 判断/boot/initramfs-4.18.0-348.el8.x86_64.img的文件类型,命令如下。
[root@redhat8 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
这里显示/boot/initramfs-4.18.0-348.el8.x86_64.img是一个CPIO归档文件。
注意 这里/boot/initramfs-4.18.0-348.el8.x86_64.img中的版本,请通过ls /boot来确定。
wc用于统计文件的行数,单词数、字符数,先查看/etc/hosts中的内容
[root@redhat8 ~]# wc /etc/hosts
2 10 158 /etc/hosts
第一个数字2表示/etc/hosts有2行。第二个数字10表示/etc/hosts有10个单词,这里单词 指的是以空格、【TAB】、逗号隔开的字符。第三个数字158表示/etc/hosts一共有158个字 符,这里统计字符数包括了空格及行末我们看不到的换行符。
以上几个信息也可以单独查看,wc -l可以查看文件的行数,wc -w 可以查看文件的单词数,wc -c 可以查看文件的字符数,如图所示
touch 用于创建文件或者更新一个文件的时间,用法如下。
touch /path/file
如果 /path/file 不存在,则会把这个文件创建出来;如果存在,则会更新这个文件的时间。 先查看/opt目录中的内容
[root@redhat8 ~]# ls /opt/
11 yy
这里并不存在aa1.txt文件
[root@redhat8 ~]# touch /opt/aa1.txt
[root@redhat8 ~]# ls /opt/
11 aa1.txt yy
这样就把aa1.txt创建出来了。
我们知道/etc/hosts是存在的,先查看这个文件的信息。
[root@redhat8 ~]# ls -l /etc/hosts
-rw-r--r--. 1 root root 158 9月 10 2018 /etc/hosts
然后对整个文件进行touch操作
[root@redhat8 ~]# touch /etc/hosts
[root@redhat8 ~]# ls -l /etc/hosts
-rw-r--r--. 1 root root 158 11月 30 12:06 /etc/hosts
可以看到,这个文件的时间更新了,这里并不会覆盖这个文件的内容,仅仅是更新了时间 而已。
rm 用于删除一个文件和目录
root@redhat8 ~]# rm /opt/aa1.txt
rm:是否删除普通空文件 '/opt/aa1.txt'?y
这里必须输入“ y ”,如果什么都不输入直接按【Enter】键,等同于输入“ n ”并按 【Enter】键,即不删除的意思。
因为/opt/11是一个目录,所以可以在rm后加上 -rf 选项,-r 表示递归的意思,-f 表示强 制的意思。
[root@redhat8 ~]# rm -rf /opt/11/
[root@redhat8 ~]# ls /opt/
yy
ln 用于创建软链接,所谓软链接,就是Windows中的快捷方式,ln的用法如下。
ln ‐s 源文件 快捷方式
例如,给/opt/yy创建一个快捷方式/opt/zz,命令如下。
[root@redhat8 ~]# ln -s /opt/yy /opt/zz
[root@redhat8 ~]# ls -l /opt/zz
lrwxrwxrwx. 1 root root 7 11月 30 16:33 /opt/zz -> /opt/yy
查看/opt/zz的属性,可以看到/opt/zz是指向/opt/yy的。删除/opt/zz,命令如下。
[root@redhat8 ~]# rm -rf /opt/zz
alias用于创建别名,对于一个复杂的命令,我们可以创建别名,以后执行别名即可。 alias 的用法如下。
alias 别名='命令'
下面做一个练习,用命令ifconfig ens160创建一个别名xx,注意系统中是没有xx命令的。
[root@redhat8 ~]# xx
bash: xx: 未找到命令...
下面为ifconfig ens160设置一个别名xx。
[root@redhat8 ~]# alias xx='ifconfig ens160'
[root@redhat8 ~]# xx
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.184.100 netmask 255.255.255.0 broadcast 192.168.184.255
inet6 fe80::20c:29ff:febd:3448 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bd:34:48 txqueuelen 1000 (Ethernet)
RX packets 8405 bytes 2419334 (2.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3303 bytes 255727 (249.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到,当执行xx命令时,实际上执行的是ifconfig ens160命令。
取消别名的语法如下
unalias 别名
取消xx这个别名,命令如下。
[root@redhat8 ~]# unalias xx
cat 用于查看比较小的(文本)文件,用法如下
cat /path/file
例如,查看/etc/hosts中的内容。命令如下。
[root@redhat8 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
但是对于比较大的文件 cat 就不太合适了,因为cat命令会很快地将文件的内容像翻书一 样“翻过去”,直接翻到最后,我们可以用less或more命令。
more的用法如下
more /path/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@redhat8 ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
或者
[root@redhat8 ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
tail默认查看文件的后10行,如果想查看文件后几行,有两种方法,命令如下。
tail ‐n N /path/file
或者
tail ‐N /path/file
例如,查看/etc/passwd的最后2行,命令如下。
[root@redhat8 ~]# tail -n 2 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
jerry:x:1000:1000:jerry:/home/jerry:/bin/bash
或者
[root@redhat8 ~]# tail -2 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
jerry:x:1000:1000:jerry:/home/jerry:/bin/bash
6.重定向
执行一条命令时,命令的结果总是输出到屏幕上的。如果希望把这个命令的结果保存在某 个文件中而不是输出到屏幕上,就要用到重定向了。重定向就是重新定位输出的方向,能用 到的符号包括 “>” “>>” “2>” "2>>” “&>” “&>>”,这里不要把“”当作大 于号,当作“箭头”就很容易理解了。
下面分别看一下这些重定向的使用方法。
命令 > /path/file
如果/path/file不存在,则会自动创建出来;如果存在,则会先清空此文件的内容,然后把 命令的结果写入此文件中,这种写法叫做覆盖写。
下面练习一下 “>” 重定向
[root@redhat8 ~]# uname
Linux
[root@redhat8 ~]# ls aa.txt
ls: 无法访问'aa.txt': 没有那个文件或目录
这里没有重定向,uname的结果直接输出到屏幕上,而是写入当前目录中aa.txt也是不存在的。
[root@redhat8 ~]# uname > aa.txt
可以看到,aa.txt中的内容就是uname命令的结果。下面在输入一个命令重定向到aa.txt中,
[root@redhat8 ~]# cal > aa.txt
cal 的结果并没有任何输出,因为重定向写入aa.txt中了。
[root@redhat8 ~]# cat aa.txt
十一月 2023
日 一 二 三 四 五 六
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
可以看到,aa.txt中原来的内容“Linux”已经没有了,因为“>”是覆盖写,要先清空 aa.txt的内容,然后再把cal命令的结果写进去。
命令 >> /path/file
如果/path/file不存在,则会自动创建出来;如果存在,命令的结果会在 /path/file原有内 容的后面接着写,并不清空此文件的内容,这种写法叫作追加写。
下面我们执行两次uname,通过“>>”写进aa.txt 中。
[root@redhat8 ~]# uname >> aa.txt
[root@redhat8 ~]# uname >> aa.txt
[root@redhat8 ~]# cat aa.txt
十一月 2023
日 一 二 三 四 五 六
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
可以看到,aa.txt中原有的内容仍然是存在的,uname的结果是在后面接着写的。
不管是 “>” 还是 “>>”,都只能重定向正确的结果,不能重定向错误的结果。
[root@redhat8 ~]# unamexx > aa.txt
bash: unamexx: 未找到命令...
[root@redhat8 ~]# cat aa.txt
因为 “>” 会先清空aa.txt的内容,unamexx命令是不存在的,结果报错了,所以没有 重定向成功,aa.txt的内容被清空了。
如果要重定向错误的结果,需要用到“2>”和“2>>”。这网个付亏与和“>”一 样,“2>”表示覆盖写,“2>>”表示追加写。下面看一个例子。
[root@redhat8 ~]# unamexx2> aa.txt
bash: unamexx2: 未找到命令...
[root@redhat8 ~]# cat aa.txt
这里unamexx是一个错误的命令,报错信息并没有输出到屏幕上,而是写入 aa.txt中了
[root@redhat8 ~]# xxxx 2> aa.txt
[root@redhat8 ~]# cat aa.txt
bash: xxxx: 未找到命令...
这里再次执行了一个错误命令xxxx,结果也没有输出到屏幕上,而是覆盖地写人 aa.txt中 了,所以aa.txt 中没有原来的unamexx的报错信息。
再次执行两次unamexx命令,通过“2>>”来重定向。
[root@redhat8 ~]# unamexx 2>> aa.txt
[root@redhat8 ~]# unamexx 2>> aa.txt
[root@redhat8 ~]# cat aa.txt
bash: xxxx: 未找到命令...
bash: unamexx: 未找到命令...
bash: unamexx: 未找到命令...
因为“2>>”表示追加写,所以报错信息是追加着写到aa.txt中了,并没有清空原来xxxx.的报错信息。
如果想不管是正确还是错误的结果都能重定向,可以用“&>”和“&>>”。“&>”表示追加写,“&>>”表示覆盖写,凡是带“>”的都是覆盖写,凡是带“>>”的都是追加写。下面练习一下。
[root@redhat8 ~]# uname &> aa.txt
[root@redhat8 ~]# xxxx &>> aa.txt
[root@redhat8 ~]# cat aa.txt
Linux
bash: xxxx: 未找到命令...
可以看到,不管是正确还是错误的命令都重定向到aa.txt中了。
7 管道
在Windows的CMD 中执行netstat -an命令,会获取大量的内容,显示当前系统的端口 状态及建立的连接。如果想查看端口445的状态,可以用如下命令。
C:\Users\Administrator>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
C:\Users\Administrator>
这里find “445”是在哪里查询445呢?是从前面netstat -an命令的结果中来查询。这当 中的竖杠 “I” 就是管道的意思,管道的用法如下。
命令1 | 命令2
管道可以把多个命令连接起来,管道前面命令的结果作为管道后面命令的参数。
例如,要查看/etc/passwd的第6行到第10行的内容,命令如下。
先用head获取l/etc/passwd的前10行,然后通过管道传递给tail,获取/etc/passwd前10 行的后5行,也就是从第6行到第10行的内容。
[root@redhat8 ~]# 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
又如,要获取网卡ens160含有IP的那行内容,命令如下。
root@redhat8 ~]# ifconfig ens160 | grep 'inet'
inet 192.168.184.100 netmask 255.255.255.0 broadcast 192.168.184.255
先通过ifconfig ens160获取ens160的IP,然后通过 grep从这个结果中过滤到含有“inet ”的行。grep的意思是从指定的文件或内容中获取含有某个关键字的行。
注意 上面命令inet的后面有一个空格
这里使用了管道之后,只显示了最终的结果,管道前面命令的结果并没有保留。如果想把管道前面命令的结果保留下来,可以用tee命令。例如,下面的命令。
root@redhat8 ~]# ifconfig ens160 | tee bb.txt
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.184.100 netmask 255.255.255.0 broadcast 192.168.184.255
inet6 fe80::20c:29ff:febd:3448 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bd:34:48 txqueuelen 1000 (Ethernet)
RX packets 10630 bytes 2594183 (2.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4450 bytes 355737 (347.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这里ifconfig ens160先把结果通过管道传递给tee命令,保存在bb.txt中,然后结果正常 输出到屏幕上。这样ifconfig ens160的结果既保存在 bb.txt中,也输出到屏幕上了。
再看下面的例子。
[root@redhat8 ~]# ifconfig ens160 | tee bb.txt | grep 'inet'
inet 192.168.184.100 netmask 255.255.255.0 broadcast 192.168.184.255
这里ifconfig ens160先把结果传递给tee命令,保存在bb.txt中。然后结果本应继续输出 到屏幕上的,但是又遇到了管道,把结果传递到gren讨滤含有关键字的行,这样最终看到的 是含有“inet”的那行。
下面查看bb.txt的内容,命令如下。
[root@redhat8 ~]# cat bb.txt
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.184.100 netmask 255.255.255.0 broadcast 192.168.184.255
inet6 fe80::20c:29ff:febd:3448 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bd:34:48 txqueuelen 1000 (Ethernet)
RX packets 10912 bytes 2616414 (2.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4593 bytes 368809 (360.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0