20210220-1 Linux命令(上)

 

一、查看目录和文件命令

 

查看目录或文件命令

> 在执行Linux命令时可以根据需要包括“选项”或“参数”, 通过“选项”或“参数”可以让一个命令每次运行时都能够接受用户不同的指令,采取不同的运行方式、作用于不同的对象、产生不同的运行结果, 一般“选项”会出现在“参数”的前面。在执行Linux命令时需要注意以下几点

    ○ (1) 在Linux中无论是文件名、目录名、命令等对英文字符的处理都是区分大小写的,因此“ls”和“LS”代表两个不同的命令。

    ○ (2) 在“命令”、“选项”、“参数”中间至少使用一个空格分隔。在使用 linux 时,其实是有一些规则的,比如做软件测试时要遵循国标一样,有强制性国标和推荐性国标,linux的使用也是这样

    ○ (3) 虽然并不是所有的Linux命令都要求“选项”必须出现在“参数”前面,但推荐在执行命令时,“选项”放在“参数”前面。

    ○ (4) 在 Linux命令中 “选项”一般需要一个引导符, 以 “-” 引导的是短格式选项 (单个字符),如 “-|”;以“--”引导的是长格式选项(多个字符) , 如“--detail”。多个短格式选项可以写在一起,只有一个“_”引导,如“-rv”“-r -v”表示相同的意思。

 

> pwd

    ○ 用于显示当前所在目录的完整路径。

[root@localhost vmware-tools]# pwd

/etc/vmware-tools

[root@localhost vmware-tools]#

比如这样就可以知道 vmware-tools 在 etc 目录下面;而提示中只能看到当前目录,当前目录的上一级是看不到的

> Is 参数 目录名

    ○ list (列表, 列出),用于显示目录中所含的子目录和文件的名称、属性等内容;省略“目录名”时显示当前目录中的子目录和文件。

 

-lIs -l 也可以写为 ll。使用长格式列出信息,会显示文件的类型、权限、链接数、文件所有者、文件所有者所在的组、文件大小(以B为单位)、最后修改时间、文件的完整名称(文件名+扩展名)。每一行显示一个文件或者目录。

这就是长格式列出信息

-a:列出所有文件及子目录,包括以 “.” 开始的隐藏文件。使用 |. 可以只显示隐藏文件。

前面的两个点 . .. 代表 当前目录

蓝色部分代表目录,黑色部分代表文件 .cache 等前面的 '.' 表示是一个隐藏文件

 

-a 显示所有 文件,-l 显示详细信息;现在想看全部文件的详细信息,应该怎么办? ls -al

也可以写成 ls -a -l

 

.:显示隐藏的目录和文件。

-A:列出除了“.”及“..”以外的所有项。

-h:以k字节为单位表示文件的大小,通常要配合-1使用,可以写为ll-h。

-p:以“/”结尾的形式来表示这是一个目录。

-F:在文件或目录后面加上不同的符号来区别文件或目录的类型,其中“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接; “=”表示套接字。

-S:根据文件大小排序。

-t:按文件修改时间排序。

-r:逆序排列。

--help:在标准输出上显示帮助信息。

--version:在标准输出上输出Is程序的版本信息。

--color=no:显示结果中的文字不显示彩色。

 

> Is

○【例3-1】长格式查看根目录下所有文件及子目录信息。

[root@localhost~]# Is -| /

○【例3-2】查看当前目录下的目录和大小文件。

[root@localhost~]# Is -hl

○ 通配符

*:匹配0个或任意多个的字符。

?:匹配一个任意字符。

[ ]:匹配任意一个包含在括号里的单字符,如 [abc]、[a-k]、[1-5,a-i]、[ab,x-z] 等。

查询文档内容时,我们可以加通配符

比如 (通配符需要放到选项之前)

a* 的意思是 第一个字符是 a,后面是什么没有要求

如果是 a? 呢?第一个是 a,?代表一个字符,所以 a? 只能是两个字符

 

查看目录或文件命令

> tree

    ○ 以树状形式显示目录结构

