1. 文件处理命令
1.1 命令格式与目录处理
| 命令格式 | 命令 [-选项] [参数] | ls -alrtAFR /etc |
|---|---|---|
说明:1)个别命令使用不遵循此格式
2)当有多个选项时,可以写在一起
3)简化选项与完整选项,比如 -a ===--all
1.2 目录处理命令
1.2.1 ls—列出执行目录下的所有文件
| 名词 | 内容 |
|---|---|
| 命令名称 | ls |
| 命令英文原意 | list files |
| 命令所在路径 | /bin/ls |
| 执行权限 | 所有用户 |
| 功能描述 | 显示指定工作目录下的文件(列出目前工作目录所含之文件及子目录) |
语法
ls 选项[-ald] [文件或目录]
参数说明
- -l(long)长格式,显示文件类型、权限、硬链接的数目、文件拥有者、文件所在的组&action=edit&redlink=1)、大小、日期和文件名。
- -F 在不同类型的文件的文件名结尾追加一个字符以示区别。可执行文件后加”*”,目录后加”/“,管道文件后加”|”,套接字文件后加”=”,普通文件没有后缀。
- -a(all)显示所有文件,包括以 . 开头的文件名(默认不显示)。
- -A(all)显示所有文件,不包括以 .(自身目录)和 .. (父目录)。相关词条:Inode
- -R(recursive)迭代显示目录下所有的子目录。ls -R/会显示文件系统中的所有文件。
- -d(directory)显示目录本身的信息,而不是列出目录下的文件。
范例
列出根目录下的所有目录ls /

列出根目录下所有目录和文件并显示详细的文件类型与权限等信息
ls -alh /

◇ -rw-r—r—
- 文件类型(- 二进制文件 d 目录 l 软链接文件)
- rw- r— r—
u:所有者 g:所属组 o:其他人
r:读
w:写
x:执行
文件的类型与权限表示总共有十位。
比如:-rwxrwx---
解析:
第一位:- >> 文件类型(分为三类。-表示二进制文件,d表示目录,l表示软链接文件)
第2~第4:rwx >> 文件拥有者之权限
第5-第7:rwx >> 文件所属用户组之权限
第8~第10:--- >> 其他人之权限
r:读 w:写 x:执行
1.2.2 mkdir—创建新目录
| 名词 | 内容 |
|---|---|
| 命令名称 | mkdir |
| 命令英文原意 | make directory |
| 命令所在路径 | /bin/mkdir |
| 执行权限 | 所有用户 |
| 功能描述 | 创建新目录-p 递归创建 |
语法
mkdir 选项[-p] [需要创建的目录名称]
参数说明
-p()确保目录名称存在,不存在就创建一个。一般用在创建多级目录时使用。需要创建多级目录时前N个目录是不存在的,加上该参数就可以将前N个目录和最后一个目录全部创建成功
范例
在 /tmp 目录下创建一个 book 目录
mkdir /tmp/book

在 /tmp 目录下创建多级目录
mkdir -p /tmp/docment/doc /tmp/docment/ppt

1.2.3 cd—切换目录
| 名词 | 内容 |
|---|---|
| 命令名称 | cd) |
| 命令英文原意 | change directory |
| 命令所在路径 | shell内置命令 |
| 执行权限 | 所有用户 |
| 功能描述 | 切换到指定目录 |
语法
cd [要切换到指定目录名称]
参数说明
没有参数
范例
切换到opt目录
cd /opt

从当前目录回到上一级目录
cd ..

1.2.4 pwd—显示当前目录路径名称
| 名词 | 内容 |
|---|---|
| 命令名称 | pwd |
| 命令英文原意 | print working directory |
| 命令所在路径 | /bin/pwd |
| 执行权限 | 所有用户 |
| 功能描述 | 显示当前目录路径名称 |
语法
pwd
参数说明
没有参数
范例
显示当前目录路径名称
pwd

