Linux学习笔记(二)——Bash命令行与文件

1 Bash命令行

  1. Bash是GNU的重要组件,是绝大部分Linux发行版本上默认的Shell
  2. 命令提示符:[当前登录主机的用户名@当前登录主机的主机名 用户当前所处的目录]当前登录用户类型
    ~:当前用户的“家目录”
    $:普通用户
    #:根用户
    例:[user1@localhost ~]$
  3. 长选项命令 --help:输出命令的简短帮助文档
  4. echo 字符串:回显字符串
    • echo -n 字符串:回显字符串后不换行
    • echo -e 字符串:输出\开头的转义字符。例:echo -e "Hello Linux\n\n"
  5. nano文本编辑工具
    • Ctrl+O:保存
    • Ctrl+G:查看nano的帮助文档
    • Ctrl+X:退出
  6. 连按两次TAB键:列出所有以该字符串开头的命令
  7. man:打开命令的帮助文档
    在帮助文档中可以用\字符串从光标处开始向下查找,用n跳转到下一个匹配项,用N跳转到上一个匹配项。
    q:退出man帮助文档
  8. su root:普通用户切换到根用户
  9. 关机和重启
    shutdown -h 数字:在指定数字分钟后关机
    shutdown -h 数字:数字:在指定时间关机
    shutdown -h now:立即关机
    选项-r:重启
    Ctrl+C:取消命令
    shutdown -c:取消关机命令
    shutdown关机命令后可跟字符串,用于向所有登录主机的用户解释说明关机的具体原因和具体安排。

2 目录、文件和权限

2.1 根目录

LinuxLearningNote2_1
根据 FHS,根目录下至少应该包括如下 12 个目录,分别放置着不同用处的文件:

  • /bin:放置可执行的命令文件
  • /boot:放置系统核心文件和开机所需文件
  • /dev:放置系统设备相关文件
  • /etc:放置系统主要配置文件
  • /home:放置除根用户外其他用户的家目录。默认情况下,每个用户/home目录下有一个自己的私人目录
  • /lib:放置系统和程序运行所要调用的库函数文件
  • /root:root用户的家目录
  • /sbin:放置根用户才能执行的命令文件
  • /srv:放置服务启动之后需要访问的数据。如web服务所需要的网页数据就存放在/srv/www/目录下
  • /tmp:程序临时存放文件的目录,任何人都可以访问。重要数据不可放置在此目录下
  • /opt:第三方软件建议安装目录。非本发行版本所提供的软件建议放置在此目录下
  • /media:放置移动设备相关文件。如光驱、U盘相关数据

2.2 命令

  1. pwd:查询用户当前完整的工作目录
  2. mkdir(Make Directory):创建目录
    mkdir -p:创建嵌套目录
  3. rmdir(Remove Directory):删除目录
  4. ls(List):列出文件
    ls -a:列出包括隐藏文件(以“.”开头的文件)在内的所有文件
    ls -l:以长格式列出文件(列出文件的详细信息)

2.3 文件的用户和权限

例:

1
2
3
4
[dev01@localhost~]$ ls -l
-rwxr-xr-x. 1 root root 874184 12月 2 2011 bash
-rw-r--r-- 1 dev01 dev01 124 12月2 2011 .bashrc
-rwxr-xr--. 1 dev01 dgroup 116 9月27 12:42 helloworld.sh
字段 举例 含义
字段1 -rwxr-xr–. 类型和权限
字段2 1 连接数
字段3 dev01 拥有者
字段4 dgroup 文件组
字段5 116 大小
字段6 9月27 12:42 被修改时间
字段7 helloworld.sh 文件名
字段1的第1个字符 类型
d 目录文件
-或者f 普通文件
c 字符设备文件
b 块设备文件
l 符号链接文件
LinuxLearningNote2_2
  1. chmod:修改文件权限。例:
    1
    2
    3
    4
    5
    [nboocer@localhost tmp]$ ls -l ./hello.sh
    -rwxr-xr--. 1 nboocer nboocer 32 7月 27 22:59 ./hello.sh
    [nboocer@localhost tmp]$ chmod 700 hello.sh
    [nboocer@localhost tmp]$ ls -l ./hello.sh
    -rwx------. 1 nboocer nboocer 32 7月 27 22:59 ./hello.sh
  2. chown:修改文件的拥有者和从属用户组(可省略冒号前面(拥有者)或后面(从属用户组))。例:
    1
    2
    3
    4
    5
    [nboocer@localhost tmp]$ ls -l ./hello.sh
    -rwx------. 1 nboocer nboocer 32 7月 27 22:59 ./hello.sh
    [nboocer@localhost tmp]$ chown nbcc:stu hello.sh
    [nboocer@localhost tmp]$ ls -l ./hello.sh
    -rwx------. 1 nbcc stu 32 7月 27 22:59 ./hello.sh

