本文所有示例均在CentOS发行版上完成

虚拟机的安装(未完成)

常用命令

在日常运维管理工作中,快捷键可以大大提高工作效率。

快捷键

  • Ctrl十C:结束(终止)当前命令。如果你输人了一大串字符,但不想运行,可以按Ctrl+C组合键,此时光标将跳人下一行.而在刚刚的光标处会留下一个^C的标记.
  • Tab:实现自动补全功能。这个键比较重要,使用频率也很高。当你输人命令、文件或目录 的前几个字符时,它会自动帮你补全。
  • Ctl+D:退出当前终端。同样,你也可以愉人命令exit实现该功能。
  • Ctrl+Z:暂停当前进程。这和Ctrl+C是有去区别的,暂停后,使用fg命令恢复该进程。
  • Ctrl+L:清屏,使光标移动到屏幕的第一行。当命令和显示的结果占满整个屏幕时.我们每运行一个命令.都会在最后一行显示,这样看起来不太方便.此时就可以使用这个快捷键.让光标移动到屏幕第一行,也就是所谓的清屏。
  • Ctl+A:可以让光标移动到命令的最前面。有时候一条命令很长,快敲完时现前面某个字母不对,此时可以直接用这个快捷键把光标定位到行首,然后再用左右方向键微调光标的位置。
  • Ctl+E:可以让光标移动到最后面,作用同上。

查看命令man

man:用于查看命令的帮助文档,其格式为man 命令。例如如下命令:

# man ls

如果屏幕不能显示完整,可以按空格键下翻,或者按上下方向键前后移动文本。若想退出帮助文档,按字母键q。

ls命令

ls是list的缩写,该命令用于列出指定目录或者文件

  • 后面不加任何选项也不跟目录名或者文件名:会列出当前目录下的文件和目录。不包含隐藏文件。
  • 后面加-a选项、不加目录名或者文件名:会列出当前目录下所有文件和日录,含有隐藏文件。
  • 后面加-l选项、不加目录名或者文件名:会列出当前目录下除隐藏文件外的所有文件和日录的详细信息。包含其权限、所属主、所属组以及文件创建日期和时间
  • 后面不加选项、只跟文件名:会列出该文件,使用时通常都是加上-1选项。用来查看该文件的详细信息。
  • 后面不加选项、只跟目录名:会列出指定目录下的文件和目录。

关机和重启

如果要关机或重启,必须要保证当前系统中没有其他用户在登录系统。可使用who命令查看是否还有其他人在登录,或者使用命令ps -aux查看是否还有后台进程运行。
关机的命令有shutdown -h now、halt、poweroff、init 0,重启系统的命令有shutdown -r now、reboot、init 6,例如

# shutdown -h 10  	#计算机将在10分什后关机,且会显示在登录用户的当前屏幕中
# shutdown -h now #立即关机
# shutdown -h 20:25 #系统将在20:25关机
# shutdown -h +10 #10分钟后关机
# shutdown -r now #立即重启
# shutdown -r +10 #10分钟后重启
# reboot #重启,等同于shutdown -r now
# halt #关闭系统,等同于shutdown -h now和poweroff

不管是重启系统还是关闭系统,首先要运行sync命令,它可以把当前内存中的数据写人磁盘中,防止数据丢失。

文件和目录管理

系统目录结构

“/”是Linux操作系统里面最核心的一个目录,所有的文件和目录全部在它下面,所以称它为“根目录”。

  • /bin:bin是Binary的缩写,该目录下存放的是最常用的命令。
  • /boot:该目录下存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev:dev是Device(设备)的缩写。该口录下存放的是Linux的外部设备。在Linux中,访问设备的方式和访问文件的方式是相同的。
  • /etc:该目录下存放的是所有系统管理所需要的配置文件和子目录。
  • /home:这是用户的家目录。在Linux中.每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib和/lih64:这两个目录下存放的是系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。其中/lib64为64位的软件包的库文件所在日录。
  • /media:系统会自动识别一些设备(如U盘、光驱等),当识别后,Linux会把识别的设备挂载到该目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统。我们可以将光驱挂载到/mnt/上,然后进人该目录查看光驱里的内容。
  • /opt:这是给主机额外安装软件所设置的目录,该目录默认为空。比如,你要安装一个Oracle数据库,可以放到该目录下。
  • /proc:该目录是一个虚拟目录,是系统内存的映射,可以直接访问它来获取系统信息。该目录的内容在内存里,我们可以直接修改里面的某些文件。比如可以通过下面的命令来屏蔽主机的ping命令,使其他人无法ping你的机器。在日常工作中,你会经常用到类似的用法:
    # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:该目录是系统管理员的用户家目录。
  • /run:这个目录其实和/var/run是同一个目录,这里面存放的是一些服务的pid。一个服务启动完后.是有一个pid文件的。
  • /shin:s就是Super User的意思,该目录存放的是系统管理员使用的系统管理程序。
  • /srv:该目录存放的是一些服务启动之后需要提取的数据。
  • /svs:该目录存放的是与硬件驭动程序相关的信息。
  • /tmp:该目录用来存放一些临时文件。
  • /usr:这是一个非常重要的目录,类似于Windows下的Program Files目录,用户的很多应用程序和文件都存放在该目录下
  • /usr/bin:该目录存放的是系统用户使用的应用程序。
  • /usr/sbin:该目录存放的是超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src:该目录是内核源代码默认的放置目录。
  • /var:该目录存放的是不断扩充且经常修改的日录,包括各种日志文件或者pid文件,其中刚刚提到的/var/run就是在这个目录下面。

注:有几个重要的目录不要误删除或者随意更改其内部文件。

1. /etc目录下是系统的配置文件,如果更改了该目录下的某个文件,可能会导致系统无法正常启动。

2. /bin、/sbin、/usr/bin和/usr/sbin目录是系统顶设的执行文件的放置目录,其中/bin和/usr/bin目录下是供系统用户使用的指令(除root外的通用账户),而/sbin和/usr/sbin目录下则是供root使用的指令。比如,ls指令就存放在/bin/目录下。

3. /var也是一个非常重要的目录,系统上运行各个程序时所产生的日志都被记录在该目录下(即/var/log目录中)。另外mail指令的预设也放置在这里。

绝对路径和相对路径

  • 绝对路径:路径的写法一定是由根目录写起的,例如/usr/local/mysql
  • 相对路径:路径的写法不是由根目录/写起的。例如.首先用户进人到/home,然后再进人到test,执行的命令为