tree 如果要使用,需要安装,所以也称为外部命令,有的命令不能用,原因就是没有安装外部命令

> du 参数 文件或目录名

    ○ 用于统计目录或文件所占磁盘空间的大小。

性能测试时,性能监控的点,用的就是 du 命令;直接 du 将显示当前目录下,所有文件的总大小

 

如果想查看 boot 下的文件占用情况呢?boot 是内核所在的目录,就看 linux 内核有多大

这里的 139908 指的是字节数;如果想用容易理解的单位来显示,可以加上 -h;

当前 linux 内核占用了 137 兆

-a:显示全部目录和其子目录下的每个文件所占的磁盘空间。

-b:大小用bytes来表示。

-c:显示完毕后再加上总计(默认值)。

-s:只显示文件或者目录大小的总和。

-h:用容易理解的单位表示文件大小,如K、M、G。其计算单位为1024,即1G=1024M。

-H:与-h基本相同,但计算单位为1000,即1G=1000M。

 

> df   参数

   ○ 用于查看每个分区的空间占用情况

实际测试中,更多的是直接 df,将分区截图下来,放到测试计划中,说明服务器的空间大小

mount 挂载就是挂载到 dev 中,可以指定查看 dev 分区,可以直接查看 dev 分区所用的空间大小了

不过这并不是常规用的单位,我们习惯用兆,所以同样的方法

-a:显示所有文件系统的磁盘使用情况, 包括0块(block) 的文件系统, 如/proc文件系统。

-k:以k字节为单位显示。

-h:用容易理解的单位表示文件大小,单位显示为K、M、G等。其计算单位为1024,即1G=1024M。

-H:与-h基本相同,但计算单位为1000,即1G=1000M。

 

> file 文件名 

    ○ 用于查看文件类型。具体的文件类型包括: 

        ○ (1) 普通文件:对应于II命令显示结果中的“-”,还包括文本文件、程序文件、压缩文件等; 

        ○ (2) 目录:对应于1I命令显示结果中的第1位为“d”; 

        ○ (3) 设备文件:对应于II命令结果中的第1位为“c”或“b”,其中c表示字符文件,如键盘;b表示块设备,如硬盘; 

        ○ (4) 链接文件:对应于II命令显示结果中的第1位为“l”。 

其实查看文件类型有多种形式,比如 ls -l 即可

除此之外,用file文件也是可以的

[root@localhost ~]# file anaconda-ks.cfg

anaconda-ks.cfg: ASCII text

ASCII text 代表的是文本文件

 

> cat 参数 文件名 

    ○ 用于连接文件或者是将文件内容输出至标准输出设备。 

     -n:由1开始对所有输出行编号。 

     -b:与-n相似,只不过对于空白行不编号。 

     -s:当遇到有连续两行以上的空白行,仅显示一行的空白行。 

[root@localhost~]# cat/etc/sysconfig/network-scripts/ifcfg-eth0 

 

    ○ 结合管道运算符“>”、“>>”,cat可以将多个文件进行合并,然后将数据导出到另一个文件中。 

       ○ [root@localhost~] #cat               file1   file2>file 3 

       ○ [root@localhost~] #cat               file4>>file3 

cat + 文件名 查看文件内容

这是一个>,原来的 file3 中的数据就没有了,两个>代表追加

在工作中,以 >> 追加为主

 

> more 文件名、 less 文件名

    ○ 用于分屏显示文件内容。当文件内容比较多时,这两个命令非常实用。

> head 参数 文件名、 tail 参数 文件名

    ○ head用于显示文件前部的内容, 参数及含义如下:

       ○ -c 字节数:显示文件前面指定个数的字节。

       ○ -n 行数:显示文件前面指定个数的行,若省略n,则显示10行。

       ○ -v:详细输出模式(即显示文件头)。

    ○ tail用于显示文件尾部的内容, 参数及含义如下:

       ○ -c 字节数:显示文件尾部指定个数的字节,单位可选B、KB、MB。

       ○ -n 行数:显示文件尾部指定个数的行。

       ○ -v:详细输出模式(即显示文件头)。