3 文件操作

3.1 拷贝文件 cp(copy)

cp [要拷贝的文件|文件目录] [目的文件名|目的目录]
其中第二个参数可以是一个目录,也可以是一个带路径的文件名,表示在拷贝的同时将这个文件重新命名。例:

1
2
3
4
5
6
[root@localhost ~]# cp /tmp/file01 ~
[root@localhost ~]# ls
anaconda-ks.cfg file01 hello.sh install.log install.log.syslog
[root@localhost ~]# cp /tmp/file01 ~/file01_bak
[root@localhost ~]# ls
anaconda-ks.cfg file01 file01_bak hello.sh install.log install.log.syslog

cp命令也可以拷贝多个文件,只要在第一个参数的位置填入多个文件名,用空格隔开即可。例:

1
2
3
[root@localhost ~]# cp /tmp/file02 /tmp/file03 /tmp/file04 ~
[root@localhost ~]# ls
anaconda-ks.cfg file01 file01_bak file02 file03 file04 hello.sh install.log install.log.syslog

cp命令也可以拷贝整个目录,这需要在命令后跟-r选项。例:

1
2
3
4
5
[root@localhost ~]# cp /tmp/dir01 ~
cp: 略过目录*/tmp/dir01*
[root@localhost ~]# cp -r /tmp/dir01 ~
[root@localhost ~]# ls
anaconda-ks.cfg dir01 file01 file01_bak file02 file03 file04 hello.sh install.log install.log.syslog

注意

  • 在拷贝文件的过程中,如果在目标目录中已有同名文件存在,cp命令会默认先询问用户是否覆盖,用户同意后,cp命令才会覆盖这些文件。
    若有批量的同名文件存在,建议在cp命令后跟**-f选项,并在cp命令前键入一个反斜杠\,那么cp命令就会强制覆盖所有**同名文件。例:
    1
    2
    3
    [root@localhost ~]# cp /tmp/file01 ~
    cp: 是否覆盖*/root/file01*? y
    [root@localhost ~]# \cp -f /tmp/file02 /tmp/file03 ~
  • 在拷贝文件的过程中,文件的属性(包括文件拥有者、文件从属组、访问权限位)都有可能发生变化。例:
    1
    2
    3
    4
    5
    [root@localhost ~]# ls -l /tmp/sample.sh
    -rwxr-xr--. 1 nbcc nbcc 12 8月 26 17:34 /tmp/sample.sh
    [root@localhost ~]# cp /tmp/sample.sh ~nbcc
    [root@localhost ~]# ls -l ~nbcc/sample.sh
    -rwxr-xr--. 1 root root 12 8月 26 18:16 /home/nbcc/sample.sh
    如果需要将文件原原本本的拷贝,需要在cp命令后跟**-p选项(当然,使用cp -p的前提是登录用户对这个文件有写权限**)。例:
    1
    2
    3
    4
    [root@localhost ~]# cp -p /tmp/sample.sh ~nbcc
    cp: 是否覆盖*/home/nbcc/sample.sh*? y
    [root@localhost ~]# ls -l ~nbcc/sample.sh
    -rwxr-xr--. 1 nbcc nbcc 12 8月 26 17:34 /home/nbcc/sample.sh

3.2 移动文件 mv(move)