1.2.5 rmdir—删除空目录
| 名词 | 内容 |
|---|---|
| 命令名称 | rmdir |
| 命令英文原意 | remove directory |
| 命令所在路径 | /bin/rmdir |
| 执行权限 | 所有用户 |
| 功能描述 | 删除空目录 |
语法
rmdir 选项[-p] [要删除的目录名称]
参数说明
1.2.6 cp—复制文件或目录
| 名词 | 内容 |
|---|---|
| 命令名称 | cp |
| 命令英文原意 | copy |
| 命令所在路径 | /bin/cp |
| 执行权限 | 所有用户 |
| 功能描述 | 复制文件或目录 |
语法
cp 选项[-rp] [要复制的源文件或目录] [目标目录]
参数说明
-a(archive)通常在复制目录时使用,它保留链接、文件属性、并复制目录下的所有内容。其作用等同于-dpR参数组合。-d(no-dereference)当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。相当于Windows系统中的快捷方式。-f(force)强行复制文件或目录,不管目的文件或目录是否存在。就相当于覆盖。-i(interactive)与-f选项相反。在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答y时目标文件将被覆盖。-p(preserve)复制源文件的内容,并将源文件或目录的属性(包括所有者、所属组、权限和修改时间)也一并复制给目标文件或目录。-r(recursive)递归复制处理。如果要复制的源文件是一个目录,此时将复制该源目录下所有的子目录和文件。-l(link)不复制文件,只是对源文件建立硬链接。范例
复制文件,将/opt文件夹下的1.txt文件复制到/tmp/books/book-1/文件夹下cp /opt/1.txt /tmp/books/book-1/

复制目录,将/tmp/books文件夹复制到/opt文件夹中
cp -r /tmp/books /opt
注意事项
用户使用cp指令复制目录时,必须使用参数 -r 或者 -R 。
1.2.7 mv—剪切并移动文件、文件重命名
| 名词 | 内容 |
|---|---|
| 命令名称 | mv) |
| 命令英文原意 | move |
| 命令所在路径 | /bin/mv |
| 执行权限 | 所有用户 |
| 功能描述 | 剪切文件、文件重命名 |
语法
mv 选项[-b] [源文件或目录] [目标目录]
参数说明
-b(backup)剪切移动源文件到指定目标目录时,如果目标目录或文件存在,在执行覆盖前,会为要覆盖的目标目录或文件创建一个备份。-i()如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件。输入y表示直接覆盖,输入n表示取消该操作。-f()如果指定一定的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖目标目录或文件。-n()不要覆盖任何已存在的文件或目录。-u(update)当源文件比目标文件新或者目标文件不存在时,才选择移动操作。范例
将指定文件重命名mv /tmp/docment/book/zero.txt /tmp/docment/book/two.txt

将指定目录/tmp/docment/book移动到/tmp/docment/txt目录中。如果txt目标目录不存在,命令执行完成后会将book目录改为txt
mv /tmp/docment/book /tmp/docment/txt