回车看下一屏,但是 more 无法回看,只能往下翻;所以,可以用 less

[root@localhost etc]# less usb_modeswitch.conf

CTRL+Z 结束

head 只显示文件前面的一部分内容,与其对应的有一个 tail,只显示文件尾部的内容

 

> wc 参数 文件名

    ○ 不使用参数时,wc将统计文件中的行数、单词数和字节数。

    -c:显示字节数。

    -m:显示字符数。

    -1:显示行数。

    -L:显示最长行的字符数。

    -w:显示单词数。

[root@localhost etc]# wc usb_modeswitch.conf

40 229 1523 usb_modeswitch.conf

[root@localhost etc]# wc -l usb_modeswitch.conf

40 usb_modeswitch.conf

[root@localhost etc]#

测试的时候,会获得日志,想看日志行数,就会使用 wc 命令

 

二、创建及进入目录文件

 

创建、进入、删除、复制、移动命令

> 创建目录和文件

    ○ 创建目录

    ○ mkdir 参数 目录名列表

       ○ 目录名列表是使用空格逗号间隔多个目录名

常用参数及含义如下:

-p:递归创建目录,即创建多级目录。

-v:对已创建的目录输出一个信息

○ [root@localhost~]# mkdir test

○ [root@localhost~]# mkdir -v newdir

○ [root@localhost~]# mkdir test1/test2/test3

○ [root@localhost~]# mkdir -vp test1/test2/test3

[root@zxcv ~]# pwd

/root

[root@zxcv ~]# mkdir test

在 linux 上,如果没有提示,就代表我们的创建是成功的,如果想要有提示,可以加一个 -v

[root@zxcv ~]# mkdir -v newdir

mkdir: 已创建目录 "newdir"

 

[root@localhost ~]# mkdir test1/test2/test3

mkdir: 无法创建目录"test1/test2/test3": 没有那个文件或目录

[root@localhost ~]# mkdir -pv test1/test2/test3

mkdir: 已创建目录 "test1"

mkdir: 已创建目录 "test1/test2"

mkdir: 已创建目录 "test1/test2/test3"

 

    ○ 创建文件

       ○ 使用 vi 可以新建并编辑文件,但是如果文件中不写入任何数据而且不保存的话,在退出vi后文件内容是不保留的,但可以保存空文件。

但是现在要创建一个日志,日志不是由我们编辑的,是由系统编辑的,应该怎么办?

这时就需要另外一个命令,叫 touch + 文件名

    ○ touch文件名

       ○ touch本来是修改文件访问时间的命令,如果文件不存在,touch会创建一个空文件。

touch 本来的意义是修改文件的访问时间,但是目前为止,linux把这个抛弃掉了

所以更多的时候用它来创建一个空文件

[root@localhost ~]# touch a1

[root@localhost ~]# ls

a1 anaconda-ks.cfg etc initial-setup-ks.cfg test1 视频 下载

 

> 进入目录和文件

    ○ 进入或切换目录

       ○ cd 相对路径或绝对路径

[root@localhost ~]# cd test1

[root@localhost test1]# ls

test2

[root@localhost test1]# cd 回到 root 目录,cd 即可

[root@localhost ~]#

 

cd ..:切换至父目录(注意:冒号不是命令)

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# cd ..

[root@localhost sysconfig]#

 

cd ../home:切换至父目录下的子目录home

cd /var/www/html:绝对路径的写法,进入

/var/www/html

cd:切换至当前用户的家目录

cd ~:切换至当前用户的家目录

cd ~zhsan:切换至用户zhsan的家目录

    ○ 进入文件

       ○ 使用 vi 即可。

进入目录用 cd,进入文件用 vim

 

三、删除,复制,移动命令

 

创建、进入、删除、复制、移动命令

> 删除目录和文件

   ○ 删除目录

      ○ rmdir 参数 目录

      ○ rmdir只能删除空目录

-v:对已经删除的目录给出提示信息。

-p:递归删除目录。