# cd /home
# cd test #test是相对于/home目录来讲的,所以称为相对路径

文件属性

用ls -l命令查看当前目录下的文件时,共显示了9列内容

第1列:第1列共11位,其中第1位用来描述该文件的类型。

注:最后1位的“.”,老版本CentOS 5是没有这个点的,是因为新版本的ls添加了SELinux或者acl的属性。如果文件或者目录使用了SELinux context的属性,这里会是一个点“.”;如果设置了acl的属性,这里会是一个加号“+”。 

  • d:directory 表示该文件为目录。
  • -:regular file 表示该文件为普通文件。
  • l:link file表示该文件为链接文件,类似windows下的快捷方式
  • b:block 表示该文件为块设备,比如/dev/sda就是这样的文件,磁盘分区文件就是这种类型。
  • c:character 表示该文件为串行端口设备文件(又称字符设备文件),比如键盘、鼠标、打印机、tty终端等都是这样的文件。
  • s:socket 表示该文件为套接字文件,用于进程之间的通信。

文件类型后面的9位,每3位为一组。

  • r代表可读,w代表可写,x代表可执行。
  • 前3位为所有者(user)的权限
  • 中间3位为所属组(group)的权限
  • 最后3位为其他非本群组用户(others)的权限

如:

  • 一个文件的属性为-rwxr-xr-,该文件为普通文件,文件拥有者可读、可写且可执行,文件所属组对其可读、不可写但可执行,其他用户对其只可读。
  • 任何一个目录必须要有x权限才能打开并查看该目录下的内容。
  • 一个目录的属性为drwxr–r–,其所有者为root,那么除root之外的其他用户是不能打开这个目录的。

第2列:表示该文件占用的节点(inode),如果是目录,那这个数值与该日录下是子目录数量有关。
第3列:表示该文件的所有者。
第4列:表示该文件的所属组。
第5列:表示该文件的大小。
第6列、第7列和第8列:表示该文件最后一次被修改的时间(mtime),依次为月份、日期及时间。
第9列:表示文件名。

文件后缀名

在Linux系统中,文件的后缀名没有具体意义。是为了便于区分,习惯在定义文件名时加后缀名。例如1.sh、2.tac.gz、my.cnf,test.zip等。

  • 1.sh:代表它是一个shell脚本
  • 2.tar.gz:代表它是一个压缩包
  • my.cnf:代表它是一个配置文件
  • test.zip:代表它是一个压缩文件

环境变量PATH

命令which:用于查找某个命令的绝对路径

# which rmdir
/usr/bin/rmdir

# which rm
alias rm='rm -i'
/usr/bin/rm

# which ls
alias ls='ls --color=auto'
/usr/bin/ls

# 命令alias可以设置命令或文件的别名。rm实际上是rm -i,加上-i选项后,删除文件或者命令时都会询问是否确定要删除(后续详解)

环境变量PATH的作用为:使用命令时,只需直接写出命令,而不需写出命令的绝对路径

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

因/bin目录在PATH中,所以可以找到ls。由于PATH里没有/root目录,如果将ls移到/root目录下,当执行ls命令时,系统将找不到可执行文件,会提示command not found!

解决办法有两种:

  • 直接将/root路径加人到$PATH当中
# PATH=$PATH:/root
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
# ls
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos ls
  • 使用绝对路径
# /root/ls
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos ls

创建与删除

命令cd:切换

命令cd (change directory的简写)是用来变更用户所在目录的,如果后面什么都不跟,就会直接进人当前用户的根目录下。如果后面跟目录名,则会直接切换到指定目录下。命令cd后面只能是目录名,如果跟了文件名,则会报错,示例如下:

# cd /tmp/
# pwd #命令pwd用于显示当前所在目录的绝对路径名称
/tmp

# cd
# pwd
/root

特殊符号: “.”表示当前目录, “..”表示当前目录的上一级目录

# cd /usr/local/lib/
# pwd
/usr/local/lib

# cd .
# pwd
/usr/local/lib

# cd ..
# pwd
/usr/local

命令mkdir:创建

命令mkdir (make directory的简写)用于创建目录,格式为:

mkdir [-p] [目录名称]

-p:若所建的上层目录不存在,则会级联创建上层目录;若创建的目录已存在,它不会做任何事情,并且不会报错;示例如下:

# mkdir /tmp/test/123
mkdir:无法创建目录‘/tmp/test/123’:没有那个文件或目录

# mkdir -p /tmp/test/123
# ls /tmp/test
I23
# mkdir /tmp/test/123
mkdir:无法创建目录‘/tmp/test/123’:文件已存在

# mkdir -p /tmp/test/123
# ls -ld /tmp/test/123
drwxr-xr-x. 2 root root 4096 59 19:10 /tmp/test/123

# -d选项是针对目录的,通常是和-l并用,写成-ld。它可以查看指定目录的属性,比如本例中,可查看/tmp/test/123目录的创建时间,如果不加-d,则会显示该目录里面的文件和子目录的属性

命令rmdir:删除空目录

命令rmdir(remove directory的简写)用于删除空目录,后面可以是一个目录,也可以是多个目录(用空格分隔)。只能删除目录,不能删除文件。rmdir有和mkdir具有相同的选项-p,可以级联删除目录,但如果某一个目录里还有目录或者文件时,将删除失败。示例如下:

# ls /tmp/test
123
# rmdir /tmp/test/
rmdir:删除‘/tmp/test/’失败:目录非空

# rmdir /tmp/test/123
# ls /tmp/test
#

命令rm:删除

格式如下,在此介绍最常用的两个选项

rm [-rf] [目录或文件名称]

-r:删除目录,类似于rmdir,删除目录时,会询问是否删除,如果输入‘y’则会删除,如果输人‘n’则不删除。另外能删除非空目录。示例如下:

# mkdir -p /tmp/test/123
# rm -r /tmp/test/123
rm:是否删除目录‘/t叩/test/123’? y

-f:表示强制删除。如果后面跟一个不存在的文件或者目录,也不会报错。但如果要删除一个存在的目录时,即使加上-f选项也会报错。所以,使用命令rm删除目录时,一定要加-r选项。示例如下:

# rm /tmp/test/123/123
rm:无法删除‘/tmp/test/123/123’:没有那个文件或目录
# rm -f /tmp/test/123/123

# rm -f /tmp/test/123
rm:无法删除‘/tmp/test/123’:是一个目录
# rm -rf /tmp/test/123

注:rm -rf命令后面不能加‘/’否则会把系统文件全部删除!