mv命令与cp命令的用法十分相似。
mv [要移动的文件|文件列表|目录] [目的文件名|目的目录]
mv命令既可以移动一个文件,也可以移动多个文件,或者移动整个目录。例:
移动单个文件:

1
2
3
4
5
[root@localhost ~]# ls
anaconda-ks.cfg dir01 file01 file01_bak file02 file03 file04 hello.sh install.log install.log.syslog sample.sh
[root@localhost ~]# mv /tmp/file05 ~
[root@localhost ~]# ls
anaconda-ks.cfg dir01 file01 file01_bak file02 file03 file04 file05 hello.sh install.log install.log.syslog sample.sh

移动多个文件:

1
2
3
4
[root@localhost ~]# mv /tmp/file06 /tmp/file07 /tmp/file08 ~
[root@localhost ~]# ls
anaconda-ks.cfg file01 file02 file04 file06 file08 install.log sample.sh
dir01 file01_bak file03 file05 file07 hello.sh install.log.syslog

移动整个目录(与cp命令不同,mv命令移动目录时不需要加任何选项):

1
2
3
4
[root@localhost ~]# mv /tmp/dir02 ~
[root@localhost ~]# ls
anaconda-ks.cfg dir02 file01_bak file03 file05 file07 hello.sh install.log.syslog
dir01 file01 file02 file04 file06 file08 install.log sample.sh

注意

  • cp命令相同,在用mv命令移动文件的过程中,如果在目标目录中已有同名文件存在,mv命令会默认先询问用户是否覆盖,用户同意后,mv命令才会覆盖这些文件。
    若有批量的同名文件存在,建议在mv命令后跟**-f选项,那么mv命令就会强制覆盖所有**同名文件。
  • Linux中并没有专门的重命名文件的命令,mv命令可以实现这个功能。即将文件从原本目录移动到原本目录,路径不变,只改变文件名。例:
    1
    [root@localhost ~]# mv ./file08 ./file08_rename

3.3 删除文件 rm(remove)

rm [要删除的文件|文件列表|目录]
删除目录要跟**-R**选项。例:

1
[root@localhost ~]# rm -R ./dir01

在删除文件时,默认情况下,rm命令会先询问用户是否确定删除。如果批量删除文件,需要在rm命令后跟**-f**,让rm命令不询问而直接删除文件。例:

1
[root@localhost ~]# rm -fR ./dir02/

3.4 创建文件 touch

touch [要创建的文件]
注意:如果创建的文件已经存在touch命令将会改变这个文件的时间戳属性,也即文件的最后修改属性

4 链接文件

4.1 符号链接 ln(link)

ln -s [链接指向的文件] [链接名]
-s选项表示符号链接(symbolic)
例:

1
2
3
[nboocer@localhost ~]# ls -l /tmp/hello.sh
-rwxr-xr--. 1 nboocer nboocer 32 7月 27 22:59 /tmp/hello.sh
[nboocer@localhost ~]# ln -l /tmp/hello.sh ./hello_slink

我们可以通过符号链接文件读、写和执行源文件。如果源文件被删除,符号链接文件就会失效。

4.2 硬链接

LinuxLearningNote2_3
在Linux中,当硬盘分区并格式化的时候,整个分区会被分为两个部分,即INode区Data Block区
Linux中每个文件都被分为两部分存放,一部分是inode-number以及属性信息,放在INode区的一个iNode中,inode-number和iNode是一一对应的;另一部分是文件的实际数据,放在Data Block区中。
在Linux中,我们需要通过文件的iNode来找到存放文件数据的Data Block。
在一个硬盘分区中,不可能有两个文件共用一个iNode,当然也不可能有两个文件的inode-number是一样的。
如果将一个硬盘分区中的所有文件比作一本书,INode区就是其目录,Data Block区就是其内容。我们必须通过其目录才能找到具体的内容。
可以通过ls -il来查看文件的inode-number(列表的第一个字段)

4.2.1 Linux 目录

LinuxLearningNote2_4
Linux的目录文件是一张,包括文件名inode-number两项,Linux存取文件的过程就是通过文件名找到对应的inode-number然后找到文件的iNode最后找到文件的数据。

4.2.2 硬链接