在/tmp目录下,将/tmp/docment目录下的所有文件和目录移动到/tmp当前目录下
mv /tmp/docment/* .

1.2.8 rm—删除文件或目录
| 名词 | 内容 |
|---|---|
| 命令名称 | rm) |
| 命令英文原意 | remove |
| 命令所在路径 | /bin/rm |
| 执行权限 | 所有用户 |
| 功能描述 | 删除文件或目录 |
语法
rm 选项[-r] [文件或目录]
参数说明
-r(recursive)递归删除。删除指定目录及其目录中的所有子目录和文件。-f(force)强制删除。忽略不存在的文件,不提示确认。-i(interactive)交互。为每一个删除操作询问一次删除确认。范例
删除三个指定目录下的所有文件rm -r /tmp/docment /tmp/excel /tmp/txt
注意事项
文件或目录一旦通过 rm 命令删除,则无法恢复。在使用删除命令前,
请一定要先做好备份再删除。
请一定要先做好备份再删除。
请一定要先做好备份再删除。
重要的事情说三遍!!!!!
所以使用该命令时请务必小心谨慎。
1.3 文件处理命令
1.3.1 touch—创建空文件
| 名词 | 内容 |
|---|---|
| 命令名称 | touch) |
| 命令英文原意 | touch |
| 命令所在路径 | /bin/touch |
| 执行权限 | 所有用户 |
| 功能描述 | 创建新的空文件,也可以用于修改文件或目录的时间属性。 |
语法
touch 选项[-m] [要创建的新文件名 或 要修改属性的文件或目录]
参数说明
-a(access)更改指定文件或目录的访问时间。不会更改修改时间,除非也指定了-m标志。-c()如果文件不存在,则不要进行创建。-f(force)尝试强制touch命令运行,而不管文件有没有读和写权限。-m(modify)更改指定文件的修改时间。不会更改访问时间,除非也指定了-a标志。-r RefFile()使用由 RefFile 变量指定的文件的相应时间,而不用当前时间。Time 以 MMDDhhmm[YY] 的格式指定新时间戳记的日期和时间,其中: MM 指定一年的哪一月(从 01 到 12)。 DD 指定一月的哪一天(从 01 到 31)。 hh 指定一天中的哪一小时(从 00 到 23)。 mm 指定一小时的哪一分钟(从 00 到 59)。 YY 指定年份的后两位数字。如果 YY 变量没有被指定,缺省值为当前年份。
-t time()使用time(格式见下)更改访问、修改时间time的格式为[[cc]yy]MMDDhhmm[.ss],其中cc代表年份前两位,yy代表年份的后二位数字,MM代表月份,DD代表天数,hh代表小时,mm代表分钟,ss代表秒数。
范例
创建一个新的空文件,文件类型为TXT
touch file.txt

批量创建新的TXT文件
touch file{1..4}.txt

修改文件的access(访问)时间
touch -a file1.txt

1.3.2 cat—显示文件内容或连接追加多个文本文件
| 名词 | 内容 |
|---|---|
| 命令名称 | cat |
| 命令英文原意 | concatenate |
| 命令所在路径 | /bin/cat |
| 执行权限 | 所有用户 |
| 功能描述 | 显示文件内容,或者连接多个文本文件进行内容覆盖或内容追加 |
**cat**命令用于查看内容较少的纯文本文件。如果内容较大时,文本内容会在屏幕上快速闪动(滚屏)。这个时候查看较长文件内容时可以按住 **Ctrl+S** 键,停止滚屏;以及 **Ctrl+Q** 键可以恢复滚屏。但是查看大文件最佳的命令还是使用 **more** 命令。
语法
cat 选项[-AbeEnstTuv] [—help] [—version] [文件名]
参数说明
-A(show-all)显示所有内容。等价于-vET。-b(number-nonblank)显示行数(空行不编号)。-e()等价于-vE组合-E(show-ends)每行结束处显示 $ 符号-n(number)显示行数(空行也要编号)-s(squeeze-blank)不输出多行空行。即显示行数时多行空行算一个编号-t()等价于-vT组合-T(show-tabs)将tab字符显示为^|符号-v(show-nonprinting)使用^和M-符号,除了 LFD 和 TAB 之外范例
查看文件内容cat a.txt

查看文件内容,并显示行数编号
cat -n a.txt

查看文件内容,并添加行数编号后输出到另一个文件中
cat -n a.txt > filename.txt

清空文件内容(指定文件内容会覆盖掉目标文件内容)
cat /dev/null > /root/filename.txt

持续写入文件内容,碰到 EOF 符号结束并保存
将多个指定文件的内容追加到目标文件上。注意:追加和覆盖使用的符号不同。追加是双>>符号,覆盖是单>符号
1.3.3 tac—反向列示文件内容
| 名词 | 内容 |
|---|---|
| 命令名称 | tac |
| 命令英文原意 | |
| 命令所在路径 | /usr/bin/tac |
| 执行权限 | 所有用户 |
| 功能描述 | 显示文件内容,但是内容是从最后一行作为第一行反向显示的 |
语法
tac 选项[-brs] [--help] [--version] [文件]
参数说明
-b()在行前而非行位添加分隔标志-r(range)将分隔标志视作正则表达式来解析-s(string)使用指定字符串代替换行符作为分隔标志范例
反向列出/etc/issue文件的内容tac /etc/issue

1.3.4 more—以翻屏的形式显示文本文件内容
| 名词 | 内容 |
|---|---|
| 命令名称 | more) |
| 命令英文原意 | more |
| 命令所在路径 | /bin/more |
| 执行权限 | 所有用户 |
| 功能描述 | 分页显示文件内容 |
语法
more 选项[-dlfpcsu] [-num] [+/pattern] [+linenum] [文件]
参数说明
-num(number)指定屏幕每页显示的行数-d()提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声l()忽略换页符^L。没有此参数时,more遇到含有^L的行将会自动暂停显示-f()按原文件实际的行数计算,而不是自动换行的行数-p()先清除屏幕再显示文本文件的剩余内容-c()与-p相似,不滚动屏幕,先显示内容再清除旧的内容-s()多个空行压缩成一行显示-u()不显示下划线+/pattern()在每个文档显示前搜索指定的文字(pattern),然后从该字符串之后开始显示-
内部键盘指令
Space:空格键。显示文本的下一屏内容Enter:回车键。向下n行。需要定义,默认为一行\:斜线符。接着输入一个模式,可以在文本中寻找下一个相匹配的模式H:字母键。显示帮助屏B:字母键。显示上一屏的内容Q:字母键。退出more命令Ctrl + F、Space:向下滚动一屏Ctrl + B:返回上一屏=::输出当前行的行号:f:输出文件名和当前行的行号V:字母键。调用 vi编辑器!:调用Shell命令,并执行命令范例
显示文件/etc/services文件的内容,显示之前先清屏,附已显示的百分比
显示文件more -dc /etc/services
/etc/service文件的内容,每50行显示一次,在显示前先清屏
先清除屏幕,再以每屏10行的指定方式显示more -c -50 /etc/services
/etc/services文件内容
按页显示more -p -10 /etc/services
/etc/services文件的内容,如果文件中有多个空行,压缩多个空行合并为一个空行显示
从指定的第30行开始显示文件内容more -s /etc/services
more +30 /etc/services
1.3.5 less—分页显示文件内容
| 名词 | 内容 |
|---|---|
| 命令名称 | less) |
| 命令英文原意 | less |
| 命令所在路径 | /usr/bin/less |
| 执行权限 | 所有用户 |
| 功能描述 | 分页显示文件内容(可向上翻页) |
语法
less 选项[-befgimNoQsSx] [文件]
参数说明
-b |
设置缓冲区的大小 |
|---|---|
-e |
当文件显示结束后,自动离开 |
-f |
强迫打开特殊文件,例如外围设备代号、目录和二进制文件 |
-g |
只标志最后搜索的关键词 |
-i |
忽略搜索时的大小写 |
-m |
显示类似 more 命令的百分比 |
-N |
显示每行的行号 |
-o |
将 less 输出的内容再指定文件中保存起来 |
-Q |
不使用警告音 |
-s |
显示连续空行为一行 |
-S |
在单行显示较长的内容,而不是换行显示 |
-x |
将 TAB 字符显示为指定个数的空格字符 |
内部键盘指令
| 键盘按键 | 操作说明 | 键盘按键 | 操作说明 |
|---|---|---|---|
| b | 向后翻一页 | g 或 < | 第一行 |
| d | 向后翻半页 | G 或 > | 最后一行 |
| h | 显示帮助页面 | / |
向前搜索 |
| q | 退出 less 命令 |
? |
向后搜索,如同 / |
| u | 向前滚动半页 | n | 下一个符合的搜索结果 |
| y | 向前滚动一行 | N | 上一个符合搜索的结果 |
| Space | 滚动一页 | :n | 下一个文件 |
| Enter | 滚动一行 | :p | 下一个文件 |
| Home | 文件顶部 | v | 编辑内容 |
| End | 文件结尾 |
范例
查看文件并显示行号:
less -N /etc/yum.conf
ps 查看进程信息并通过 less 分页显示:
ps -ef | less
查看多个文件,并通过内部指定 :n 跳转下一个文件:
less /etc/yum.conf /etc/sysctl.conf /etc/vconsole.conf
当正在浏览一个文件时,也可以使用 :e 命令打开另一个文件:
[root@linuxcool ~]# less file1:e file2
1.3.6 head—显示文件前面几行
| 名词 | 内容 |
|---|---|
| 命令名称 | head |
| 命令英文原意 | head |
| 命令所在路径 | /usr/bin/head |
| 执行权限 | 所有用户 |
| 功能描述 | 显示文件开头内容 |
语法
head 选项[-ncvq] [文件]
参数说明
-n |
后面接数字,代表显示几行 |
|---|---|
-c |
指定显示头部内容的字符数 |
-v |
总是显示文件名的头信息 |
-q |
不显示文件名的头信息 |
范例
显示文件的开头10行内容:
head /etc/yum.conf
显示前3行文件内容:
head -n 3 /etc/yum.conf
显示文件名信息,并显示文件前8行
head -vn 8 /etc/yum.conf
显示文件前20个字符:
head -c 20 /etc/yum.conf
1.3.7 tail—显示文件尾部内容,与head正好相反
| 名词 | 内容 |
|---|---|
| 命令名称 | tail |
| 命令英文原意 | tail |
| 命令所在路径 | /usr/bin/tail |
| 执行权限 | 所有用户 |
| 功能描述 | 显示文件后面几行 |
语法
tail 选项[-fqvcn] [文件]
参数说明
-f |
循环读取 |
|---|---|
-q |
不显示处理信息 |
-v |
显示详细的处理信息 |
-c <数字> |
输出文件尾部的指定 N 个整数字节的内容 |
-n <行数> |
显示文件的尾部 N 行内容 |
--pid=<进程编号> |
与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
-q,--quiet,--silent |
从不输出给出文件名的首部信息 |
-s,--sleep-interval=S |
与-f合用,表示在每次反复的间隔休眠S秒 |
范例
显示文件file的最后10行:
tail /etc/services
显示文件file的内容,从第20行至文件末尾:
tail +20 /etc/services
显示文件file的最后10个字符:
tail -c 10 /etc/services
一直变化的文件总是显示后10行:
tail -f 10 /var/log/messages
显示帮助信息:
tail --help
1.4 链接命令
1.4.1 ln—为文件创建链接非常重要
| 名词 | 内容 |
|---|---|
| 命令名称 | ln) |
| 命令英文原意 | link |
| 命令所在路径 | /bin/ln |
| 执行权限 | 所有用户 |
| 功能描述 | 为某一个文件在另一个位置建立一个同步的链接。ln 可以创建两种类型的链接文件:1. 符号链接,也称软链接。是指向另一个不同路径文件的一个符号路径 2. 硬链接,这是一个存储了链接建立时它所指向文件的实际数据的文件副本 |
符号链接(软链接)与硬链接的区别:
| 符号链接 (symbolic link:也称软链接) | 硬链接 (hard link) | |
|---|---|---|
| 1 | 符号链接以路径的形式存在,类似于Windos操作系统中的快捷方式 | 硬链接以文本副本的形式存在,但不占用实际空间 |
| 2 | 符号链接可以跨文件系统 | 硬链接不可以跨文件系统 |
| 3 | 符号链接可以对一个不存在的文件名进行链接 | 硬链接不可以对不存在的文件名创建链接 |
| 4 | 符号链接可以对目录进行链接 | 硬链接不允许给目录创建硬链接 |
| 5 | 硬链接只有在同一个文件系统中才能创建成功 |
符号链接(软链接)与硬链接在 Linux 系统中的不同特征:
| 符号链接(软链接) |
1. 创建符号链接目标文件或目录后,使用 ls -l 查看符号链接时,文件权限为 **lrwxrwxrwx.** 。其中 l 开头表示该文件或目录为符号链接。
每个符号链接都是如此标识,但不代表该符号链接文件拥有读、写、执行权限。具体文件权限取决于源文件自身所拥有的权限
|
| —- | —- |
| |
2. 文件大小。符号链接类似快捷方式,所以符号链接的大小不代表源文件的大小
|
| |
3. /root/file.txt.soft -> /tmp/file.txt
箭头指向源文件 |
| |
4. 删除源文件后,符号链接的目标文件无法再访问
|
| 硬链接 |
1. 相当于 cp -p + 同步更新
|
| |
2. 可以通过 ls -i 硬链接文件 源文件 对比数据保存的 inode 节点索引号识别。硬链接目标文件和源文件两者拥有同样的 inode 索引号。两者指向着同一个存储着实际数据的块。相当于两者都是对某个块的引用。当删除源文件时,硬链接目标文件依然可以访问。
|
| |
3. 不能跨分区。就相当于不能从 /tmp 区的文件硬链接到 /boot 区。用Windows类比来解释,就相当于不能从 C盘 硬链接到 D盘。
|
| |
4. 不能针对目录使用
|
语法
ln [参数] [源文件或目录] [目标文件或目录]
参数说明
-b |
backup | 删除,覆盖以前建立的链接,并为被覆盖或删除的目标文件创建备份 |
|---|---|---|
-d |
此选项允许 root 用户建立目录的硬链接 |
|
-f |
强制创建链接,即使目标文件已经存在 | |
-n |
把指向目录的符号链接视为一个普通文件 | |
-i |
交互模式,若目标文件已经存在,则提示用户确认进行覆盖 | |
-s |
symbolic | 对源文件建立符号链接(软链接),而非硬链接 |
-v |
详细信息模式,输出指令的详细执行过程 |
范例
使用 ln -s 命令参数为 /tmp/file.txt 文件创建符号链接,即软链接,并使用 ls -l 命令来查看链接文件的详细信息:
ln -s /tmp/file.txt file.txt.soft

为源文件 /tmp/file.txt 创建硬链接 file.txt.hard :
ln /tmp/file.txt file.txt.hard

创建硬链接时,输出命令的详细执行过程:
ln -v /root/filename.txt ./filename_1.soft
使用 ln 命令的“-b”命令来创建目标文件的备份文件,并使用 ls 命令来查看:
[root@master ~]# ln -b /root/dir/file.txt ./file_1[root@master ~]# lsanaconda-ks.cfg file_1 file_1~
2. 权限管理命令
2.1 文件权限前置知识理解非常重要
2.1.1 用户身份权限、文件访问权限、文件属性解析必须掌握
- Linux/Unix 的身份权限分为三级:文件所有者(
Owner)、用户组(Group)、其它用户(Other Users)。 - 每种身份访问文件时又分为三类权限,分别为读取(
Read)、写入(Write)、执行(Execute)。

只有文件所有者和超级用户可以修改文件或者目录的权限。可以使用绝对模式(八进制数字模式),符号模式两种方式指定文件的权限范围。
- 每个文件的属性由左边第一部分的10个字符来确定(如下图)。

从左至右用 0-9 数字来表示。
第 0 位:确定文件类型。有
d、-、l、b、c几种分类,具体参考下面表格: | 文件类型—> |**d**:目录 | |**-**:文件 |**l**:链接文件 |**b**:存储设备文件 |**c**:外接设备文件 | | —- | —- | —- | —- | —- | —- | —- |第 1-3 位:确定该文件的所有者拥有该文件的权限。即读、写、执行三种权限。
- 第 4-6 位:确定所有者的同一组别的用户(用户组)拥有该文件的权限。
- 第 7-9 位:确定其它用户拥有该文件的权限。
其中,
第 1、4、7 位表示读权限。如果用 r 字符表示,则有读权限。如果用 - 字符表示,则没有读权限;
第 2、5、8 位表示写权限。如果用 w 字符表示,则有写权限。如果用 - 字符表示,则没有写权限;
第 3、6、9 位表示执行权限。如果用 x 字符表示,则有执行权限。如果用 - 字符表示,则没有执行权限。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
对于 root 用户来说,一般情况下,文件的权限对其不起作用。
2.1.2 八进制数字模式
chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
| # | 权限 | rwx | 二进制 |
|---|---|---|---|
| 7 | 读 + 写 + 执行 | rwx | 111 |
| 6 | 读 + 写 | rw- | 110 |
| 5 | 读 + 执行 | r-x | 101 |
| 4 | 只读 | r— | 100 |
| 3 | 写 + 执行 | -wx | 011 |
| 2 | 只写 | -w- | 010 |
| 1 | 只执行 | —x | 001 |
| 0 | 无 | —- | 000 |
例如, 765 将这样解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如
rwx,也就是4+2+1 ,应该是7。 - 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如
rw-,也就是4+2+0 ,应该是6。 - 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如
r-x,也就是4+0+1 ,应该是5。2.1.3 符号模式
使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和permission(权限),每个项目的设置可以用逗号隔开。 命令chmod将修改who指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在who的位置来说明,如who的符号模式表所示:
| who | 用户类型 | 说明 |
|---|---|---|
| u | user | 文件所有者 |
| g | group | 文件所有者所在用户组 |
| o | others | 所有其他用户 |
| a | all | 所有用户, 相当于 ugo |
operator 的符号模式表:
| Operator | 说明 |
|---|---|
| + | 为指定的用户类型增加权限 |
| - | 去除指定用户类型的权限 |
| = | 设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
permission 的符号模式表:
| 模式 | 名字 | 说明 |
|---|---|---|
| r | 读 | 设置为可读权限 |
| w | 写 | 设置为可写权限 |
| x | 执行权限 | 设置为可执行权限 |
| X | 特殊执行权限 | 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 |
| s | setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
| t | 粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |
例子:chmod u+x filename 在这里,u 的意思是 user 指用户本人;+ 的意思是增加权限;x 是指可执行文件
2.1.4 rwx对文件和目录的作用
2.1.4.1 rwx 权限对文件的作用
文件,是系统中用来存储数据的,包括普通的文本文件、数据库文件、二进制可执行文件,等等。不同的权限对文件的含义如下表所示。
| rwx 权限 | 对文件的作用 |
|---|---|
| 读权限(r) | 表示可读取此文件中的实际内容,例如,可以对文件执行 cat、more、less、head、tail 等文件查看命令。 |
| 写权限(w) | 表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行 vim、echo 等修改文件数据的命令。注意,无权限不赋予用户删除文件的权利,除非用户对文件的上级目录拥有写权限才可以。 |
| 执行权限(x) | 表示该文件具有被系统执行的权限。Window系统中查看一个文件是否为可执行文件,是通过扩展名(.exe、.bat 等),但在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的。也就是说,只要文件拥有 x 权限,则此文件就是可执行文件。但是,文件到底能够正确运行,还要看文件中的代码是否正确。 |
对于文件来说,执行权限是最高权限。给用户或群组设定权限时,是否赋予执行权限需要慎重考虑,否则会对系统安装造成严重影响。
2.1.4.2 rwx 权限对目录的作用
目录,主要用来记录文件名列表,不同的权限对目录的作用如下表所示。
| rwx 权限 | 对目录的作用 |
|---|---|
| 读权限(r) | 表示具有读取目录结构列表的权限,也就是说,可以看到目录中有哪些文件和子目录。一旦对目录拥有 r 权限,就可以在此目录下执行 ls 命令,查看目录中的内容。 |
| 写权限(w) | 对于目录来说,w 权限是最高权限。对目录拥有 w 权限,表示可以对目录做以下操作: - 在此目录中建立新的文件或子目录; - 删除已存在的文件和目录(无论子文件或子目录的权限是怎样的); - 对已存在的文件或目录做更名操作; - 移动此目录下的文件和目录的位置。 |
一旦对目录拥有 w 权限,就可以在目录下执行 touch、rm、cp、mv 等命令。 | | 执行权限(x) | 目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。 |
对目录来说,如果只赋予 r 权限,则此目录是无法使用的。很简单,只有 r 权限的目录,用户只能查看目录结构,根本无法进入目录(需要用 x 权限),更不用说使用了。
因此,对于目录来说,常用来设定目录的权限其实只有 0(—-)、5(r-x)、7(rwx)这 3 种。
2.2 文件权限命令
2.2.1 chmod—修改文件或目录权限重要
| 名词 | 内容 |
|---|---|
| 命令名称 | chmod |
| 命令英文原意 | change the permissions mode of a file |
| 命令所在路径 | /bin/chmod |
| 执行权限 | 所有用户 |
| 功能描述 | 改变文件或目录权限 |
语法
chmod 选项[-cfRv] [--help] [--version] [<权限范围>+/-/=<权限设置...>] [文件或目录...]chmod 选项[-cfRv] [--help] [--version] [数字代号] [文件或目录...]chmod 选项[-cfRv] [--help] [--reference=<参考文件或目录>] [--version] [文件或目录...]
参数说明
-c |
若该文件权限确实已经更改,才显示其更改动作 |
|---|---|
-f |
若该文件权限无法被更改也不显示错误信息 |
-v |
显示权限变更的详细资料 |
-R |
对目前目录下的所有文件与子目录进行相同的权限变更(以递归的方式逐个变更) |
范例
1. 符号模式设置
将 /tmp/file.txt 文件设置为所有人可执行
chmod a+x /tmp/file.txt

将当前目录下的所有文件与子目录设置为任何人都可以读取与写入
chmod -R a+r /testing
将当前目录设置为拥有者读、些、执行权限,用户组读、执行权限,其它用户读权限
chmod u=rwx,g=rx,o=r /testing/test.txt
2. 数字模式设置
将目录设置为全部人可读、可写、可执行
chmod 777 /tmp/file.txt
将目录设置为用户组可读、写、执行,用户组和其他用户只能读
chmod 744 /testing
3. 其他命令使用实例
| 命令 | 说明 |
|---|---|
| chmod a+r file | 给file的所有用户增加读权限 |
| chmod a-x file | 删除file的所有用户的执行权限 |
| chmod a+rw file | 给file的所有用户增加读写权限 |
| chmod +rwx file | 给file的所有用户增加读写执行权限 |
| chmod u=rw,go= file | 对file的所有者设置读写权限,清空该用户组和其他用户对file的所有权限(空格代表无权限) |
| chmod -R u+r,go-r docs | 对目录docs和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限 |
| chmod 664 file | 对file的所有者和用户组设置读写权限, 为其其他用户设置读权限 |
| chmod 0755 file | 相当于u=rwx (4+2+1),go=rx (4+1 & 4+1)。0 没有特殊模式。 |
| chmod 4755 file | 4设置了设置用户ID 位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。 |
| find path/ -type d -exec chmod a-x {} \; | 删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用‘-type f’匹配文件 |
| find path/ -type d -exec chmod a+x {} \; | 允许所有用户浏览或通过目录path/ |
注意事项严格注意
可执行(x)权限对文件和目录两者是有区别的。它们的区别在于,如果用户对某个目录具有(rwx)权限,那么即使该用户没有这个目录下的某个文件的权限,也依然可以删除这个文件。这是因为权限被继承。也可以认为是目录权限比文件权限范围域要大。
2.2.2 chown—修改文件或目录的拥有者和用户组重要
| 名词 | 内容 |
|---|---|
| 命令名称 | chown |
| 命令英文原意 | change file ownership |
| 命令所在路径 | /bin/chown |
| 执行权限 | 所有用户 |
| 功能描述 | 改变文件或目录的拥有者和用户组 |
语法
chown 选项[-cfhvR] 用户名[username]:[groupname]用户组名 [文件名]
参数
-c |
若该文件拥有者确实已经更改,才显示其更改动作 |
|---|---|
-f |
若该文件拥有者无法被更改也不显示错误信息 |
-h |
只对于链接(link)进行变更,而非该链接真正指向的文件 |
-v |
显示拥有者变更的详细资料 |
-R |
对目前目录下的所有文件与子目录进行相同的拥有者变更(以递归的方式逐个变更) |
范例
将/root/testing文件夹下的log.txt文件拥有者和用户组更改为dmtsai
chown dmtsai:dmtsai /root/testing/log.txt
显示文件拥有者修改时的具体变更信息
chown -c dmtsai /testing/a.txt
将/root/testing目录下的所有拥有者都改为master,用户组改为master
chown -R master:master /root/testing
2.2.3 chgrp—修改文件或目录的所属用户组重要
| 名词 | 内容 |
|---|---|
| 命令名称 | chgrp |
| 命令英文原意 | change file group ownership |
| 命令所在路径 | /bin/chgrp |
| 执行权限 | 所有用户 |
| 功能描述 | 改变文件或目录的用户组 |
语法
chgrp 选项[-cfhRv] [文件或目录]
参数
-c |
若该文件用户组确实已经更改,才显示其更改动作 |
|---|---|
-f |
若该文件用户组无法被更改也不显示错误信息 |
-h |
只对于链接(link)进行变更,而非该链接真正指向的文件 |
-v |
显示指令执行过程 |
-R |
对目前目录下的所有文件与子目录进行相同的用户组 变更(以递归的方式逐个变更) |
--reference |
把指定的目录或文件的用户组设置成同参考文件一样的用户组 |
范例
更改文件的用户组,将用户组变更为 dmtsai
chgrp -v dmtsai filename
将指定目录/root/testing的用户组更改为参考文件/tmp/test一样的用户组
chgrp --reference=/root/testing /tmp/test
将/tmp/test及其子目录下的所有文件的用户组更改为dmtsai
chgrp -R dmtsai /tmp/test
2.3 其它权限管理命令
2.3.1 umask—显示或设置文件的默认权限(掩码)
umask命令用来设定权限掩码(即默认权限)。权限掩码是由3个八进制的数字所组成,将现有的存储权限减掉权限掩码后,即可产生建立文件时的预设的权限。
在Linux系统中,任何新创建的文件默认都没有可执行权限(x)。
| 名词 | 内容 |
|---|---|
| 命令名称 | umask |
| 命令英文原意 | the user file-creation mask |
| 命令所在路径 | Shell内置命令 |
| 执行权限 | 所有用户 |
| 功能描述 | 显示文件的默认权限,或设置文件的默认权限 |
语法
umask 选项[-SP] [权限掩码]
参数
-S |
以文字的方式来表示权限掩码 |
|---|---|
-P |
输出的权限掩码可直接作为指令来执行 |
范例
使用umask查看当前权限掩码
# 以八进制的形式显示当前默认权限的掩码。root用户默认为0022umask# 以符号形式显示当前默认权限的掩码umask -S
0022是root用户默认的创建目录的权限。正确计算0022对应着哪些可读权限需要使用逻辑异或运算。 777 rwx rwx rwx 022 —- -w- -w- 异或结果: rwx r-x r-x 所以root用户默认的目录权限为 drwxr-xr-x。可以用
umask -S以符号输出的方式来比对。由于任何用户创建文件的权限都没有可执行权限,由此使用touch命令创建新文件之后的文件默认权限为lrw-r--r--。
使用umask设置用户创建文件时默认的文件权限,拥有者和用户组含有读、写、执行权限,其他用户只有读权限
umask u=rwx,g=rwx,o=r
