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 (列表, 列出),用于显示目录中所含的子目录和文件的名称、属性等内容;省略“目录名”时显示当前目录中的子目录和文件。
-l:Is -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命名。