○ [root@localhost ~]# rmdir test

○ [root@localhost ~]# rmdir -p testl/test2/test3

cd 可以直接回到起始目录

类似于拆房子,没人会在里面拆房子,所以要退出到房子外面拆才可以

 

    ○ 删除目录和文件

       ○ rm 参数 目录或文件名

       rm 也可以删除目录,但是建议什么命令就用什么删除最好

       ○ 可以删除多个文件或目录,多个文件或目录用空格或逗号间隔。

       建议用逗号间隔

       -i:交互式删除,删除时需要使用者确认是否删除(这是默认值)。

       [root@localhost ~]# rm file1

       rm:是否删除普通空文件 "file1"?n

       -r:递归删除,非空目录也可删除。

       如果某一目录下的某一文件删除了,删除后目录为空,这时目录也一起跟着删除

       -f:不提示确认信息,强制删除。

       -v:显示执行结果信息。创建、进入、删除、复制、移动命令

 

> 复制目录或文件

    ○ cp 参数 源目录或文件 目的目录或文件

    ○ 把源复制到目的地,可以复制文件和目录

    把 file1 复制到 newdir目录下

    [root@localhost ~]# cp file1 newdir/

    [root@localhost ~]# cd newdir/

    [root@localhost newdir]# ls

    file1

    现在要在复制 file1 的同时改变名字,需要在同一个目录下操作

    [root@localhost newdir]# cp file1 zxc1

    [root@localhost newdir]# ls

    file1 zxc1

    如何复制目录呢?一定要加 -r

    [root@localhost ~]# cp -r /bin /root

    [root@localhost ~]# ls

    anaconda-ks.cfg bin initial-setup-ks.cfg sort.txt 视频 下载 ……

    -r:若要复制目录,将递归复制该目录下所有的子目录和文件,此时目标必须也是目录。

    如果想复制目录,必须加 -r

    -u:如果源比较新,或者未写目的,才会进行复制。

    -f:当目标存在时,强制覆盖。

    -i:和-f选项相反,在覆盖目标之前给出提示,要求用户确认,回答“y”时目标文件将被覆盖。

    -p:除复制源的内容外,还将把其修改时间和访问权限复制到目的地中

    -a:常在复制目录时使用,该选项保留链接、文件属性,并递归地复制目录。

    ○ [root@localhost ~]# cp bashrc bashrc

    ○ [root@localhost ~]# cp –r /bin /tmp/bin创建、进入、删除、复制、移动命令

 

> 移动或改名

    ○ mv 参数 源 目的

    移动的同时可以改名,选项和 cp 类似

    ○ 对文件或者目录进行移动或更名;若源和目的在同一目录下,表示改名;若不在同一目录下表示移动,移动时也可以同时改名。

    newdir中存在file1,所以会给出是否覆盖的提示

    [root@localhost ~]# mv file1 newdir/

    mv:是否覆盖"newdir/file1"? n

    -f:强制覆盖现有的文件或目录,不进行任何提示。(-f 用的比较多)

    -i:覆盖前先行询问用户。

    -u:在移动文件或者目录时,若目标文件或目录已存在,并且源文件日期比目标文件新,则覆盖更新。

    -v:执行时显示详细的信息。

    ○ [root@localhost ~]# mv bashrc bashrc. old

    ○ [root@localhost ~]# mv bashrc.old /tmp

 

补充

> 命令历史记录

    ○ bash也支持命令历史记录,这意味着bash保留了一定数目的用户先前已经在 shell 里输入过的命令,这个数目取决于一个叫做 history

    ○ 使用历史记录列表的方法:

       ○ 最简单的方法是用上下方向键,按上方向键后最后输入的出现在命令行上

       ○ 另一个使用命令历史文件的方法是bash的内部命令 history 和 fc 来显示

          [root@localhost root]#history n

    ○ 执行历史命令

       ○ !命令编号

    ○ 修改命令历史列表文件的内容

       history [-r|w|a|n] [filename]

除了可以记录之前操作的命令,也可以记录我们给它的命令,可以把文档里写入的命令导入给history

 