复制与移动

命令cp:复制

cp是copy(即复制)的简写,命令的格式为:

cp [选项] [来源文件] [目的文件]

常用选项:

-r:如果要复制一个目录,必须加-r选项,否则不能复制。示例如下:

# mkdir 123
# cp 123 456
cp:略过目录"123" #复制失败

# cp -r 123 456
# ls -ld 123 456
drwxr-xr-x 2 root root 6 218 09:49 123
drwxr-xr-x 2 root root 6 218 09:51 456

-i:如果遇到一个已存在的文件,会询问是否覆盖,示例如下:

# cd 123
# ls
#

# touch 111
# touch 222
# cp -i 111 222
cp:是否覆盖'222'? n
# echo 'abc' > 111
# echo 'def' > 222
# cat 111 222
abc
def
# /bin/cp 111 222
# cat 111
abc
# cat 222
abc

# touch命令:如果有这个文件,则会修改该文件的访问时间;如果没有这个文件,就会创建这个文件。

# echo命令:用于打印,这里echo的内容abc和def分别写入文件“111”和“222"。起写入作用的就是符号“>”。在Linux中叫做重定向,即把前面产生的输出写入到后面的文件中。

# 符号>>,跟符号>类似,其作用也是重定向,即把前面的内容输入到后面的文件中,但符号>>是“追加”的意思。当使用符号>时,如果文件中有内容,则会覆盖文件中原有的内容,而使用符号>>,则不会覆盖原有的内容。

# cat命令:则用于读取文件,并把读出的内容打印到当前屏幕上。(后续详解)

命令mv:移动

mv是move的简写,格式为:

mv [选项] [源文件或目录] [目标文件或目录]
  • 当目标文件是目录时:

如果该目录存在,则会把源文件或目录移动到该目录中。
如果该目录不存在,则会把源目录重命名为给定的目标文件名。

# mkdir /tmp/test_mv
# cd /tmp/test_mv
# mkdir dira dirb

# ls
dira dirb

# mv dira dirc #dirc不存在
# ls
dirb dirc #dira重命名为dirc

# mv dirc dirb #dirb存在,把dirc移动到dirb中
# ls
dirb
# ls dirb
dirc
  • 当目标文件是文件时:

如果该文件存在,则会询问是否覆盖。
如果该文件不存在,则会把源文件重命名为给定的目标文件名。

# touch filed
# ls
dirb filed

# mv filed filee #filee文件不存在,把filed重命名为filee
# ls
dirb filee

# mv filee dirb #dirb存在,把filee移动到dirb中
# ls
dirb

# ls dirb
dirc filee

查看文档内容

命令cat:查看

查看文件的内容并将其显示在屏幕上。cat后面可以不加任何选项,直接跟文件名。

-n:查看文件时,把行号也显示到屏幕上。示例如下:

# echo '111111111' > dirb/filee
# echo '222222222' >> dirb/filee
# cat dirb/filee
111111111
222222222
# cat -n dirb/filee
1 111111111
2 222222222

-A:显示所有的内容,包括特殊字符。不加-A选项,每行后面的$符号是看不到的,示例如下:

# cat -A dirb/filee
111111111$
222222222$

命令tac:倒序查看

和命令cat一样,但显示结果和命令cat相反,如下所示:

# tac dirb/filee
222222222
111111111

命令more:搜索查看

用于查看文件的内容,后面直接跟文件名。当文件内容太多,按Ctrl+D向上翻屏,按Ctrl+F向下翻屏(按空格键也行)。看完所有内容后就会退出,如想提前退出,按q键。

命令less:查看搜索

和命令more一样,后面直接跟文件名,比more功能多一些。按空格键可以翻页,按 j 键可以向下移动一行,按 k 键可以向上移动一行。可以按一下 / 键(在当前行向下搜索),并输人一个字符串,然后回车查找字符串,可以按 n 键显示下一个。另外,也可以用 ? 键(?是在当前行向上搜索)替代 / 键来搜索字符串.

补充:快捷键 Ctrl+f 上一屏,Ctrl+b 下一屏

命令head:查看内容前几行

命令head后面直接跟文件名,默认显示文件的前10行,加-n选项,则显示文件的前n行,示例如下:

# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

#head -2 /etc/passwd
root:x:O:O:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

注:选项-n后有无空格均可,也可省略字母n,-后面直接跟数字 

命令tail:查看内容最后几行

和命令head类似,默认显示文件的最后10行,加-n选项,则显示文件的最后n行-f选项,动态显示文件的最后10行,如文件内容在不断增加,可以实时地查看文件最后10行内容。

更改文档权限

命令chgrp:更改所属组

chgrp(change group的简写)命令可以更改文件的所属组,其格式为:

chgrp [-R] [组名] [文件名或目录名]

常用选项:

-R:只适用于目录,实现级联更改子目录以及子文件所属组

示例如下:

# groupadd testgroup    #含义为增加一个用户组
# mkdir /tmp/4_6 #创建目录
# cd /tmp/4_6
# touch test1
# ls -l test1
-rw-r--r-- 1 root root 0 218 11:16 test1

# chgrp testgroup test1 #更改文件所属组
# ls -l test1
-rw-r--r-- 1 root testgroup 0 218 11:16 testl
# mkdir dir2
# touch dir2/test2
# ls -ld dir2
drwxr-xr-x 2 root root 6 218 11:19 dir2

# chgrp testgroup dir2 #更改目录所属组
# ls -ld dir2
drwxr-xr-x 2 root testgroup 6 218 11:19 dir2
# ls -l dir2 #目录下的文件并没有更改所属组
总用量0
-rw-r--r-- 1 root root 0 218 11:19 test2

# chgrp -R testgroup dir2 #级联更改目录下子文件所属组
# ls -l dir2
总用量0
-rw-r--r-- 1 root testgroup 0 218 11:25 test2

命令chown:更改所有者

chown (change owner的简写)命令可以更改文件的所有者,其格式为:

chown [-R] 账户名 文件/目录名

chown [-R] 账户名:组名 文件/目录名

示例如下:

# mkdir dir3
# useradd userl #创健用户user1
# touch dir3/test3
# chown user1 dir3
# ls -ld dir3 #dir3目录所有者已经由root改为user1
drwxr-xr-x 2 userl root 19 218 11:31 dir3

# ls -l dir3 #但是dir3目录下test3文件的所有者依旧是root
总用量 0
-rw-r--r-- l root root 0 218 11:31 test3