LinuxLearningNote2_5
硬链接就是在目录这张表中,让一个inode-number对应多个文件名,文件iNode和数据还是一份,只不过文件多了一个名字,这个名字就被称为硬链接

4.2.3 命令

创建硬链接同样使用ln命令,但是不加-s选项
ln [链接指向的文件] [链接名]
例:

1
2
3
4
5
6
[nboocer@localhost ~]# ls -il /tmp/sample.txt
922039 -rw-rw-r--. 1 nboocer nboocer 20 7月 28 00:45 /tmp/sample.txt
[nboocer@localhost ~]# ln /tmp/sample.txt ./sample_hl01
[nboocer@localhost ~]# ls -il /tmp/sample.txt ./sample_hl01
922039 -rw-rw-r--. 2 nboocer nboocer 20 7月 28 00:45 ./sample_hl01
922039 -rw-rw-r--. 2 nboocer nboocer 20 7月 28 00:45 /tmp/sample.txt

文件属性的第二个字段表示了硬链接数目的变化
本质上,“./sample_hl01”和“/tmp/sample.txt”是同一个文件,只不过是同一个文件的多个名字罢了(inode-number一样)
我们可以通过任意一个硬链接文件来读、写、执行源文件
如果将源文件删除,在本质上只是删除了一个文件名,我们仍然可以通过余下的文件名来对文件进行操作,当所有文件名都被删除,这个文件才算真正的被删除
注意

  • 强烈不建议为目录创建硬链接,容易造成目录遍历死循环[^1]
  • 不能跨硬盘分区创建硬链接。因为在不同的硬盘分区中,文件的inode-number不再是唯一的[^2]

5 打包和解包文件 tar(tape archive)

5.1 打包

tar命令:将多个文件连接在一起,形成一个大文件,并不对文件进行压缩
tar -cf [打包文件名] [要打包的文件|列表|目录]
-c:创建打包文件
-f:指定打包文件名
**tar -tf [文件名]**:查看打包文件中所有的文件名。例:

1
2
3
4
5
6
[root@localhost ~]# tar -tf ./samplefile.tar
tmp/file01
tmp/file02
tmp/file03
tmp/file04
tmp/file05

delete长选项删除打包文件中的某个特定文件
tar -f [文件名] --dalete [要删除的文件名]

1
2
3
4
5
6
[root@localhost ~]# tar -f ./samplefile.tar --delete tmp/file05
[root@localhost ~]# tar -tf ./samplefile.tar
tmp/file01
tmp/file02
tmp/file03
tmp/file04

用**-A**选项合并两个打包文件
tar -f [文件名1] -A [文件名2]

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# tar -f ./sampledir01.tar -A ./samplefile.tar
[root@localhost ~]# tar -tf ./sampledir01.tar
tmp/sampledir01/
tmp/sampledir01/mime.types
tmp/sampledir01/ld.so.cache
tmp/sampledir01/dnsmasq.conf
tmp/file01
tmp/file02
tmp/file03
tmp/file04

用**-r**选项向打包文件中添加新文件
tar -f [打包文件名] -r [新文件名]

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# tar -f ./sampledir01.tar -r ~/fileA.txt
tar: 从成员名中删除开头的“/”
[root@localhost ~]# tar -tf ./sampledir01.tar
tmp/sampledir01/
tmp/sampledir01/mime.types
tmp/sampledir01/ld.so.cache
tmp/sampledir01/dnsmasq.conf
tmp/file01
tmp/file02
tmp/file03
tmp/file04
root/fileA.txt

5.2 解包

用**tar -xf解包,默认解包目录当前目录,可以用-C**选项指定要解包的目录
tar -xf [解包文件名] -C [解包到目录]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# tar -xf ./sampledir01.tar -C ./sampledir
[root@localhost ~]# ls -Rl ./sampledir
./sampledir:
总用量 8
drwxr-xr-x. 2 root root 4096 7月 31 10:43 root
drwxr-xr-x. 3 root root 4096 7月 31 10:43 tmp

./sampledir/root:
总用量 0
-rw-r--r--. 1 root root 0 7月 31 10:35 fileA.txt

