了解Linux分区和常见命令 2

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值