# chown -R userl:testgroup dir3 #-R:只适用于目录
# ls -l test3
总用量0
-rw-r--r-- l userl testgroup 0 218 11:31 test3

命令chmod:更改读写权限

为了方便更改文件的权限,Linux使用数字代替rwx:r等于4,w等于2,x等于1,-等于0目录的默认权限为755,而文件的默认权限为644。如:rwxrwx—用数字表示就是770,算法为:rwx=4+2+1=7,rwx=4+2+1=7,—=0+0+0=0

chmod( change mode的简写)命令用于改变用户对文件/目录的读写执行权限,格式为:

chmod [-R] xxx 文件/目录名    #xxx表示数字

chmod [u=?,g=?,o=?,a=?] 文件/目录
#u、g、o分别表示user、group和others的属性,a代表all(全部),?表示r、w、x

chmod [u+?,g+?,o+?,a+?] 文件/目录 #+:加权限

chmod [u-?,g-?,o-?,a-?] 文件/目录 #-:减权限

示例如下:

# ls -ld dir3
drwxr-xr-x 2 userl testgroup 19 218 11:31 dir3
# ls -l dir3
总用量 0
-rw-r--r-- 1 user1 testgroup 0 218 11:31 test3

# chmod 750 dir3
# ls -ld dir3
drwxr-x--- 2 user1 testgroup 19 218 11:31 dir3
# ls -l dir3/test3
-rw-r--r-- 1 userl testgroup 0 218 11:31 dir3/test3

# chmod 700 dir3/test3
# ls -l dir3/test3
-rwx------ 1 user1 testgroup 0 218 11:31 dir3/test3

# chmod -R 700 dir3
# ls -ld dir3
drwx------ 2 user1 testgroup 19 218 11:31 dir3
# ls -l dir3
总用量 0
-rwx------ 1 user1 testgroup 0 218 11:31 test3
# chmod u=rwx,og=rx dir3/test3
# ls -l dir3/test3
-rwxr-xr-x 1 userl testgroup 0 218 11:31 dir3/test3
# chmod u-x dir3/test3
# ls -l dir3
总用量 0
-rw-r-xr-x 1 user1 testgroup 0 218 11:31 test3

# chmod a-x dir3/test3
# ls -l dir3/test3
-rw-r--r-- 1 userl testgroup 0 218 11:31 dir3/test3

# chmod u+x dir3/test3
# ls -l dir3/test3
-rwxr--r-- 1 userl testgroup 0 218 11:31 dir3/test3

命令chattr:修改文件/目录特殊属性

命令chattr(change attribute)的格式为:

chattr [+-=] [Asaci] [文件或者目录名]

其中,+、-和=分别表示增加、减少和设定。各个选项的含义如下

A:表示文件或目录的atime(访问或执行时间)将不可修改。
s:会将数据同步写人磁盘中。
a:表示只能追加,不能删除,非root用户不能设定该属性。
c:表示自动压缩该文件,读取时会自动解压。
i:表示文件不能删除、重命名、设定链接、写入以及新增数据。

常用选项a、i示例如下:

# chattr +i dir2
# touch dir2/test5
touch:无法创建"dir2/test5":权限不够

# chattr -i dir2
# touch dir2/test5
# chattr +i dir2
# rm -f dir2/test5
rm:无法删除"dir2/test5":权限不够
# chattr -i dir2
# touch dir2/test6
# ls dir2
test2 test5 test6

# chattr +a dir2
# rm -f dir2/test6
rm:无法删除"dir2/test6":不允许的操作

# touch dir2/test7
# ls dir2
test2 test5 test6 test7
# chattr +a dir2/test7
# echo '11111' > dir2/test7 # “>”:覆盖的含义
-bash:dir2/test7:不允许的操作

# echo '11111' >> dir2/test7 # “>>”:追加的含义
# cat dir2/test7
11111

# chattr +i dir2/test6
# echo '11111' >> dir2/test6
-bash:dir2/test6:权限不够

# echo '11111' > dir2/test6
-bash: dir2/test6:权限不够

# rm -f dir2/test6
rm:无法删除'dir2/test6":权限不够

搜索文档

命令which:查找可执行文件的绝对路径

which只能用来查找PATH环境变量中出现的路径下的可执行文件。示例如下:

# which vi
/usr/bin/vi

# which cat
/usr/bin/cat

命令find:搜索文件

格式为:

find [路径] [参数]
常用参数