./sampledir/tmp:
总用量 732
-rw-r--r--. 1 root root 23735 7月 31 09:02 file01
-rw-r--r--. 1 root root 4478 7月 31 09:02 file02
-rw-r--r--. 1 root root 641020 7月 31 09:03 file03
-rw-r--r--. 1 root root 69097 7月 31 09:03 file04
drwxr-xr-x. 2 root root 4096 7月 31 09:08 sampledir01

./sampledir/tmp/sampledir01:
总用量 128
-rw-r--r--. 1 root root 21214 7月 31 09:08 dnsmasq.conf
-rw-r--r--. 1 root root 60096 7月 31 09:08 ld.so.cache
-rw-r--r--. 1 root root 43591 7月 31 09:07 mime.types

6 压缩和解压文件 gzip

6.1 压缩文件

gzip 要压缩的文件|列表
gzip能提供高效的压缩,但不提供打包功能,只能压缩单个文件,因此gzip命令往往与tar命令一起使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~]# ls -l
总用量 1660
-rw-------. 1 root root 1482 7月 23 01:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 49855 7月 23 01:31 install.log
-rw-r--r--. 1 root root 11643 7月 23 01:28 install.log.syslog
drwxr-xr-x. 4 root root 4096 7月 31 10:43 sampledir
-rw-r--r--. 1 root root 870400 7月 31 10:37 sampledir01.tar
-rw-r--r--. 1 root root 747520 7月 31 10:34 samplefile.tar
[root@localhost ~]# gzip ./sampledir01.tar
[root@localhost ~]# ls -l
总用量 996
-rw-------. 1 root root 1482 7月 23 01:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 49855 7月 23 01:31 install.log
-rw-r--r--. 1 root root 11643 7月 23 01:28 install.log.syslog
drwxr-xr-x. 4 root root 4096 7月 31 10:43 sampledir
-rw-r--r--. 1 root root 192109 7月 31 10:37 sampledir01.tar.gz
-rw-r--r--. 1 root root 747520 7月 31 10:34 samplefile.tar

可以看出压缩文件“sampledir01.tar.gz”比压缩前文件“sampledir01.tar”小

压缩后的文件将替换源文件,gzip自动为压缩文件添加“.gz”后缀
压缩比:通过一个数字选项设定,“1”表示最小压缩比(压缩速度最快),“9”表示最大压缩比(压缩速度最慢),默认压缩比为6。例:

1
[root@localhost ~]# gzip -9 ./sampledir01.tar

6.2 解压文件

gzip -d 要解压的文件

1
2
3
4
5
6
7
8
9
[root@localhost ~]# gzip -d ./sampledir01.tar.gz
[root@localhost ~]# ls -l
总用量 1660
-rw-------. 1 root root 1482 7月 23 01:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 49855 7月 23 01:31 install.log
-rw-r--r--. 1 root root 11643 7月 23 01:28 install.log.syslog
drwxr-xr-x. 4 root root 4096 7月 31 10:43 sampledir
-rw-r--r--. 1 root root 870400 7月 31 10:37 sampledir01.tar
-rw-r--r--. 1 root root 747520 7月 31 10:34 samplefile.tar

6.3 打包压缩和解压缩解包

使用tar命令中的-z选项
打包压缩:**tar -czf 压缩文件名 要压缩的文件|列表**
例:

1
[root@localhost ~]# tar -czf sample.tar.gz /tmp/samplefile01 /tmp/samplefile02 /tmp/samplefile03

解压缩解包:**tar -xzf 要解压的文件**
例:

1
[root@localhost ~]# tar -xzf sample.tar.gz

7 查找文件

locate命令:查找较快,功能较弱(因为Linux将系统中所有的文件名都记录在一个名为“/var/lib/mlocate/”的数据库中,用locate命令查找文件时,会在此数据库中查找,而不是真的通过遍历硬盘来查找)
find命令:查找稍慢,功能强大

7.1 locate 命令

locate [查找的路径] [文件名的关键字]
例:在系统中查找名字中有“.tar”的文件

1
[root@localhost ~]# locate .tar