-r:读命令历史列表文件的内容并且把它们当作当前的命令历史列表

-w:把当前的命令历史记录写入文件中并覆盖文件原来的内容

-a:把当前的命令历史记录追加到文件中

-n:将读取文件中的内容 并加入到当前历史列表中

 

四、打包与解压缩

 

打包与解压缩命令

> gzip压缩命令

常用参数及含义如下:

-c:将输出写到标准输出上,并保留原有文档。

-d:将压缩文档解压。

-r:递归式地查找指定目录并压缩其中的任何文档或是解压缩。

-t:测试,检查压缩文档是否完整。

-v:对每一个压缩和解压的文档,显示文档名和压缩比。

-num:用指定的数字num调整压缩的速度。

-1或-fast:表示最快压缩方法(低压缩比)。

-9或-best:表示最慢压缩方法(高压缩比),系统默认值为6。

○ 将目录下所有文件进行压缩,源文件被删除

○ [root@localhost ~]# gzip *

○ 解压所有gzip压缩包并查看详细信息,压缩文件被删除

○ [root@localhost ~]# gzip -dv *

在计算机系统中,只有通过压缩传输时,才不会出现掉帧断线等现象。比如现在把 /boot 压缩一下

[root@localhost ~]# cd /boot

[root@localhost boot]# ls

……

vmlinuz-0-rescue-ca1fbbde2e1f41259b6062e0e3f0829c

vmlinuz-3.10.0-862.el7.x86_64

[root@localhost boot]# gzip *

……

gzip: symvers-3.10.0-862.el7.x86_64.gz already has .gz suffix -- unchanged

……

[root@localhost boot]# ls

……

vmlinuz-0-rescue-ca1fbbde2e1f41259b6062e0e3f0829c.gz

vmlinuz-3.10.0-862.el7.x86_64.gz

压缩之后,所有文件名自动加一个 gz 的扩展名

 

现在要进行解压缩,同时删除解压缩后的gz文件

[root@localhost boot]# gzip -dv * (会显示压缩比,这里省略)

[root@localhost boot]# ls

……

vmlinuz-0-rescue-ca1fbbde2e1f41259b6062e0e3f0829c

vmlinuz-3.10.0-862.el7.x86_64

 

> bzip压缩命令

    ○ 只能用于压缩或解压文件。若执行多个文件,则将多个文件单独压缩(产生多个压缩文件)。压缩后文件的扩展名是.bz2

    基本格式:bzip2 参数 文件1 文件2 (也可以不加参数,直接写上文件名)

常用参数及含义如下:

-d:将压缩文档解压,等价于“bunzip2 压缩文件”。

-k:保留源文件。

*其他参数与gzip同。打包与解压缩命令

bzip在现在的 linux 中已经变成第二个版本了,所以是 bzip2

[root@localhost boot]# bzip2 symvers-3.10.0-862.el7.x86_64 config-3.10.0-862.el7.x86_64

[root@localhost boot]# ls

config-3.10.0-862.el7.x86_64.bz2

……

symvers-3.10.0-862.el7.x86_64.bz2

……

扩展名就变成 bz 了;

 

如果要解压,在当前命令之前,加 -d ,注意加上扩展名;如果解压失败了,可能因为文件被占用

[root@localhost boot]# bzip2 -d symvers-3.10.0-862.el7.x86_64.bz2 config-3.10.0-862.el7.x86_64.bz2

[root@localhost boot]# ls

config-3.10.0-862.el7.x86_64

……

symvers-3.10.0-862.el7.x86_64

……

-t 检测压缩包,如果压缩是完整的就不会有任何提示,如果压缩是完整的,会提示错误

[root@localhost boot]# bzip2 symvers-3.10.0-862.el7.x86_64

[root@localhost boot]# bzip2 -t symvers-3.10.0-862.el7.x86_64.bz2

bzip的其他选项与gzip基本上是一样的

 

> zip压缩

○ 可以压缩文件和目录。压缩后文件的扩展名是.zip

