赞
踩
目录
在 Linux 系统中,数据和程序都是以文件的形式保存的,用户需要经常对文件与目录进行操作,因此熟练掌握文件管理操作对于能否用好 Linux 具有关键作用。虽然老师在上课时并没有过多地提及文件这些具体的概念,但我在课下看书时感觉这一块有必要知道,对后面进行的一些操作也能有所清晰的了解。首先提出的是,在不同版本的 Linux 系统下有的命令不一样。
1、文件:
文件其实是一组相关记录的集合。Linux 中文件是无结构的字符流,即文件中的任意两个字节是完全独立的,具体的信息要放到相应的环境下才有意义。文件通过文件名来标识和引用,也就是说文件是通过文件名来进行管理的,系统中的每一个文件都有一个文件名,在 Linux 中,文件的后缀名从技术角度来说没有任何的特殊意义,仅仅是文件名的一个简单的组成部分,是否被执行取决于文件属性,所以后边在创建文件时只需要文件名即可。Linux 下的文件按功能可以分为六种不同的类型:普通文件、目录文件、链接文件、设备文件、管道文件和套接字文件,对这些文件的描述如下:
1)、普通文件:
又称常规文件,这是一类常见的文件,也是经常使用的一类文件,其特点是不包含文件系统的结构信息。通常所接触到的文件,其内容为图形、数据、文档、声音等的文件都属于这种文件。这种类型的文件按其内部结构又可分为文本文件和二进制文件。
2)、目录文件
它用于存放文件名及其相关信息,是内核组织文件系统的基本节点,它可以包含下一级目录文件。
3)、链接文件
这是一种特殊的文件,实际上是指向一个真实存在的文件的链接。根据连接方式的不同,它又可分为硬链接文件和符号链接 (软链接) 文件。
4)、设备文件
它是 Linux 中一类特殊的文件,正是由于它的存在,使得 Linux 系统可以十分方便地访问外部设备。Linux 系统为外部设备提供一种标准接口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问外部设备,使 Linux 系统可以很方便地适应不断发展的外部设备。通常情况下 Linux 系统将设备文件放在 /dev 目录下,设备文件使用设备的主设备号和次设备号来指定某外部设备。根据访问数据方式的不同,设备文件又可以分为块设备文件 (以字符块为单位)和字符设备文件 (以字符为单位)。
5)、管道文件
管道文件也是一种很特殊的文件,主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,就把一个程序的输出直接连接到另一个程序的输入。管道文件还分命名管道和无名管道。无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。命名管道可以通过命令查看到 (用 ls -ln 查看文件信息时,文件类型与权限的第一个字符是 “p”,则代表该文件为管道文件)。
6)、套接字文件
套接字也是方便进程之间通信的特殊文件。与管道不同的是,套接字能促使通过网络连接的不同计算机上的进程之间进行通信。
2、目录:
在当今主流操作系统中提供目录管理功能,以能够将系统中文件分类放入到不同的目录,通过目录来管理文件。目录和其他类型的文件一样都有自己的名字,而一个目录下面除了可以存放文件之外,还可以存放目录,称为这个目录的子目录。这个子目录下还可以有它自己的子目录,以此类推从而形成一个树状目录结构。目录对文件的管理是通过目录文件来实现的。
在 Linux 系统中,只有一个根目录,不像 Windows 那样每个分区使用一个独立根目录。如果有多个分区,就需要将其他分区挂载到根目录下的某一个目录上,作为根目录的一个子目录来使用,具体的挂载方法讲解见 初识 Linux — 设备管理 。
Linux 系统的主要目录结构及其作用已经被规定为国际标准,下面对系统中目录的功能与作用进行说明:
1)、/
Linux 文件系统的入口,称为根目录,位于 Linux 文件系统目录结构的顶层,每个 Linux 操作系统中有且仅有一个根目录。
2)、 /bin
可执行二进制文件的目录,如常用的命令 ls 、mv、cat 等,运行时所用的指令文件通常都位于此目录中。
3)、 /boot
放置 Linux 系统启动时用到的一些文件,其下有 grub 等子目录。
4)、 /dev
存放着 Linux 下所有的设备文件。
5)、 /etc
系统配置文件存放的目录,重要的配置文件和目录有 /etc/inittab 、/etc/fstab、/etc/init.d、/etc/sysconfig、/etc/xinetd.d 等,在修改配置文件之前最好备份。
6)、/home
用户主目录,每建立一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间。
7)、/lib
其中存放着系统使用的函数库,比较重要的目录为 /lib/modules 。
8)、 /mnt
外部设备的挂接点,通常有 cdrom 和 floppy 两个子目录。
9)、/opt
给主机安装系统之外的软件时存放文件的目录。例如,如果想要自行安装新的 KDE 桌面软件,可以将该软件安装在该目录下。
10)、/proc
该目录不在某个磁盘上,而是由内核在内存中产生,用于提供系统的运行信息,如 CPU 信息、设备驱动的列表、网络协议状态信息和当前使用的 I/O 端口等,数据都存放在内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo 、 /proc/devices 、 /proc/net 、/proc/ioports 、 /proc/meminfo 和 /proc/modules 等。
11)、/root
系统管理员 root 的家目录,由于系统启动时首先加载系统根目录/所在的分区,因此为确保系统管理员 root 能在系统启动之后即可登录,最好将 /root 和 / 放置在一个分区下。
12)、/sbin
放置系统管理员使用的可执行命令,如 fdisk 、shutdown 、reboot 等。与 /bin 不同的是,这目录中放置的是给系统管理员 root 使用的命令,一般用户只能 “查看” 而不能使用和设置。
13)、/srv
服务启动之后需要访问的数据目录。
14)、/tmp
临时文件目录,有时用户运行程序时,会产生临时文件,产生的临时文件放在该目录中。
15)、/usr
应用程序存放目录。/usr/bin 存放应用程序;/usr/share 存放共享数据;/usr/lib 存放不能直接运行的、却是许多程序运行所必需的一些函数库文件;/usr/local 存放软件升级包;/usr/share/doc 为系统说明文件存放目录;/usr/share/man 为程序说明文件存放目录,使用 man ls 时,会查询 /usr/share/man/manl/ls.l.gz 的内容。
16)、/var
该目录放置系统执行过程中经常变化的文件,如 /var/log 是存放日志文件的目录;/var/run 保存到下次引导前有效的关于系统的信息文件;/var/tmp 存放比 /tmp 允许的大或需要存放较长时间的临时文件。
17)、/lost + found
一些丢失的文件可以在这里找到。
在 Linux 中,要找到一个文件,必须知道文件的位置,而表示文件位置的方式就是路径,路径有两种表示方式,即绝对路径和相对路径。
1、绝对路径:
从根目录开始的路径是绝对路径。如有路径:/etc/sysconfig/network ,就知道文件 network 位于子目录 sysconfig 中,而子目录 sysconfig 位于根目录下的子目录 etc 中,类似于这样完整的描述文件位置的路径就是绝对路径,不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。
2、相对路径:
不以根目录开始的路径是相对路径,它以相对当前工作目录下的路径指定一个文件。例文件有路径如:/home/xxs/tmp/test ,若此时当前工作目录下为 xxs ,为了表示 test 所在位置,可以使用相对路径 /tmp/test 。为了访问当前工作目录,可以在相对路径中使用特殊目录名 “ ./ ”来表示自身目录 (即 xxs 目录),为了表示上一级目录也可以在相对路径中使用特殊路径名 “ ../ ” 表示该目录的父目录 (即 home 目录),因此,以下几种方法都可以正确定位到 test 文件。
- ./tmp/test
-
- ../xxs/tmp/test
-
- ../../home/xxs/tmp/test
Linux 文件和目录的属性主要包括 inode 值、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。例如,使用 “ls -li ”命令列出 /etc 目录中部分文件的属性信息,即
ls -li /etc
我们可以看到终端中的命令运行结果信息,可以看到文件和目录的主要属性,这些属性分为8个字段,各个字段以空格作为分隔符,各个字段的含义依次为:inode 值、文件种类和权限、连接计数、文件或目录的拥有者、文件或目录的组群、文件或目录的大小、最后访问或修改的时间、文件名或目录名。当然文件和目录的属性不仅仅只有这些,这 8 个字段只是最常用的一些属性。
下面以刚查出的文件 statetab 和 目录 sysconfig 为例进行说明。
1)、inode 值
statetab 的 inode 值是34462170 ,sysconfig 的 inode 值是33557591 。inode 翻译成中文就是索引节点,每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U 盘等 ~)被格式化为文件系统后有两部分,一部分是 inode ,另一部分是 block(块),block 用来存储数据,inode 用来存储这些数据的信息,这些信息包括文件大小、拥有者、归属的用户组、读写权限等。inode 为每个文件进行信息索引,操作系统能通过 inode 值很快找到相对应的文件。当用 ls 查看某个目录或文件时,如果加上 -i 参数,就可以看到 inode 节点了。
具体关于 inode 的知识见 初识 Linux — 理解 inode
2)、文件类型
第二个字段的第一个字符表示文件类型,statetab 的文件类型是 - ,表示这是一个普通文件,sysconfig 的文件类型是 d ,表示这是一个目录;如果文件类型是 l ,表示这是一个链接文件;如果文件类型是 b,表示这是一个块设备文件;如果文件类型是 c ,表示这是一个字符设备文件;如果文件类型是 p ,表示这是一个管道文件;如果文件类型是 s,表示这是一个套接字文件。
3)、文件权限
第二个字段的其他字符表示权限,2~4位表示文件所有者的权限,5~7位表示群组内其他成员的权限,8~10位表示组外其他所有人的权限,其中 r 表示读权限,w 表示写权限,x 表示执行。例:statetab 的文件权限是 rw-r--r-- ,表示文件拥有者可读、可写、不可执行 ,文件所归属的组群成员拥有的权限为可读、不可写、不可执行 ,其他用户可读、不可写、不可执行 ;sysconfig 的文件权限是 rwxr-xr-x ,表示文件拥有者可读、可写、可执行 ,文件所归属的组群用户可读、不可写、可执行 ,其他用户可读、不可写、可执行。对于文件和目录的权限在后面详细描述。
4)、连接计数
对于文件来说,连接计数表明本系统中共有几个文件共用该文件的 inode ,例如 statetab 的连接计数为 1 ,表示只有 statetab 在使用编号为 的 inode。而对于目录来说,该计数值同样表示共有多少个目录项指向此目录,这些目录项除包含该目录下的所有子目录和文件外,还包括了该目录自身和其上层目录的目录项。因此将指定目录的连接计数减 2 就等于本目录直接包含的子目录和文件的总和,例如目录 sysconfig 的连接计数为 7,表名直接包含的子目录及文件的总数为 5 个。有困惑的见上面超链接。
5)、文件拥有者
表示这个文件归属于哪个用户,对于文件 statetab 、sysconfig 来说,其文件拥有者为 root 用户。
6)、文件组群
表示这个文件归属于哪个组群,对于文件 statetab 、sysconfig 来说,它归属于 root 组群。
7)、文件或目录的大小
文件 statetab 的大小为 个字节,目录sysconfig 的大小是 字节。
8)、访问或修改的时间
这里的时间是最后修改文件内容的时间,最后访问时间、文件内容被修改或创建文件的时间有时并不是一致的。
Linux 文件和目录的权限与用户和组群联系在一起,对于文件而言,Linux 系统中规定了四种不同类型的使用者,即文件拥有者、组群、可以访问系统的其他用户和超级用户 (root)。在上面的内容中提到 statetab 的文件权限是 rw-r--r--,sysconfig 的文件权限是 rwxr-xr-x ,每个文件或目录都有 9 个权限位,每三位被分为一组,它们分别是拥有者权限位、组群权限位和其他用户权限位,每个权限为各占三个位置。可读用 r 代表,意味着可以查看阅读;可写用 w 代表,意味着可以修改或删除;可执行用 x 代表,意味着可运行此文件的权限。如果不可读、不可写、不可执行,用 - 来表示。
需要注意的是,用户对文件所拥有的权限还依赖于他对文件所属的目录所拥有的权限。虽然一个文件的权限是 rwxrwxrwx ,但用户也只有在对该文件所属目录拥有读写和执行权限时,才能够对该文件进行读写和执行。
假设用户 A 拥有目录 /home/A ,如果用户 A 希望限制他人对其所拥有文件的访问,那么用户 A 只需将它的目录 /home/ A 的权限设置成 “rwx------”,此时其他任何用户都不能访问它的目录,包括其中的所有文件和子目录。这样用户就不必一个一个地修改它的文件的权限了。如果用户为了访问某个文件,这个用户就必须具有对该文件路径名中所有目录的执行权限以及对该文件自身的相应的访问权限。
文件的权限一般设为 rw-r--r-- ,这种权限的设置允许其他用户读文件,但不能写和执行。而目录的权限一般设置为 rwxr-xr-x ,这种权限的设置允许其他用户查看目录,但不能在其中建立或删除文件。
当创建一个文件时,创建者就是该文件的拥有者。一旦拥有某个文件,就可以改变它的所有权,把它的所有权交给另一个 /etc/passwd 文件中存在的合法用户。可以使用用户名或用户 ID 号来完成这一操作。只有文件的拥有者和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另一个用户,就无法再重新收回它的所有权。如果真的需要收回权限,那么只能求助于系统管理员。其指令格式为:
- chown [-Rhvc] 文件的新拥有者 文件名
-
- -R :表示对所有子目录下的文件进行同样的操作。
- -h :表示在改变符号链接文件的拥有者时不影响该链接所指向的目标文件。
- -v : 显示拥有者变更的信息。
- -c : 若文件拥有者确实已经更改,才显示其更改动作。
例:
- chown xxs file # 把文件 file 的所有者改为 xxs 。
-
- chown -R xxs mydir # 把目录 mydir 及该目录下的所有文件和子目录的所有者都改为 xxs 。
文件的所有者或超级用户不但能改变文件和目录的拥有者,而且可以改变文件和目录的组群。其指令格式为:
- chgrp [-Rhvc] 文件的新组群名 文件名
-
- 选项 -R 、-h 、-v 和 -c 的含义同 chown ,只不过 -c 仅汇报更改的部分 。
在 Linux 中,使用 chmod 命令来进行相关权限的设置,但只有当文件的拥有者对某个文件有写的权限时,它才能够改变该文件的权限,而超级用户可以对所有文件进行权限设置。chmod 的命令有两种模式,即数值模式和符号模式。
i 、数值模式
Linux 中规定:每个位上如果出现了字母,则该位记为 1 ,如果是 “-” ,则记为 0,这样将 9位都设置后就将得到一个二进制数。该二进制数可以转换为一个对应的 3 位八进制数,这个八进制数被称为 权限值,用来直接描述一个文件的权限。
例有文件有权限字段 : rwxr--r-- ,将其文件权限设置为所有用户均具有读写和执行的权限 (即权限值为 777 ),那么将文件的权限字段转化为 二进制 :111 100 100 ,然后再转化为八进制:744,最后用 chmod 命令进行设置。其指令格式为:
- chmod [-R] 权限值 文件名1 文件名2
-
- -R :表示递归地改变所指定目录的参数及其子目录的访问权限。
例:
- chmod 744 file # 把文件 file 的读写权限改为 744 ,即 rwxr--r--
-
- chmod -R 744 mydir # 把目录 mydir 及该目录下所有文件和子目录的读写权限改为 744 。
ii 、符号模式
chmod 的符号模式相对来说比较直观,更容易掌握,其指令格式为:
chmod {a、u、g、o} {+、-、=} {r、w、x、-} 文件名1 文件名2
该命令首先要指明要赋予权限的用户类,可以是 a、u、g、o中的一个或多个,其中 a 代表的是所有的用户,u 代表文件的所有者自身, g 代表同组的用户,o 代表组外的其他用户;接下来要指明是增加权限、删除权限还是设置权限,用 “ + ”选项表示增加权限,用 “ - ” 选项表示删除权限,用 “ = ”选项直接设定权限;最后要指明所要增加、删除或设置的权限,可以是 r、w、x中的一个或多个。
- chmod u-rw test
- ls -li test //查看属性
-
- chmod ugo+x test
- ls -li test
文件的隐藏属性用于规定文件的特殊用法,尤其是在系统安全方面的相关特性。利用 chattr 可以设置隐藏属性,利用 lsattr 可以查看隐藏属性。
i 、设置隐藏属性
其指令格式为:
- chattr {+、-、=} {a、c、d、i、s、u} 文件/目录
-
- a : 可向其追加数据,不可进行修改/删除数据(可用 “ >> ” 命令或者 echo 命令向文件中追加数据)。
- c : 文件自动压缩后存储(进行读取时会自动解压缩)。
- d : 当 dump 执行备份时,该目录、文件不会被 dump 备份。
- i : 不可删除、改名,无法写入数据。
- s : 删除时彻底删除,相当于 Windows 下的 Shift + Delete 。
- u : 与 s 相反,删除时还在磁盘指定的目录中,相当于 Windows 下的 Delete 。
ii 、查看隐藏属性
其指令格式为:
- lsattr [-adR] 文件/目录
-
- -R : 递归显示子目录。
- -a : 显示所有文件。
- -d : 显示子目录信息,不显示子目录中的文件。
用户在创建文件或目录时自动为其赋予默认操作权限,这个权限值默认为 666 (文件) 或 777 (目录),即每一类用户在创建文件时可以为其赋予的默认最大值是 6 ,系统不允许在创建文本文件时就赋予它执行权限,而是要在创建之后通过 chmod 命令增加这一权限,这样做可以更好地进行系统安全控制。但目录文件的执行权限很特别,如果不具备执行权限的话,用户将无法对该目录进行读和写,因此在创建目录权限时,权限值中的各个数字最大均可以到 7 。
系统默认 root 用户的 umask 值为 022 ,即 root 用户创建的目录默认读写权限为 755,创建的文件默认读写权限为 644;普通用户的 umask 为 002,即普通用户创建的目录默认读写权限为 775,创建的文件默认读写权限为 664 。
若要将系统进行更严格的权限控制,可以使用 umask 指令修改用户在创建文件时的默认权限设置。umask 指令用于设置用户创建文件的默认权限时,它与 chmod 指命中权限值的含义刚好相反,umask 设置的是权限 “补码” ,而 chmod 设置的是文件权限值。
一般来说,umask 值是在 /etc/profile 文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的 umask ,可以在该文件中加入相应的条目。如果希望永久性地设置自己的 umask 值,那么就把它放在自己的 /home 目录下的 .profile 或 .bash_profile 文件中。该命令的一般形式为:
umask xyz # 更改当前用户的 umask 值为 xyz
xyz 表示从基本默认权限 666 或 777 中 “拿走” 的权限。例如 umask 值为 022,则默认目录权限为 755 ,默认文件权限为 644 。若想知道当前的 umask 值,可以使用 umask 命令:
umask
输出有四位数字,后三位即为当前的 umask 权限值,最前面的表示文件的特殊权限,其作用下面来进行说明。
Linux 中除了常见的读写执行权限以外,还有三个特殊的权限,分别是 setuid 、setgid 和 stick bit 。
查看 /usr/bin/passwd 与 /etc/passwd 文件的权限:
ls -l /usr/bin/passwd /etc/passwd
众所周知, /etc/passwd 文件存放的是各个用户的账号与密码信息,而 /usr/bin/passwd 是执行修改和查看此文件的程序。从上例可以看出,/etc/passwd 仅对 root 用户有写权限,可实际上每个用户都可以通过 /usr/bin/passwd 命令去修改这个文件,这里使用的就是 Linux 的特殊权限 setuid 。 /usr/bin/passwd 的权限 -rwsr-xr-x 中的 “s” 就是 setuid ,它表示令普通用户暂时拥有 “只有 root用户 有权执行” 的特殊权限,setgid 则是指组群用户都暂时拥有 “只有 root 组群用户才能执行”的特殊权限,当此命令执行完,权限也随之失去。
作为普通用户是没有权限修改 /etc/passwd 文件的,但给 /usr/bin/passwd 以 setuid 权限后,普通用户就可以通过执行 passwd 命令临时的拥有 root 权限去修改 /etc/passwd 文件,以便记录自己新设置的密码。另外,setuid 和 setgid 权限只对可执行文件才有意义。
sgid 可以用在两个方面。文件:如果 sgid 设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组将会变成该程序的用户组所有者;目录:如果 sgid 是设置在 A 目录上,则在该 A 目录内所建立的文件或目录的用户组,将会是此 A 目录的用户组。
查看 /tmp 目录的权限:
ls -dl /tmp
tmp 目录是所有用户共有的临时文件夹,所有用户都拥有读写权限,这就可能出现一个问题, A 用户在 /tmp 里创建了文件,此时 B 用户看到了,可能在 /tmp 里把它给删了(因为有写权限),那肯定是不行的。实际上也不会出现这种情况,因为有特殊权限 stick bit (粘贴位)权限, /tmp 的权限 drwxrwxrwxt 中的最后一个 t ,指的是stick bit ,它的含义是:除非文件的拥有者和 root 用户有权限删除它,除此之外IDE其他用户不能删除和修改这个目录。也就是说,在 /tmp 目录中,只有文件的拥有者和 root 用户才能对其进行删除和修改,其他用户则不行,避免了前边提到的问题。stick bit 可以用于共享的目录,可以开放目录的全部权限,每个人都可以使用该目录,但不能删除其他用户的文件(即使用权限时通常会开放目录的全部权限,然后在其中共享文件),像 /tmp 目录一样。例:
- chmod u+s file //设置 setuid
-
- chmod g+s file //设置 setgid
-
- chmod o+t file //设置 stick bit
或者可以使用八进制方式,在原先的 umask 权限值加一个数字,suid 的二进制串为 100 ,换算八进制为 4 ,guid 的二进制串为 010 ,换算八进制为 2 ,stick bit 的二进制串为 001,换算八进制为 1 。例:
- chmod 4755 file //设置 setuid
-
- chmod 2755 file //设置 setgid
-
- bit:chmod 1755 file //设置 stick bit
需要注意的是,若为一些文件设置了特殊权限后,使用 ls -l 指令看到的特殊权限字母不是小写的 s 和 t ,而是大写的 S 和 T,则表示此文件没有可执行权,其特殊权限没有生效,此时只需为该文件加上可执行(x) 权限即可。
ls 是单词 list 的缩写,其功能为列出目录的内容,其一般指令格式为:
- ls [-Radlrtucpi] 文件名/目录名
-
- -R : 递归列出每个子目录的内容。
-
- -a : 列出所有的文件,包括第一个字符为 “ . ” 的隐藏文件 ,与 -l 选项连用以显示包括隐藏文件的所有文件状态, -al 。
-
- -d : 若后面参数是目录,则只列出目录本身的相应属性而非其子目录和子文件属性,常与 -l 选项连用以显示目录状态, -dl 。
- -l : 长列表输出,显示文件详细信息,每行一个文件,从左至右依次是文件存取模式、链接数、文件主、文件组、文件字节数、上次修改时间。
-
- -r : 逆序排列。
- -t : 按时间顺序排列而非按名字。
- -u : 显示时间时使用上次访问时间而非上次修改时间。
- -c : 显示时间时使用上次修改 inode 时间而非上次修改时间。
- -p : 若所列文件是目录文件,则在其后显示斜杠 (/) 。
-
- -i : 显示索引节点 (inode) 号 。
例:
- ls /home # 查看 /home 目录下的文件(不包括隐藏文件)。
-
- ls -a /root # 显示 /root 目录下的所有文件(包括隐藏文件,隐藏文件前带有 “ . ”)。
-
- ls -l /etc # 长格式显示所有内容,相当于 ll 命令。
该命令用于显示当前所在的工作目录,其指令格式为:
pwd
该指令用于改变当前的工作目录,无参数时使用环境变量 $home 作为其参数, $home 为当前登录用户的家目录。其指令格式为:
cd 目录名
例:
- cd //进入当前用户家目录。
-
- cd /tmp //进入 /tmp 目录。
-
- cd ../ //进入上级目录。
-
- cd ~ //回到当前用户的家目录,同 cd
该命令用于建立目录,其指令格式为:
- mkdir [-mp] 目录名
-
- -m : 对新建目录设置存取权限,不加此选项默认权限为 755 。
-
- -p : 建立目录时建立其所有不存在的父目录,递归建立。
目录的操作权限由 umask 值决定,目录的 UID 和 GID 为实际 UID 和 GID 。有:
- mkdir tmp # 在当前目录下创建目录 tmp 。
-
- mkdir -m 777 /tmp/file # 在 /tmp 目录下创建子目录 file ,并令其使用拥有全部权限的存取模式。
- ls -dl tmp # 长格式查看目录本身的信息。
-
- mkdir -p /tmp/a/b/c # 建立目录 /tmp/a/b/c ,若不存在 /tmp/a/b ,则自动建立。
该命令用于删除空目录,其指令格式为:
- rmdir [-ps] 目录名
-
- -p : 递归删除所有已经为空的父目录,如果删的目录不为空时可以用下面的 rm -r 命令进行删除。
- -s : 当使用 -p 选项时,出现错误不提示。
例:
- rmdir a/b/c # 出错,c 目录非空。
-
- rmdir a/b/c/d
-
- rmdir -p a/b/c/d # 递归删除所有空目录。
该命令用于对文件的复制,其指令格式为:
- cp [-iprl] 文件1 文件2 目标
-
- -l : 不做拷贝,只是链接文件(硬链接)。
-
- -i : 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止,该选项也用来防止用户在不经意情况下用 cp 命令破坏另一个文件。
- -p : 不仅拷贝文件内容,还有修改时间、存取模式、存取控制表,但不拷贝 UID 及 GID 。
- -r : 若文件名为目录,则拷贝目录下所有文件、子目录和它们的文件,此时目标必须为目录。
将文件1 (文件2...) 拷贝到目标处,目标不能与文件同名,若目标是文件名,则拷贝的文件只能有一个;若目标是目录,则拷贝的文件可以有多个,表示将这多个文件拷贝到目标目录中。若目标文件不存在,则建立这个文件,若存在则覆盖其以前的内容。
例:
- cp file file1 # 将文件 file 拷贝为 新文件 file1
-
-
- mkdir a b # 创建两个目录 。
- touch a/1 # 在目录 a 中创建文件 1 。
- cp -l a/1 b # 复制链接。
- cp a/1 b # 此时会提示两者是同一个文件。
-
-
- mkdir -p a/b/c/d # 递归创建几个目录 。
- cp a b # 此时提示略过目录 a 。
- cp -r a b # 将目录 a 复制到目录 b 下。
-
-
- cp a/1 b/2 # 将 a 目录下文件 1 复制到 b 目录下,并改名为 2 。
-
- cp file file1 /tmp # 将文件 file 和 文件 file1 拷贝到目录 /tmp 下。
-
- cp -r /tmp /mytmp # 将目录 /tmp 下所有文件及其子目录拷贝到目录 /mytmp 。
-
- cp /etc/*.conf a # 将 /etc 目录下所有后缀为 .conf 的文件复制到 a 目录。
该命令将文件移动至目标,若目标是文件名,则相当于文件改名,其指令格式为:
- mv [-fi] 文件1 文件2 目标
-
- -f : 强制覆盖,覆盖前不作任何提示。
- -i : 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止。
例:
- mv file file1 # 将文件 file 改名为 file1
-
- mv file file1 /tmp # 将文件 file 和文件 file1 移动到目录 /tmp 下。
-
- mv a/1 b/2 # 将 a 目录下目标(目录或文件) 1 移动到 目录 b 中,并改名为 2 ,若目标是目录且其还有子目录,则将其子目录下所有一并移动。
该指令用来删除文件或目录,但对于链接文件,只是断开连接,原文件不变,其指令格式为:
- rm [-fi] 文件 或 rm -r [-fi] 目录名...[文件]
-
- -f : 强制删除,不再询问。
- -i : 删除文件之前先做提示,有的 Linux 系统版本默认为该选项。
-
- -r : 递归地删除目录及其所有子目录,小心文件删除后不能恢复,所以在递归删除时最好使用 -i 选项进行确认。
例:
- rm file //删除文件 file
-
- rm -i /tmp/* //删除目录 /tmp 下的所有文件
-
- rm -r /mytmp //递归删除目录 /mytmp 及其子目录,常用该选项进行删除。
该命令将指定文件的访问时间和修改时间改变,若指定文件不存在则创建(一般该命令常用来创建文件),若无指定时间则使用当前时间,返回值是未成功改变时间的文件个数,包括不存在而又未能创建的文件。其指令格式为:
- touch [-amc] [-r <参考文件或目录>] [-t <日期时间> ] 文件 ...
-
- -a : 只改变访问时间。
- -m : 只改变修改时间。
- -c : 若文件不存在,不创建且不作提示。
-
- -r : 使用参考文档的时间。
- -t : 设定文件的修改时间,日期格式为 “ MMDDHHmm ”
例:
- touch file file1 # 创建文件 file 和文件 file1 ,并更新文件的时间为当前时间。
- ls -l file # 查看文件 file 的修改时间。
-
- touch -t 10010900 file2 # 将文件 file2 的时间改为 10月1日9点,此时文件若不存在则自动创建,若在前边加上 -c 选项,则不会自动创建。
-
- touch -r file1 file # 把文件 file 的时间改为 file1 的时间(以 file1 为参考)。
- ls -l file file1
用于查看曾经运行过的命令。执行过 history 命令后,在终端中会显示之前做过的一系列命令,此时若输入命令 ! n ( n 是历史命令前的数字)则表示执行 history 结果中显示的第 n 条命令。
该命令采用逐行比较的方式比较两个文件之间的差异,其指令格式为:
- diff [-abBcqyiwrxpsST] 文件1 文件2
-
- -a : 将所有文件作为文本文件进行比较。
- -b : 忽略空格的差异,即多个空格当做一个空格处理。
- -B : 忽略空行。
- -c : 显示全部内文,并标出不同之处。
- -q : 只报告两个文件是否相同,不报告细节。
- -x name : 不比较该选项中所指定的文件或目录的名称。
- -y : 以并列的方式显示文件的不同的地方。
- -i : 忽略大小写。
- -w : 忽略所有空格。
- -r : 比较时,递归地比较该目录下所有的子目录。
- -p : 若比较的是 c 程序代码,显式差异所在的函数名称。
- -s : 当两个文件相同时报告。
- -T : 比较时,在每行前面加上 tab 字符以便对齐。
- -S file : 在进行目录比较时,从文件 file 开始。
比较时有三种情况,分别是:1)、如果给定的 file1 和 file2 都是文件,diff 命令就比较这两个文件的内容。如果其中一个文件的文件名是 “ - ” ,diff 就从标准输入上读取文本,即从键盘上输入文本。2)、如果给定的 file1 和 file2 都是目录,则 diff 命令会比较目录中相同文件名的文件,但不会比较其中子目录。3)、如果给定的 file1 和 file2 中一个是文件,另一个是目录,diff 命令则从目录项中查找与文件同名的文件再进行比较。
该命令用于从文件中获取指定位置的字符串,其指令格式为:
- cut [-cdf] 文件
-
- -c n1,n2 : 获取每一行的第 n1 到 n2 个字符。
- -f m1,m2 : 获取每一行的第 m1 到 m2 栏的内容。
- -d “sep_char” : 指定栏的分隔符,不指定的话默认用制表符作为分隔符。
例:
cut -f 1,3 -d":" /etc/passwd
提示:在使用 -f 选项时,默认的分隔符是制表位 tab 符,此时可以使用 -d"sep_char" 来指定栏的分隔符,但是其中的 sep_char 只能是单个字符,如 “ :”。
该命令用于显示文本和连接一个或多个文件至标准输出(即合并文件),一般格式为:
- cat [-usvte] 文件
-
- -s : 两个以上的空白行替换为 1 行显示 / 对不存在的文件不作提示。
- -n : 由 1 开始对所有行编号。
- -b : 空白行不编号。
-
-
- -u : 无缓冲的输出(缺省为有缓冲输出)。
- -v : 显示出文件中的非打印字符,控制字符显示成^n ,n 为八进制数字;其他非打印字符显示成 M-x ,x 为该字符低七位的八进制数值。
- -t : 在使用 -v 选项时,将制表符 (tab) 显示成 ^I,将换页符显示成 ^L 。
- -e : 在使用 -v 选项时,在每一行的行尾显示 $ 。
例:
- cat file //显示文件内容
-
- cat -s -v -e file1 file2 file3 //逐个显示文件 file1、file2、file3 的内容。
另补文件内容的追加:
- > 和 >>
- cat -n file1 > file2 # 把文件 file1 的内容加上行号输入到文件 file2 中。
-
- cat -b file1 >> file2 # 将文件 file1 加上行号(空白行不加)后追加到文件 file2 的末尾
需要注意的是 “ > ” 命令相当于完全把后面文件内容先给抹去,然后用前边文件内容去替代;而 “ >> ” 命令是将前边的文件追加到后面文件的末尾,这其中的区别不要弄乱。
该命令将文件显示在终端上,每次一屏,在左下部分显示 “ --more-- ”,右下部分显示百分比,表示已显示的部分 (我的 Linux 系统下都是在左下部分),按回车键下滚一行,按空格键下滚一屏,未显示完时可以使用 more 命令中的子命令,其指令格式为:
- more [-cdflrsuw] [-行数] [+行号] [+ /模式] 文件
-
- -c : 显示文件之前先清屏。
-
- -d : 当输错命令时显示错误信息而不是响铃 (bell)。
- -f : 不折叠显示长的行。
- -l : 不将分页控制符 (Ctrl d) 当做页结束标志。
- -r : 一般情况下, more 不显示控制符,本选项使 more 显示控制符,如将 (Ctrl + c) 显示成 ^c 。
- -u : 禁止产生下划线序列。
-
- -s : 将多个空行转换成一个空行显示。
-
- -w : 一般情况下 more 显示完后立即退出,本选项在显示完后作提示,按任意键后退出。
-
-
- -n 行数 : 指定每屏显示的行数。
- +行号 : 从指定行号开始显示。
- +/模式(string字符串) : 在文件中搜索指定字符串,从模式出现行的上两行开始显示文件。
-
一些常用的操作命令如下:Enter :向下移动 n 行,需要定义,默认为 1 行 ;Ctrl + F :向下滚动一屏;空格键:向下滚动一屏;Ctrl + B :返回上一屏;= :输出当前行的行号;:f :输出文件名和当前行的行号;V :调用 vi 编辑器; !命令:调用 shell ,并执行命令;q :退出 more 。
例:
- more -c +50 file //清屏后,从第 50 行开始显示文件。
-
- more -s -w file1 file2 file3 //显示文件 file1、file2、file3 的内容。
less 与 more 类似,但使用 less 可以随意浏览文件(即文件查看完后可以再往前滚动阅览),而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件,因此在处理大文件时速度较快,其指令格式为:
- less [-befgimNoQsSx] 文件
-
- -i : 忽略搜索时的大小写。
- -m : 显示类似 more 命令的百分比。
- -N : 显示每行的行号。
- -s : 显示连续空行为一行。
- -p string : 在文件中搜索 string 字符串,从该字符串处显示。
-
- -b : <缓冲区大小> 设置缓冲区的大小。
- -e : 当文件显示结束后,自动离开。
- -f : 强迫打开特殊文件,例如外围设备代号、目录和二进制文件。
- -g : 只标志最后搜索的关键词。
- -S : 行过长时将超出部分舍弃。
- -x <数字> : 将 “tab” 键显示为规定的数字空格。
- -o <文件名> : 将 less 输出的内容在指定文件中保存起来。
- -Q : 不使用警告音。
其常用的操作命令如下:/ 字符串 :向下搜索 “字符串” 的功能 ;? 字符串 :向上搜索 “字符串” 的功能 ;n :重复前一个搜索 ;N :反向重复前一个搜索(与 / 或 ? 有关);b :向后翻一页 ;d :向后翻半页 ;h :显示帮助界面 ;Q :退出 less 命令 ;u :向前滚动半页 ;y :向前滚动一行 ;空格键 :滚动一行 ; 回车键 :滚动一页 ;【pagedown】:向下翻动一页 ;【pageup】:向上翻动一页 。
例:
- less file //浏览文件 file 。
-
- less file1 file2 //浏览多个文件 。
-
- less -N /xxs/myfile //浏览 /xxs/myfile 的内容时,显示行号。
该命令将文件的头 n 行显示输出,缺省值为 10 行,显示多个文件时,在每个文件的前面加上 “=> 文件名 <= ” ,其指令格式为:
- head [-nvqc] 文件
-
- -c num : 显示文件的前 num 个字节。
- -n : 输出的行数,前 n 行。
- -v : 显示文件名。
- -q : 不显示文件名,默认设置。
需注意:命令 head -v -10 file 和 命令 head -10 -v file 不相同,前者的命令是错误的。
该命令从指定点开始将文件写到标准输出,如果没有指定文件,则会使用标准输入,其指令格式为:
- tail [-f] [-c Number | -n Number | -m Number | -b Number | -k Number] 文件
-
- 或
-
- tail [-r] [-n Number] 文件
Number 变量指定将多少单元写入到标准输出,Number 变量的值可以是正的或负的整数,如果值的前面有 + (加号),从文件开头指定的单元数开始将文件写到标准输出,如果值的前面有 - (减号),则从文件末尾指定的单元数开始将文件写到标准输出,如果值前面没有 + 或 - ,那么从文件末尾指定的单元号开始读取文件。
使用 tail 命令的 -f 选项可以方便地查询正在改变的日志文件, tail -f filename 会把 filename 里最尾部的内容显示在屏幕上,并且不断刷新,能够看到最新的文件内容。
Number 变量用于确定计数的起点,单元类型由 -b、-c、-k、-m及-n 标志确定,如果没有指定其中的任何一个标志,那么 tail 命令就会读取指定文件的最后 10 行,并将其写到标准输出,这与在命令行输入 -n 10 是相同的。
-b Number :从 NUmber 变量表示的 512 字节块位置开始读取指定文件;-c Number :从 Number 变量表示的字节位置开始读取指定文件 ;-k Number :从 Number 变量表示的 1KB 块位置开始读取指定文件;-m Number :从 Number 变量表示的多字节字符位置开始读取指定文件,使用该标志1提供在单字节和双字节字符代码集环境中的一致结果;-n Number :从 Number 变量表示的行位置开始读取指定文件。
-r :从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式打印整个文件。如果文件大于 20480 字节,那么 -r 标志只显示最后的 20480 字节,-r 标志只有与 -n 标志一起时才有效,否则就会将其忽略。
例:
- tail -n 5 file # 查看 file 文件的最后 5 行。
-
-
- head -10 file | tail -6 # 读取文件 5~10 行。
该命令用于读取文件(缺省时读取标准输入),计算输入中的行号,将计算过的行号写入标准输出,其指令格式为:
- nl [-bnw] 文件
-
- -b : 指定行号显示的方式,主要有两种:
- -b a : 表示不论是否为空行,也同样列出行号 (cat -n) ;
- -b t : 如果有空行,空的那一行不要列出行号 (默认值) 。
-
- -n : 列出行号表示的方法,主要有三种:
- -n ln : 行号在屏幕的最左方显示;
- -n rn : 行号在屏幕的最有房显示,且不加 0 ;
- -n rz : 行号在自己栏位的最右方显示,且加 0 。
-
- -w : 行号栏位占用的位数。
nl 可以将输出的文件内容自动加上行号,其默认的结果与 cat -n 有点不一样, nl 可以将行号作比较多的显示设计,包括位数与是否自动补齐 0 等功能。
例:
- nl -b a -n rz /etc/issue
-
- nl -b a -n rz -w 3 /etc/issue //同上,另将行号改为3位数。
cat 命令可以显示文件的内容,它反过来写就是 tac ,而 tac 恰巧也是一个 Linux 命令,它的功能就是把文件内容反过来显示,文件内容的最后一行先显示,第一行最后显示,这个命令用法如 cat ,此处不再重复。
该命令会在 Path 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果,即搜索系统可执行文件 (命令) 的详细路径,其指令格式为:
which 可执行文件名称
也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令,注意这里的系统环境变量 Path 是搜寻可执行文件时的默认目录集合,目录与目录中间以冒号分隔。由于文件的搜寻遵循 Path 变量内的目录次序,所以 Path 变量值中的目录顺序也是非常重要的。
例:
which pwd //查找系统命令 pwd 指令文件的位置。
该命令可定位可执行文件、源代码文件、帮助文件在文件系统中的位置,其指令格式为:
- whereis [-bmsu] [BMS 目录名 -f] 文件名
-
- -b : 定位可执行文件。
- -m : 定位帮助文件。
- -s : 定位源代码文件。
- -u : 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其他文件。
-
- -B : 指定搜索可执行文件的路径。
- -M : 指定搜索帮助文件的路径。
- -S : 指定搜索源代码文件的路径。
这些文件的属性应属于原始代码、二进制文件或是帮助文件。whereis 程序还具有搜索可执行文件、源代码文件、帮助文件以外的其他文件的能力。whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数 -b)、man 说明文件 (参数 -m)和源代码文件 (参数 -s),如果省略参数,则返回所有信息。
例:
- whereis tomcat //查找 tomcat 软件包;若输出为 “tomcat:” 表示没有该软件包,无法找到。
-
- whereis whereis //查找 whereis 文件。
-
- whereis -b whereis //查找 whereis ,且只将二进制文件查找出来。
-
在系统特定目录下,该命令用来查找名字具有某种特征或其具有某种属性的文件,其指令格式为:
- find [path] -option [-print] [-exec -ok command] {} \;
-
- path : 指的是搜索范围,即指出要查找的目录,缺省为当前目录。例如用 “ . ” 或 “ ./ ” 来表示当前目录,用 “ / ” 来表示系统根目录。
- -print : 将查找到的文件输出到标准输出。
- -exec command {} \; : 将查找到的文件执行 command 操作,“ {} ” 和 “ \;” 之间有空格,“ \;” 的 “ ; ” 为半角分号。
- -ok : 和 -exec 相同,只不过在操作前要询问用户。
-
- -options : 指用于指明搜索条件的各种选项,常用的有以下选项:
- -name filename : 查找名为 filename 的文件。
- -perm : 按执行权限来查找。
- -user username : 按文件拥有者来查找。
- -group groupname : 按组来查找。
- -mtime -n +n n : 按文件更改时间来查找文件,-n 指 n 天以内,+n 指 n 天以前, n 指确切 n 天 。
- -atime -n +n n : 按文件访问时间来查找文件,-n 指 n 天以内,+n 指 n 天以前, n 指确切 n 天 。
- -ctime -n +n n : 按文件创建时间来查找文件,-n 指 n 天以内,+n 指 n 天以前, n 指确切 n 天 。
- -nogroup : 查无有效组群的文件,即文件的组群在 /etc/groups 中不存在。
- -nouser : 查无有效拥有者的文件,即文件的拥有者在 /etc/passwd 中不存在。
- -newer file1 !file2 : 查更改时间比 file1 新但比 file2 旧的文件。
- -type b/d/c/p/l/f : 查是否为块设备、目录、字符设备、管道、符号链接、普通文件。
- -size n[ckMG]: 查长度为 n 块 ( c 表示 Bytes 字节,k 表示kB , M 表示 MB ,G 表示 GB )的文件。
- -depth : 使查找在进入子目录前先行查找完本目录。
- -fstype : 查找位于某一类型文件系统的文件。
- -mount : 查文件时不跨越文件系统 mount 点,也就是仅查询指定分区。
- -follow : 如果遇到符号链接文件,就跟踪链接所指的文件。
- -cpio : 对匹配的文件使用 cpio 命令,将它们备份到磁带设备中。
- -prune : 忽略某个目录。
例:
- find -name april'*' # 在当前目录下查找以 april 开头的文件,使用通配符 “ * ” 时用半角单引号括起来。
-
- find -name '*'april'*' # 在当前目录下查找名字中包含 april 的文件。
-
- find /home -mtime -2 # 在 /home 下查最近两天内改动过的文件。
-
- find /opt/soft/test/ -perm 777 # 在 /opt/soft/test 目录中查找权限为 777 的文件。
-
- find . -type f -exec ls -l {} \ # 查当前目录下的所有普通文件,并在 -exec 选项中使用 ls -l 命令将它们列出。
-
- find /logs -type f mtime +5 -exec rm {} \ # 在 /logs 目录中查找更改时间在5日以内的普通文件并删除它们。
文件定位命令,用在搜寻符合条件的文档,搜索文件速度最快,并输出文件完整的路径,其指令格式为:
- locate [-elfqnrodhV] 样式
-
- -e : 将排除在寻找的范围之外。
- -l : 如果是 l ,则启动安全模式。在安全模式下,使用者不会看到权限无法看到的文档,这会使速度减慢,因为 locate 必须到实际的文档系统中取得档案的权限资料。
- -f : 将特定的文档系统排除在外。
- -q : 安静模式,不会显示任何错误信息。
- -n : 至多显示 n 个输出。
- -r : 使用正规运算式作寻找的条件。
- -o : 指定资料库的名称。
- -d : 指定资料库的路径。
- -h : 显示辅助信息。
- -V : 显示程式的版本信息。
locate 命令会去储存文档与目录名称的数据库内寻找合乎范本样式条件的文档或目录,可以使用特殊字元(如 “ * ” 或 “ ? ” 等)来指定范本样式,如指定范本样式为 kcpa*ner ,locate 会找出所有起始串为 kcpa 且结尾为 ner 的档案或目录,如名称为 kcpartner ;若目录名称为 kcpa_ner ,则会列出该目录下包括子目录在内的所有文档。
locate 指令和 find 指令找寻稳当的功能类似,但 locate 是透过 update 程序将硬盘中的所有文档和目录资料先建立一个索引数据库,在执行 locate 时直接找该索引,查询速度会较快。
例:
- locate pwd //查找和 pwd 相关的所有文件。
-
- locate /etc/sh //搜索 etc 目录下所有以 sh 开头的文件。
但在执行命令时可能出现以下错误:
locate inittab
可能会提示 “locate : can not stat () /var/lib/mlocate/mlocate.db' : No such file or directory ” ,原因是没有找到指定的数据库,此时我们需要使用 updatedb 命令升级数据库,需要说明只有 root 用户才有权限。
该命令用来进行文本查询,在指定文件中搜索特定的字符内容,并将含有这些字符的内容行输出,其指令格式为:
- grep text file # text 表示需要查找的文本, file 表示需要查找的文件。
-
- grep -n text file # 显示匹配行及行号
Linux 系统中链接文件分为硬链接和软链接。硬链接和软件界都是指向文件的一种方式,但两者有不同的地方,前边在 理解 inode 篇中已解释了关于软硬链接的概念,这里再解释一下:
1)、硬链接是创建一个指向 inode 的目录项,该目录项中只包含其所指向的 inode 的地址和文件名称。硬链接文件有防止误删除的功能。因为删除一个硬链接文件实际上是删除指向 inode 的目录项,并不删除文件的 inode 。当给一个文件创建了硬连接之后,删除文件时只会减少文件的链接数,当链接数为 0 时才会彻底删除该文件。软链接 (符号链接)类似 Windows 系统的快捷方式,是一个完整的文件,有自己的 inode和 block , block 的内容就是原文件的文件名,当原文件删除后,软链接就失效了,没有防止误删除的功能。
2)、删除软链接文件,对源文件和硬链接文件无任何影响;删除文件的硬链接文件,对源文件和软链接文件无任何影响。删除链接文件的源文件,对硬链接文件无影响,但会导致其软链接失效;同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
3)、文件的大小不一样。由于硬链接是指向原文件的 inode ,所以硬链接的文件大小和原文件大小是一致的。而软链接是新的文件,block 里是原文件的文件名,所以软链接文件通常很小,具体的大小取决于与原文件绝对路径的长度。
4)、在权限方面,硬链接文件的属性与原文件来自同一个 inode ,因此其权限与原文件完全相同,且通过硬链接不能定位原文件的实际位置,也不会显示原始文件的位置,这样有助于文件的安全。软链接文件只是指明了原始文件的位置,用户需要对原始文件有访问权限才可以使用。
5)、不可以针对目录创建硬链接,也不能跨分区创建硬链接,即硬链接与原文件必须在同一个分区内。软链接则无此两种限制。
创建软硬链接用到 ln 命令,其指令格式如下:
- ln [-fdinsvb] 源文件 链接文件
-
- -f : 链接时先将与目标文件同名的文件删除。
- -d : 允许系统管理员创建对目录的硬链接,默认不允许。
- -i : 在删除与目标文件同名的文件时先进行询问。
- -n : 在进行软链接时,将目标文件视为一般的文件。
- -s : 创建软链接,默认创建硬链接。
- -v : 在链接之前显示其文件。
- -b : 在创建链接时将可能覆盖或删除的文件进行备份。
例:
- ln file filenew //file 为原文件名,filenew 为硬链接文件名
-
- ls -s file filenew //file 为原文件名,filenew 为软链接文件名
命令替换是指将命令的标注输出作为值赋给某个变量,Bash Shell 中定义了两种命令替换格式,分别如下:
- Command2 `Command1` # ` 为 tab 上方的键,和 ~ 同一个键
-
- Command2 $(Command1)
都是表示将 Command1命令的输出作为 命令 Command2 的参数。例:
vi `find -name 1` # find -name 1 命令是查找当前目录下文件名为 1 的文件,查找后使用 vi 编辑器进行编辑。
需要说明一下的是,尽管 `` 和 $() 在命令替换上是等价的, 但 $() 形式的命令替换是可以嵌套的。
在 Linux 理念中,汇集许多小程序,每个程序都有特殊的专长,复杂的任务不是由大型软件完成,而是由组合的许多小程序共同完成。管道是一种机制,通常用于进程间的通信。同上面命令替换在效果上有些类似,它表现出来的形式将前面每一个进程的输出直接作为下一个进程的输入,管道命令以 “ | ” 作为界定符号,其指令格式为:
Command1 | Command2
含义是将 Command1 命令的输出作为 Command2 命令的输入。例:
- ls /etc | grep ab # ls /etc 命令表示查找 /etc 目录下的内容, grep 命令表示筛选,筛选出符合后面条件的内容。
-
- ls /etc | more 和 ls /etc 输出可以对比一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。