注意:用locate命令查找文件时,有时会找到已经被删除的数据,有时刚刚建立的文件无法查找到,这是记录文件名的数据库“/var/lib/mlocate/”默认情况下每天更新一次,不实时更新造成的。
可以通过updatedb命令手动更新数据,如果系统中储存文件较多,此操作将会花费一定时间。

7.2 find 命令

find [查找范围] [查找条件] [动作]
查找范围可省略,表示在当前工作目录中查找

7.2.1 根据文件名查找

使用**-name**选项
例:在整个系统中查找文件名为“passwd”的文件

1
[root@localhost ~]# find / -name passwd

注意:文件名需要时精确的名称,而不是关键字。如果需要用关键字进行查找,则要用通配符

7.2.2 根据文件类型查找

使用**-type**选项,后面跟代表文件类型的一个字符。其中文件类型字符在本章2.3小节中讲到。
例:在/bin目录下查找所有链接文件

1
[root@localhost ~]# find /bin -type l

7.2.3 根据文件的时间属性查找

选项 时间单位 含义
-mtime 和文件内容修改时间相关
-mmin 分钟 和文件内容修改时间相关
-atime 和文件被读取/执行时间相关
-amin 分钟 和文件被读取/执行时间相关
-ctime 和文件属性修改时间相关
-cmin 分钟 和文件属性修改时间相关

例:

1
2
3
4
5
6
7
8
9
10
11
在/tmp目录下查找在 3天之内 内容曾经发生过变化的文件
[root@localhost ~]# find /tmp -mtime -3 -ls
在/tmp目录下查找在 7天之前 内容曾经发生过变化的文件
[root@localhost ~]# find /tmp -mtime +7 -ls
在/tmp目录下查找在 4天前的那天 内容曾经发生过变化的文件
[root@localhost ~]# find /tmp -mtime 4 -ls

在/tmp目录下查找在 1小时之内 内容曾经发生过变化的文件
[root@localhost ~]# find /tmp -mmin -60 -ls
在/tmp目录下查找在 10分钟之前 内容曾经发生过变化的文件
[root@localhost ~]# find /tmp -mmin +10 -ls

LinuxLearningNote2_6

7.2.4 根据文件大小查找

使用**-size**选项

时间单位 含义
c 字节
k 1024字节
M 1024k
G 1024M

例:

1
2
3
4
5
6
在/tmp目录下查找大小 小于3k字节 的文件
[root@localhost ~]# find /tmp -size -3k -ls
在/tmp目录下查找大小 大于100c字节 的文件
[root@localhost ~]# find /tmp -size +100c -ls
在/tmp目录下查找大小 等于10M字节 的文件
[root@localhost ~]# find /tmp -size +10M -ls

7.2.5 根据文件拥有者和从属用户组属性查找

时间单位 含义
-user 拥有者名称
-uid 拥有者的uid
-group 从属用户组名称
-gid 从属用户组名称的gid

例:

1
2
3
4
5
6
7
8
在/tmp目录下查找 拥有者是root用户 的文件
[root@localhost ~]# find /tmp -user root -ls
在/tmp目录下查找 拥有者的uid是500的用户 的文件
[root@localhost ~]# find /tmp -uid 500 -ls
在/tmp目录下查找 从属于stu用户组 的文件
[root@localhost ~]# find /tmp -group stu -ls
在/tmp目录下查找 从属于gid为0的用户组 的文件
[root@localhost ~]# find /tmp -gid 0 -ls

7.2.6 根据文件权限查找

使用**-perm**选项,后面跟一个八进制的文件访问权限条件数字。其中文件访问权限条件数字在本章2.3小节中讲到。
例:在/tmp目录下查找权限为“rwx r-x r–”的文件

1
[root@localhost ~]# find /tmp -perm 754 -ls

7.2.7 联合条件

find命令可使用联合条件

选项 含义
-a
-o
!

在使用时要讲条件用小括号括起来,其中左右小括号要使用**\进行转义**;左右小括号和条件之间各有一个空格
例:在/tmp目录下查找权限为“rwx r-x r–”的文件

1
[root@localhost ~]# find /tmp \( -size +1k -a -size -10M -a mmin -30 -a type f \) -ls