-atime +n/-n:access time表示访问或执行时间大于或小于n天的文件。
-ctime +n/-n:change time表示写入、更改inode属性(如更改所有者、权限或者链接〕的时间大于或小于n天的文件。
-mtime +n/-n:modified time表示写入时间大于或小于n天的文件。
-mmin +n/-n:表示写入时间大于或小于n分钟的文件。

  • inode(索引节点)用来存放档案及目录的基本信息,包含时间信息、文档名、所有者以及所属组等。inode是Unix操作系统中的一种数据结构,其本质是结构体,在文件系统创建时生成,且个数有限。可以通过命令df -i(如下图)来查看各个分区的inode总数以及使用情况。

  • atime不一定在访问文件之后被修改,因为在使用ext3文件系统时,如果mount使用了noatime参数,那么就不会更新atime的信息。这三个time属性值都放在了inode中。若mtime,atime被修改,那么inode就一定会改,既然inode改了,那ctime也跟着要改了。

stat命令可用来列出文件的atime,ctime和mtime,示例如下:

# stat dir2/test2
文件:"dir2/test2"
大小:0 块:0 IO块:4096 普通空文件
设备:803h/2051d Inode: 17334801 硬链接:1
权限:(0644/-rw-r--r--) Uid:(0/root) Gid:(1001/testgroup)
最近访问:2017-02-18 112539.579675461 +0800
最近更改:2017-02-18 112539.579675461 +0800
最近改动:2017-02-18 112813.688212303 +0800
创逮时间:-

命令find示例如下:

# find /tmp/4_6/ -mtime -1
/tmp/4_6/
/tmp/4_6/test1
/tmp/4_6/dir2
/tmp/4_6/dir2/test2
/tmp/4_6/dir2/test5
/tmp/4_6/dir2/test6
/tmp/4_6/dir2/test?
/tmp/4_6/dir3
/tmp/4_6/dir3/test3
/tmp/4_6/dir4
/tmp/4_6/test4
/tmp/4_6/test5
常用选项

-name filename:表示直接查找该文件名的文件,示例如下:

# find . -name test2        #.表示当前目录
./dir2/test2
# find . -name "test*" #支特用*通配
./test1
./dir2/test2
./dir2/test5
./dir2/test6
./dir2/test7
./dir3/test3
./test4
./test5

-type filetype:表示通过文件类型查找文件。filetype包含f, b, c, d, l, s等类型,示例如下:

# find . -type d
.
./dir2
./dir3
./dir4

链接文件

链接文件分为硬链接(hard link)和软链接(symbolic link)两种。两种链接的本质区别在于inode。

  • 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块区域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块区域,即进行硬链接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode
    table; (2)不能链接目录。
  • 软链接:软链接是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。例如,现在有一个文件a,我们做了一个软链接文件b(只是一个链接文件,非常小),b指向了a。当读取b时,b就会把读取的动作转发到a上,这样就读取了文件a,当我们删除文件a时,链接文件b不会被删除;但如果再次读取b时,会提示无法打开文件。然而,当我们删除b时,a是不会有任何影响的。

命令ln:建立链接

格式为:

ln [-s] [来源文件] [目的文件]
该命令常用的选项是-s。如果不加-s选项就是建立硬链接,加上-s选项就建立软链接
硬链接特性

示例如下:

# mkdir /tmp/4_9
# cd /tmp/4_9
# cp /etc/passwd ./
# ll #ll等同于ls -l
总用量 4
-rw-r--r-- 1 root root 2276 218 14:52 passwd
# du -sk #du命令用来计算文件或者目录的大小,-k表示以KB为单位,此处为4KB
4

# ln passwd passwd-hard
# ll
总用量 8
-rw-r--r-- 2 root root 2276 218 14:52 passwd
-rw-r--r-- 2 root root 2276 218 14:52 passwd-hard
# du -sk #目录的总大小并没有变化
4

删除源文件,再比较。示例如下:

# rm -f passwd
# ll
总用量 4
-rw-r--r-- 1 root root 2276 218 14:52 passwd-hard
# du -sk #删除源文件passwd后,文件大小依旧不变,说明硬链接文件并不会复制数据块,额外占用磁盘空间
4

再来看硬链接的另外一个限制,不允许目录做硬链接,示例如下:

# mkdir 123
# ln 123 456
ln: '123':不允许将硬链接指向目录
软链接特性

示例如下:

# mkdir 456
# cd 456
# cp /etc/passwd ./
# ln -s passwd passwd-soft
# 11
总用量 4
-rw-r--r-- 1 root root 2276 218 15:01 passwd
lrwxrwxrwx 1 root root 6 218 15:02 passwd-soft -> passwd

# head -n1 passwd-soft #head -n1 命令查看文件开头部分的第1行内容,不加-n,head默认为10行
root:x:0:0:root:/root:/bin/bash
# head -nl passwd
root:x:0:0:root:/root:/bin/bash

# rm -f passwd #删除源文件,则不能读取软链接文件
# head -n1 passwd-soft
# ll
总用量 0
lrwxrwxrwx 1 root root 6 218 15:02 passwd-soft -> passwd

目录不可以做硬链接,但可以做软链接,示例如下:

# cd ..
# ln -s 456 789
# ls -ld 456 789
drwxr-xr-x 2 root root 25 218 15:03 456
lrwxrwxrwx 1 root root 3 218 15:04 789 -> 456

系统用户与用户组管理

最重要的两个文件

这两个文件是Linux系统最重要的文件之一。如果没有这两个文件或者这两个文件出了问题,则无法正常登录系统。

/etc/passwd

# cat /etc/passwd | head            #符号"|"称为管道符,作用是把前面命令的输出,输入给后面的命令,head默认为10行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
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

每行以”:”分割成7个字段,每个字段的含义如下:

  • 第1个字段:为用户名(root就是用户名),它是代表用户账号的字符申。用户名中的字符可以是大小写字母、数字、减号(不能为首位,不建议使用,容易造成混淆)、点(不建议使用,尤其是首位)或下划线

  • 第2个字段:存放的是该账号的口令。早期的Unix系统口令确实存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用x代替。

  • 第3个字段:为一个数字,这个数字代表用户标识号,也称为uid。系统就是通过这个数字识别用户身份的。0就是root,可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。uid的取值范围是0-65535(但实际上已经可以支持到429 496 729 4 ),0是超级用户(root )的标识号,CentOS 7的普通用户标识号从1000开始。自定义建立一个普通用户,会看到该账户的标识号是大于或等于1000的。

  • 第4个字段:也是数字,表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。

  • 第5个字段:为注释说明,没有实际意义。通常记录该用户的一些属性,例如姓名、电话、地址等。可以使用chfn(不常用,此文不详解)命令来更改这些信息

  • 第6个字段:为用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/usemame,用户家目录是可以自定义的。比如,建立一个普通用户test1,要想让tes1的家目录/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。

  • 第7个字段:为用户的shell。用户登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多种,而Red Hat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash,还有很多/sbin/nologin,它表示不允许该账号登录。如果想建立一个不允许登录的账号,可以把该字段改/sbin/nologin,默认是/bin/bash.

/etc/shadow

由:分割成9个字段,示例如下:

.cat /etc/shadow ahead -n 3
root: $6$QjKfxoVu$OAsBzIKnzEwst fsEvxEvtwgK4ZM76MzAG/MlloArh8rgvgKtvkDcCghHlKb9B7m1COBn5GqKZPqSaoYCtKhY/:17212:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::

每个字段的含义如下所示。

  • 第1个字段:为用户名,与/etc/passwd相同。
  • 第2个字段:为用户密码。密码已经加密,但是有些黑客还是能够解密的。所以,将该文件属性设世为000,但root账户是可以访问或更改的。使用命令ls
    -l查看该文件的权限,示例如下:
    # ls -l /etc/shadow ---------- 1 root root 1275 2月 18 11:31 /etc/shadow
  • 第3个字段:为上次更改密码的日期,以1970年1月1日和上次更改密码的日期为基准计算而来。如,更改密码的日期为2012年1月1日,则这个值就是365*(2012-1970)+(2012-1970)/4+1=15341。如果是闰年,则有366天。
  • 第4个字段:为要过多少天才可以更改密码,默认是0,即不受限制。
  • 第5个字段:为密码多少天后到期,即在多少天内必须更改密码。例如,这里设置成30,则30天内必须更改一次密码;否则,将不能登录系统。默认是99999,可以理解为永远不需要改。
  • 第6个字段:为密码到期前的警告期限。若这个值设置成7,则表示当7天后密码过期时,系统就发出警告,提醒用户他的密码将在7天后到期。
  • 第7个字段:为账号失效期限。如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁定。
  • 第8个字段:为账号的生命周期。跟第3个字段一样,这个周期是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号将作废。
  • 第9个字段:作为保留用的,没有什么意义。

用户和用户组管理

命令groupadd:新增组

命令格式为

groupadd [-g GID] groupname

示例如下:

# groupadd grptest1
# tail -n1 /etc/group
grptest1:x:1003:

如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的。也可以自定义gid:

# groupadd -g 1008 grptest2
# tail -n2 /etc/group
grptest1:x:1003:
grptest2:x:1008:

命令groupdel:删除组

# groupdel grptest2
# tail -n2 /etc/group
user1:x:1002:
grptest1:x:1003:

有一种情况不能删除组,如user1组中包含user1账户,只有别除user1账户后才可以删除该组,如下所示:

# groupdel user1
groupdel:不能删除用户"user1"的主组

命令useradd:增加用户

命令格式为

useradd [-u UID] [-g GID] [-d HOME] [-M] [-s] username

各个选项的具体含义如下。

  • -U:表示自定义UID
  • -g:表示使新增用户属于已经存在的某个组,后面可以跟组id,也可以跟组名。
  • -d:表示自定义用户的家目录。
  • -M:表示不创建家目录。
  • -s:表示自定义shell

下面我们先来新建一个用户test 10,示例如下:

# useradd test10
# tail -n1 /etc/passwd
testlO:x:1002:1004::/home/test1O:/bin/bash
# tail -n1 /etc/group
test10:x:1004:

如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组。自定义uid, gid或者所属的组,示例如下:

# useradd -u1005 -g 1006 -M -s /sbin/nologin user11
useradd: "1006"组不存在

# useradd -u1005 -g 1004 -M -s /shin/nologin user11
# useradd -u1006 -g grptest1 user12

# tail -n2 /etc/passwd
user11:x:1005:1004::/home/user11:/sbin/nologin
user12:x:1006:1003::/home/user12:/bin/bash

# tail -n2 /etc/group
grptest1:x:1003:
test10:x:1004:

加上-M选项后,则不建立用户家目录,但在etc/passwd文件中仍然有这个字段。如果你使用命令ls /home/user11查看一下,会提示该目录不存在。所以-M选项的作用只是不创建那个目录。示例如下:

# ls /home/user11
ls:无法访问/home/user11:没有那个文件或目录

命令userdel:删除用户

命令格式为

userdel [-r] username

-r选项的作用是,当删除用户时,一并删除该用户的家目录。
示例如下:

# ls -Id /home/userl2
drwx------ 3 userl2 grptest1 4096 511 07:12 /home/userl2

不加-r选项,则会直接删除用户user12,但保留其家目录,如下所示:

# userdel userl2
# ls -ld /home/userl2 #此时userl2的家目录还在
drwx------ 3 userl2 grptest1 78 218 18:46 /hone/userl2

加上-r选项删除user1用户,如下所示:

# ls -ld /hone/users
drwx------ 3 user1 user1 78 218 11:31 /home/userl

# userdel -r user1 #同时删除了user1的家目录
# ls -ld /home/usrel
ls:无法访问/home/userl:没有那个文件或目录

用户密码管理

命令passwd:设置密码

账户创建后,密码默认为空,只有设置好密码后,才可以登录系统,建议按照如下规则设置密码:

  • 长度大于10个字符;
  • 包含大小写字母、数字以及特殊字符中*、&、%等;
  • 不规则性(不要出现happy、love、linux、7758520、111111等单词或者数字);
  • 密码中不要带有自己的名字、电话、生日以及公司名字等。

命令格式为

passwd [username]

该命令后面若不加用户名字,则是为自己设定密码,示例如下:

# passwd
更改用户root的密码。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新.

如果你登录的是root账户,后面可以跟普通账户的名字,意思是修改指定账户的密码,示例如下:

# passwd user11
更改用户user11的密码。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新.

注意:只有root才可以修改其他账户的密码,普通账户只能修改自己的密码。

命令mkpasswd:密码生成

有些Linux版本没有这个命令,需要安装一个expect软件包。安装如下:

# yum install -y expect
# mkpasswd
HXut8oy*8

指定长度的密码,用mkpasswd命令也可以满足。比如,生成12位长度的密码,示例如下:

# mkpasswd -l 12
j2zo9PlnM{tq

指定密码中有几个特殊字符或几个数字,示例如下:

# mkpasswd -1 12 -s 0 -d 3  #-s指定特殊字符的个数,-d指定数字的个数
eu8e2fJ7sjtE

只不过这密码不方便记忆,可借助KeePass工具来记录密码。

用户身份切换

Linux系统中,有些事情只有root用户才能做,普通用户是不能做的,这时就需要临时切换到root身份了。创建test账户,并修改其密码,使用test账户登录Linux了。操作如下:

# useradd test
# passwd test
更改用户test的密码。
新的密妈:
重新输入新的密玛:
passwd:所有的身份验证令牌已经成功更断。

用test帐户登录Linux,示例如下:

login as: test
test@192.168.188.128's password:
$ whoami
test

登录后,使用whoami命令查看,发现当前用户是test。普通用户和root用户的shell提示符号有些区别,root账户是 #,普通用户是 $

命令su:切换用户身份

命令su的格式为

su [-] username     
#后面可跟-,也可不跟;加上-后,会初始化username用户的各种环境变量

普通用户的su命令不加username时,就是切换到root用户。当然,root用户同样可以使用su命令切换到普通用户,当由root切换到普通用户时,不需要输入密码。加与不加-的区别,示例如下:

$ pwd
/home/test
$ su #如果不加 "-" 切换到root账户时,当前目录没有变化
密码: #root账户切换到普通用户不加 "-",当前目录也不会变化
# pwd
/hone/test
# exit
登出
$ su - #加上 "-" 切换到root账户时,当前目录为root账户的家目录
密码: #root切换到普通用户加上"-",当前目录为当前用户的家目录
# pwd
/root

命令sudo:

为了避免当普通用户切换root时,密码泄露的安全问题,命令sudo诞生了。默认情况下,只有root用户能使用sudo命令(需要输人密码,这个密码不是root的密码,而是用户自己的密码),普通用户想要使用sudo,是需要root预先设定的。可以使用visudo命令编辑/etc/sudoers配置文件(必须使用root用户,如没有visudo这个命令,请使用命令yum install -y sudo安装),即输人i进人编辑模式,编辑完成后,按Esc键,再输人:wq完成保存。操作方法如下:

## Allow root to run any commands anywhere
root ALL=(ALL) ALL #默认root支持sudo的配置
test ALL=(ALL) ALL #加入让test用户拥有sudo的特权

从左到右,第一段test,为指定需要sudo特权的用户名第二段ALL=(ALL),左边的ALL指的是所有的主机,右边的ALL指的是获取哪个用户的身份,第二段几乎都不用配置第三段ALL,设定可以使用sudo的命令有哪些。

验证test账户权限,如下操作在root账号下进行:

# su test
$ ls #当前目录是在/root下
ls:无法打开目录.:权限不够
# sudo is
We trust you have received the usual lecture from the local system
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo]password for test:
123 456 anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos

由于切换到test账户后当前目录还是/root, test账户没有任何权限,所以使用命令ls查看时,提示权限不够。然而使用命令sudo ls输入test账户自身的密码后,就有权限了。初次使用sudo命令时,会出现上面的一大段提示,当再次使用sudo命令时则不再提示。

统一给普通用户设置sudo特权,可以加如下配置:

%wheel ALL=(ALL) ALL

意思是,wheel这个组的所有用户都拥有了sudo的权利。接下来,只要把需要设置sudo权限的所有用户加人到wheel这个组中即可。如下所示:

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

配置文件/etc/sudoers包含了许多配置项,可以使用命令man sudoers来获得帮助信息。
实用案例:
把Linux服务器设置成,只允许使用普通账户登录,登录后可不输入密码,就能用sudo切换到root帐户。输入如下命令:

# visudo
# 然后在文件的最后加人如下3行:
User_Alias USER_SU = test, test1, aming
Cmnd Alias SU = /usr/bin/su
USER_SU ALL=(ALL) NOPASSWD: SU
  • 第一行:设定一个user别名,其实这个USER_SU相当于是test, test1和aming三个账户;
  • 第二行:设定一个命令别名,SU相当于/usr/bin/su;
  • 第三行:第一段test,为指定需要sudo特权的用户名第二段ALL=(ALL),左边的ALL指的是所有的主机,右边的ALL指的是获取哪个用户的身份,第二段几乎都不用配置第三段ALL,设定可以使用sudo的命令有哪些。

保存后使用test, test1,aming这3个账户登录Linux。执行命令sudo su - 切换到root账户,获取root账户的所有权利,如下所示:

# su - test
$ sudo su -
# whoami
root

不允许root直接登录Linux

不允许root直接远程登录Linux(默认允许root账户通过ssh远程登录Linux),只需要修改sshd服务的配置文件/etc/ssh/sshd_config,在文件中查找#PennitRootLogin yes并修改为PermitRootLogin no。保存配置后,需要重启sshd服务,如下所示:

# systeectl restart sshd.service

注意:只适用于通过ssh远程登录Linux的情况。

文本编辑工具Vim

Vi和Vim的最大区别就是编辑一个文本时Vi不会显示颜色,而Vim会显示颜色。Vim有3种模式:一般模式、编辑模式和命令模式
如果系统里没有Vim工具,可按如下方法安装:

# yum install -y vim-enhanced

一般模式

当使用命令vim filename编辑文件时,默认进人一般模式。常用操作如下:

编辑模式

在一般模式下不可以修改某一个字符,如要修改字符,只能进人编辑模式。只需按i、I、a、A、o、O、r和R中的某一个键即可进人编辑模式
当进人编辑模式时,在屏幕的尾行会显示INSERT或REPLACE的字样(若CentOS支持中文,则会显示”插人”)。
从编辑模式回到一般模式,只需按Esc键即可(注:编辑文档回到一般模式后,还需进入命令模式保存文本或其他操作)。常用操作如下:

命令模式

在一般模式下,输入:或者/即可进人命令模式。在该模式下,可以搜索某个字符或者字符串,也可以实现保存、替换、退出、显示行号等操作(输入命令后,按回车即可执行)。常用操作如下:

文档压缩与打包

在Linux下,不能识别.rar(Windows下)这种格式的压缩文件,它有自己独特的压缩工具。但.zip格式的文件在Windows和Linux下都能使用

Linux下最常见的压缩文件通常都是.tar.gz格式的,除此之外,还有.tar、.gz、.bz2、.zip等格式。为了判断压缩文件是由哪种压缩工具所压缩的,而后才能正确地解压缩此文件。(曾介绍过Linux下的文件后缀名无意义可加可不加,但为了便于区分,压缩文件最好加上后缀名)常见压缩后缀名如下:

  • .gz:表示由gzip压缩工具压缩的文件。
  • .bz2:表示由bzip2压缩下具压缩的文件。
  • .tar:表示由tar打包程序打包的文件(tar并没有压缩功能,只是把一个目录合并成一个文件)
  • .tar.gz:可以理解为先由tar打包,然后再由gzip压缩。
  • .tar.bz2:可以理解为先由tar打包.然后再由bzip2压缩。
  • .tar.xz:可以理解成先由tar打包.然后再xz压缩。

gzip压缩工具

gzip命令的格式为gzip [-d#] filename,其中#为1-9的数字。
-d:该参数在解压缩时使用。 -#:表示压缩等级,1为最差,9为最好,6为默认(一般使用默认足矣)
示例如下:

# gzip 1.txt
#gzip后直接跟文件名,表示在当前目录下压缩该文件,而原文件也会消失
# ls
1.txt.gz

解压该压缩文件如下所示:

# .gzip -d 1.txt.gz     #-d后面跟压缩文件表示解压压缩文件
# ls
1.txt

gzip不支持压缩目录,压缩目录时会报错,如下所示:

# .gzip test
gzip: test is a directory -- ignored
# ls test
1.txt

bzip2压缩工具

bzip2命令的格式为bzip2 [-dz] filename只有-z(压缩)和-d(解压缩)两个常用选项。压缩级别有1-9,默认级别是9。加或不加-z选项都可以压缩文件。示例如下:

# cd test
# bzip2 1.txt
# ls
1.txt.bz2
# bzip2 -d 1.txt.bz2
# bzip2 -z 1.txt
# ls
1.txt.bz2

bzip2命令也不可以压缩目录,压缩目录时会报错,如下所示:

# cd..
# bzip2 test
bzip2: Input file test is a directory.

xz压缩工具

xz命令的格式为xz [-dz] filename常用的有-z(压缩)和-d(解压缩)这两个选项。加或不加-z选项都可以压缩文件。示例如下:

# bzip2 -d 1.txt.bz2
# xz 1.txt
# ls
1.txt.xz
# xz -d 1.txt.xz
# xz -z 1.txt
# ls
1.txt.xz

xz命令同样也不可以压缩目录,压缩目录时会报错,如下所示:

# cd ..
# xz test
test: Is a directory, skipping

tar打包工具

tar可以把目录打包成一个文件,方便复制或者移动。该命令的格式为tar [-zjJxcvfpP] filename.tar [filename]filename.tar指打包或解压的文件名filename指需要打包的目录或文件名(解压时不需要指定此属性),如果有多个目录或文件,则以空格隔开使用tar命令打包或解压后,原文件不会消失,但会覆盖当前相同已存在的文件或者目录,常用选项如下:

  • -z:表示同时用gzip压缩。
  • -j:表示同时用bzip2压缩。
  • -J:表示同时用xz压缩。
  • -x:表示解包或者解压编。
  • -t:表示查看tar包里的文件。
  • -c:表示建立一个tar包或者压缩文件包。
  • -v:表示可视化。
  • -f:后面跟文件名(-f filename)表示压缩后的文件名为filename,或者解压后的文件名为filename,如果是多个参数组合的情况下,请把-f参数写到最后面
  • -p(小写):表示使用原文件的属性,压缩前什么属性压编后还什么属性。(不常用)
  • -P(大写):表示可以使用绝对路径。(不常用)
  • –exclude filename:表示在打包或压缩时,不要将filename文件包括在内。(不常用)

示例如下:

# cd test
# xz -d 1.txt.xz
# mkdir test111 #在test目录下建立test111目录
# touch test111/2.txt #在test111目录下建立2.txt文件
# echo "niha" > !$ #!$ 表示上一条命令的使用的路径,这里是指test111/2.txt
echo "nihao" > test111/2.txt
# cp 1.txt test111/
# yum install tree #安装tree命令,用来查看树形结构目录
# tree .
├---- 1.txt
└---- test111
├---- 1.txt
└---- 2.txt
1 directory, 3 files
# tar -cvf test111.tar test111 #把test111打包成test111.tar
test111/ #加-v的可视化效果
test111/2.txt
test111/1.txt
# ls
1.txt test111 test111.tar

tar命令不仅可以打包目录,也可以打包文件,打包时不加-v选项,表示不可视化。示例如下:

# rm -f test111.tar
# tar -cf test.tar test111 1.txt #把test111和1.txt打包成test.tar
# ls
1.txt test111 test.tar

覆盖当前相同已存在的文件或者目录,示例如下:

# rm -rf test111
# ls
1.txt test.tar
# tar -xvf test.tar
test111/
test111/2.txt
test111/1.txt
1.txt
# ls
1.txt test111 test.tar #此时test目录下的1.txt,已被test.tar中的1.txt覆盖了

exclude选项

排除文件的用法,示例如下:

# tar -cvf test111.tar --exclude 1.txt test111  
test111/
test1ll/2.txt
# ls
1.txt test111 test111.tar test.tar

排除目录的用法,示例如下:

排除多个文件或目录的用法,示例如下:

注:exclude选项放在目标打包文件(或目录)名前面或者后着都可以

使用gzip压缩

tar命令非常好用的一个功能就是可以在打包时直接压缩,它支持gzip压缩、bzip2压缩和xz压缩。使用-z选项,可以压缩成gzip格式的文件,示例如下:

# tar -czvf test111.tar.gz test111
test111/
test111/2.txt
test111/1.txt
# ls
1.txt test111 test111.tar.gz test.tar

使用-tf选项,可以查看包或者压缩包的文件列表,示例如下:

# tar -tf test111.tar.gz
test111/
test111/2.txt
testili/1.txt
# tar -tf test.tar
testl11/
test111/2.txt
test111/1.txt
1.txt

使用-zxvf选项,可以解压.tar.gz格式的压缩包,示例如下:

# rm -rf test111
# ls
1.txt test111.tar.gz test.tar
U tar -zxvf test111.tar.gz
test111/
test111/2.txt
test111/1.txt
# ls
1.txt test111 test111.tar.gz test.tar

使用bzip2压缩

使用-cjvf选项来压缩,压缩过程如下:

# tar -cjvf test111.tar.bz2 test111
test111/
test111/2.txt
test111/1.txt
# ls
1.txt test111 test111.tar.bz2 test111.tar.gz test.tar

使用-tf选项来查看压缩包的文件列表,示例如下:

# tar -tf test111.tar.bz2
test111/
test111/2.txt
test111/1.txt

使用-jxvf选项来解压.tar.bz2格式的压编包,示例命令如下:

# tar -jxvf test111.tar.bz2
test111/
test111/2.txt
test111/1.txt

注:打包的同时使用xz压缩工具压缩和gzip、bzip2相同,在此不再累述

zip压缩工具

若CentOS没有压缩和解压缩命令,需要使用yum工具安装,如下所示:

# yun install -y zip
# yun install -y unzip

压缩

zip压缩包可以压缩目录和文件,该命令的格式为zip filename.tar filenamefilename.tar指打包或解压的文件名filename指需要打包的目录或文件名压编目录时,需要指定目录下的文件。示例如下:

# zip 1.txt.zip  1.txt
adding: 1.txt (deflated 64%)

zip命令仅仅是把二级目录本身压缩而已。当目录下还有二级目录甚至更多级目录时,如果想要一并压缩二级目录下的文件,必须加上-r选项,如下所示:

# zip -r test111.zip test111/
updating: test111/ (stored 0%)
updating: test111/1.txt (deflated 64%)
updating: test111/2.txt (stored 0%)
updating: test111/test222/ (stored 0%)

也可以不加-r选项,而使用通配符*,如下所示:

# zip test111.zip test111/*
adding: test111/1.txt (deflated 64%)
adding: test111/2.txt (stored 0%)
adding: test111/test222/ (stored 0%)

注:使用-r选项和通配符*,压缩还是有区别的,看到亮点了嘛

解压

解压.zip格式文件时是用unzip命令。例如,解压1.txt.zip的命令为:

# unzip 1.txt.zip

zcat、bzcat命令

使用-t选项可以查看tar压缩包的文件列表。对于gzip2或者bzip2压缩格式的文本文档,也可以使用zcat, bzcat命令直接查看文档内容。示例如下:

# cp /etc/passwd ./11.txt
# cp 11.txt 22.txt
# gzip 11.txt
# bzip2 22.txt
# zcat 11.txt.gz
# bzcat 22.txt.bz2