○ 基本格式:zip 参数 压缩文件名 原文件或目录名

    ○ -m:删除原文件。

○ 解压命令格式:unzip 参数 压缩文件名

    ○ -d 新目录:指定解压后的文件位置。打包与解压缩命令

zip用的比较少,80%以上用的都是gzip

 

> tar命令

○ tar命令用于打包备份,它最初是为了制作磁带备份而设计的(把文件和目录复制到磁带中,然后从备份中提取或恢复文件),而现在可以把它用于任何设备。它是Linux系统中一个非常实用的程序,也是数据备份中最常用的命令之一。和其他备份工具相比,tar命令更易于使用,而且安全和可靠,它几乎可以在任何Linux或UNIX系统上读取文件,并进行数据的合理备份。

○ 基本格式:tar 参数 包文件名 目录或文件列表

 

常用参数及含义如下:

-c:用于创建打包文件。

-v:表示回显模式(Verbose),显示一系列打进包的文件列表。

回显是指打包的时候会显示哪些包已经打包了,打包率是多少

-f:指定使用打包的文件,即输出的打包文件名

-z:使用gzip压缩方式创建和解开打包文件。这是GNU的新版tar的功能,系统需要同时支持gzip功能。

-x:将打包文件展开,即将文件分离出来。

 

○ 将etc下所有内容打包成backup.tar

    ○ [root@localhost ~]# tar cvf backup.tar /etc

○ 将backup.tar解包

    ○ [root@localhost ~]# tar xvf backup.tar打包与解压缩命令

 

现在想对 etc 目录进行打包,打包用 -c,c是打包文件,除了打包文件还要有-v回显,打包后要有文件名,所以需要 -f 后面跟文件名

[root@localhost boot]# tar -cvf backup.tar /etc

……

/etc/mcelog/triggers/

/etc/mcelog/triggers/cache-error-trigger

/etc/mcelog/triggers/dimm-error-trigger

…… 这里显示的内容就是 -v 的作用

 

现在在当前目录就有一个 backup.tar 的文件了

[root@localhost boot]# ls

backup.tar

……

 

那么,怎么解包呢?用 -x

[root@localhost boot]# tar -xvf backup.tar

……

[root@localhost boot]# ls

……

etc

…… ls 查看 能够看到 etc 被解压出来了;

目录在哪,打包后的文件就在哪,目录是什么,打包后的文件名就是什么

 

> tar与gzip的结合

○ 在实际应用中gzip命令tar命令经常组合在一起使用,以实现打包并压缩的目的。要打包并压缩,可用如下命令:

○ 把hi.txt打包压缩为hi.tar.gz

    ○ [root@localhost ~]# tar zcvf hi.tar.gz hi.txt

z代表的就是gzip;cvf 就是对其打包;扩展名一定是 tar.gz 的形式

[root@localhost boot]# tar -zcvf hi.tar.gz /etc

……

[root@localhost boot]# ls

backup.tar (这是之前没压缩的)

……

hi.tar.gz

……

[root@localhost boot]# ls -l

总用量 174752

-rw-r--r--. 1 root root 33361920 2月 14 12:21 backup.tar

……

-rw-r--r--. 1 root root 10706505 2月 14 17:34 hi.tar.gz

从文件大小中能看出来,同样的文件加压缩了,可以很快看出来大小不一致了

 

○ 要解压文件,可用以下命令:

    ○ [root@localhost ~]# tar xvfz hi.tar.gz

既然压缩了,就涉及解压解包的内容,用 -zxvf 代表解包

[root@localhost boot]# tar -zxvf hi.tar.gz

……

[root@localhost boot]# ls

……

etc     可以看到解包完成了

……

○ 注意,在日常应用中,经常可以看到类似*.tar.gz和*.tgz的文件,其实只是命名方法的不同,其本质是一样的,即:可以用*.tar.gz命名,也可以用*.tgz命名。

 

©著作权归作者所有:来自51CTO博客作者ATaburiss的原创作品,如需转载,请注明出处,否则将追究法律责任