7.2.8 动作命令选项

-exec shell命令
find将对查找到的文件执行该参数所指定的 shell 命令
例 1:在/tmp目录下查找大小大于1k小于10M的普通文件,并且将它们都删除

1
[root@localhost ~]# find /tmp \( -size +1k -a -size -10M -a mmin -30 -a type f \) -exec rm -rf {} \;

其中,rm -rf是具体命令,{}代表查找到的文件,;表示动作介绍(由于;在 bash 环境下有特殊意义,所以需要用\转义)。注意,在{}\;之间有一个空格

例 2:在当前家目录下查找在10分钟之内被创建或被修改过的目录文件,并且将它们打包成与目录同名后缀为“.tar”的打包文件

1
[root@localhost ~]# find ~ \( -mmin -10 -a -type d \) -exec tar -cf {}.tar {} \;

-ok:用法与-exec基本相同,只不过以一种更安全的模式来执行动作命令,在执行每一个命令之前都会给出提示,让用户确定是否执行,在删除文件时可以考虑使用-ok选项

8 通配符[^3]

符号 含义
* 任意长度(包括0长度)字符
? 任意单个字符
[c1-c2] 匹配 c1-c2 字符序列中的任意单一字符(前提是 c1-c2 是一个有序的字符序列)
[c1,c2,…,cn] 匹配中括号之间字符列表中的任意单一字符
{string1,string2,…,stringN} 匹配 string1,string2 直至 stringN 中的某个字符串
! 取反(往往与[]或者{}连用)

例:
*.txt:名字以“.txt”结尾的所有文件

1
2
3
4
5
6
7
8
9
10
列出/bin目录下所有名字长度为4个字符,并以“sh”结尾的文件
[root@localhost ~]# ls -l /bin/??sh
将/tmp目录下名字以“file”开头,紧接着是一个0-9之间的数字,以“.txt”结尾的文件,拷贝到当前用户家目录下
[root@localhost ~]# cp /tmp/file[0-9].txt ~
将/tmp目录下名字以“script”开头,紧接着是“a,1,x”之中的任意一个字符,以“.sh”结尾的文件的访问权限改为700
[root@localhost ~]# chmod 700 /tmp/script[a,1,x].sh
将当前目录下名字以“script”或者“jiaoben”开头,,以“.sh”结尾的文件删除
[root@localhost ~]# rm -rf {jiaaoben,script}*.sh
将/tmp目录下名字以“file”开头,紧接着是一个除0-9之间字符之外的任意字符,以“.txt”结尾的文件,打包成一个叫“file.tar”的文件
[root@localhost ~]# tar -cf file.tar /tmp/file![0-9].txt

注意:如果在find命令的-name选项中使用通配符,后面的参数必须放在双引号""

9 查看文本文件

9.1 cat 命令(concatenate)

cat命令功能:

  • 连接几个文件
  • 从键盘创建文件
  • 查看文件

其中查看文件功能:**cat 文件名**
注意cat命令查看文件时一次将全部内容输出到命令行,如果文件较长,前面的内容就看不到了,cat命令不提供翻页功能,所以只适合查看较小的文件
例:查看系统下的文件“/etc/passwd”

1
[root@localhost ~]# cat /etc/passwd

9.2 less 命令

less命令适合查看较大文件:**less 文件名**
进入文件内容后,用PgUpPgDn进行操作;利用/关键字进行查找,利用n跳转到下一个匹配项,利用N跳转到上一个匹配项;用q退出查看
例:

1
[root@localhost ~]# less /var/log/messages

9.3 head 与 tail 命令

head命令用于查看文件的头几行
head -n 参数 文件名
如果省略-n 参数,默认显示前10行
例:查看messages log文件的前20行

1
[root@localhost ~]# head -n 20 /var/log/messages

tail命令:用于查看文件的末尾几行,用法与head命令相同

headtail命令通常用来查看日志文件更新的内容

[^1]: 参见 http://wiki.c2.com/?HardLink
[^2]: 参见 http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/#listing5
[^3]: 更多用法参见 http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-3/