目录操作命令
切换工作目录和显示目录内容的命令
cd
格式:cd [目的目录]
说明:用于切换工作目录到目的目录,前提是用户拥有进入目的目录的权限。其中目的目录可以是绝对路径或相对路径,若目录名称省略,则切换至使用者的主目录
示例1:切换至/home/user目录
$ cd /home/user
示例2:切换至根目录与切换至家目录
$ cd /
$ cd ~
示例3:切换至上级目录
$ cd ..
pwd
格式:pwd
说明:该指令不带任何选项和参数,用于查看当前工作目录的完整路径
示例:
$ pwd
ls
格式:ls [选项]… [文件或目录]…
说明:用于列出目录的内容,包括文件和子目录的名称
选项 | 说明 |
---|---|
-a或–all | 列出目录下所有的文件和目录,包含隐藏文件 |
-A或–almost-all | 列出除“.”(当前目录)以及“…”(上级目录)外的任何的文件和目录 |
-b或–escape | 把文件名中不可输出的字符用反斜杠加字符编号的形式列出 |
-c | 输出文件的ctime(文件最后更改的时间),并根据ctime排序 |
-C | 分成多列显示文件和目录 |
-d或–dictionary | 将目录像文件一样显示,而不是显示其下的文件 |
-F或–classify | 加上文件类型的指示符号,其中“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“l”表示管道文件;“=”表示套接字 |
-l | 列出文件详细信息,具体如下表 |
示例1:显示/home/user/usr下的文件和目录的详细信息
$ ls -l /home/user/usr
示例2:显示/home/user/usr下的所有文件,包含隐藏文件
$ ls -a /home/user/usr
示例3:以多列形式显示目录/home/user/usr下的内容
$ ls -C /home/user/usr
示例4:显示目录/home/user/usr下的所有以test命名的文件
$ ls -a test.*
文件详细信息字段表
使用指令“ls -l”命令输出的信息分成7个字段(每段下划线算一段)列表,示例拆分后如下
drwx r-x r-x 2 zhao student 48 Sept 05 16:39 test
第 1 字段:表示文件类型及访问权限,由10个字符组成,第一字母表示文件类型,具体如下
-
- 该文件是普通文件
-
d 该文件是目录
-
c 该文件是字符设备文件
-
b 该文件是块设备文件
-
p 该文件是管道文件
-
l 该文件是符号链接文件
-
该文件是套接字
后面的9个字符表示文件的访问权限,将在“存取文件权限部分展开
第 2 字段:文件链接数字段。表示文件硬链接数或目录子目录数
第 3 字段:文件属主字段。表示文件所有者
第 4 字段:文件所属用户组字段。表示该文件所属的用户组
第 5 字段:文件大小字段。表示该文件的大小,以字节为单位
第 6 字段:最后修改时间字段。表示该文件最后修改时间
第 7 字段:文件名字段。表示该文件的文件名,如果是符号链接,”->“箭头符号后面跟一个它指向的文件
创建和删除目录命令
mkdir
格式:mkdir [选项]… 目录名
说明:用于创建由目录名命名的目录,同时设置该目录的权限。要求创建目录的用户在当前目录中具有读写权限,并且目录名不能是当前目录中已有的目录或文件名称
选项 | 说明 |
---|---|
-m或–mode=MODE | 对新建目录设置存取权限 |
-p或–parents | 若所建目录的上层目录不存在,则一并建立 |
示例1:在当前目录下建立子目录mktest,并且只有该目录主人有读写和执行权限
$ mkdir -m 700 mktest
示例2:在当前目录下建立子目录parentdir/mktest,如果parentdir没有,则一并建立
$ mkdir -p ./parentdir/mktest
rmdir
格式:rmdir [选项]… 目录名…
说明:用于从一个目录中删除一个或多个目录。删除目录时,必须对该目录的父目录具有写权限,目录被删除前应该是空目录
选项 | 说明 |
---|---|
-p或–parents | 删除指定目录后,若该目录的上层目录已变成空目录,则一并删除 |
示例:删除当前目录下名为test的目录
$ rmdir test
示例:删除当前目录下名为mktest的目录,若其上层目录变成空目录,则一并删除
$ rmdir -p mktest
文件操作命令
复制、删除和移动文件命令
cp
格式:cp [选项] 源文件或目录 目标文件或目录
说明:用于完成文件的复制
- 如果源是普通文件,该命令把源文件复制成指定的目标文件或复制到指定的目标目录中
- 如果源是目录,目标是一已存在的目录,该命令把源目录下的所有文件和子目录都复制到目标目录中
- 如果源是目录,目标不是一已存在的目录,出现错误信息
选项 | 说明 |
---|---|
-a或-archive | 等同于-dpR |
-d | 复制符号链接时,把目标文件或目录也建立为符号链接,并指向与源文件或目录链接的原始文件或目录 |
-f或–force | 强行复制文件或目录,不论目标文件或目录是否已存在 |
-i或–interactive | 覆盖目标文件前需要确认 |
-n或–no-clobber | 不覆盖已存在的目标文件 |
-p | 复制源文件或目录内容的同时也复制文件属性 |
-R,-r或-recursive | 递归复制目录,将源目录下所有文件及子目录都复制到目标位置 |
示例1:将当前目录下源文件samp1复制成目标文件samp2
$ cp samp1 samp2
示例2:将当前目标下源文件samp1和samp2复制到目录/home/user/usr下(如果目录不存在,提示错误信息)
$ cp samp1 samp2 /home/user/usr
示例3:将/home/user/usr目录及目录下所有文件及其子目录复制到/home/user/usr1
$ cp -r /home/user/usr /home/user/usr1
rm
格式:rm [选项] …文件或目录…
说明:用于删除文件或目录,删除目录需要加“-r”选项。对于链接文件,知识删除链接文件,原有文件保持不变
选项 | 说明 |
---|---|
-f或–force | 强制删除文件或目录 |
-i或–interactive | 删除文件或目录前提示用户确认 |
-r,-R或–recursive | 递归删除指定目录下及其下属各级子目录和相应的文件 |
示例1:删除当前目录下文件testf1、testf2
$ rm testf1 testf2
示例2:删除当前目录下文件testf,删除前提示用户确认
$ rm -i testf
示例3:删除目录/home/user/usr1及下属的各级子目录和相应的文件
$ rm -r /home/user/usr1
mv
格式:mv [选项] 源文件或目录 目标文件或目录
说明:用于移动文件或目录,也用于改变文件或目录的名称
选项 | 说明 |
---|---|
-i或–interactive | 覆盖文件前需要确认 |
-f或–force | 若目标文件或目录已存在,直接覆盖 |
-n或–no-clobber | 不覆盖已存在的文件 |
-u或–update | 移动或更改文件名时,若目标文件已存在,且文件日期比源文件新,则不覆盖目标文件 |
示例1:将当前目录下文件testf1改名为testnew
$ mv testf1 testnew
示例2:将当前目录下文件testf1和testf2移动到目录/home/user/usr下
$ mv testf1 testf2 /home/user/usr
示例3:将目录/home/user/usr1移动到目录/home/user/usr下
$ mv /home/user/usr1 /home/user/usr
显示文件命令
cat
格式:cat [选项] …[文件]…
说明:用于把多个文件连接后输出到标准输出或加“>文件名”输出到另一个文件中
选项 | 说明 |
---|---|
-b或–number-noblank | 从1开始对所有非空输出进行编号 |
-n或–number | 从1开始对所有输出行编号 |
-s或–squeeze-blank | 将连续两行以上的空白行合并成一行空白行 |
示例1:同时显示当前目录下testf1和testf2内容
$ cat testf1 testf1
示例2:将当前目录下testf1和testf2内容合并,并通过重定向符“>"输出到文件testf3中
$ cat testf1 testf1 >testf3
示例3:从键盘输入信息到当前目录下的文件inputfile中
$ cat > inputfile
more
格式:more [选项] [文件]
说明:用于显示文本文件的内容,一次显示一屏,满屏后停下来,但可通过如下键继续
- Space:默认显示文本的下一屏内容
- Enter:默认显示文本的下一行内容
- d键或Ctrl+D:向下显示文本半屏,默认为11行
- b键或Ctrl+B:默认显示文本的上一屏内容
- q或Q或Interrupt:退出more命令
选项 | 说明 |
---|---|
-num | 指定一个整数,表示一屏显示多少行 |
-d | 在每屏底部显示提示信息,包括当前显示的百分比,按键提示等 |
-c或-p | 不滚屏,在显示下一行之前先清屏 |
+num | 从行号num开始显示 |
+/pattern | 定义一字符串,在文件中查找该字符串,从该字符串后开始显示 |
示例1:从22行开始显示当前目录下testf文件的内容
$ more +22 testf
示例2:显示当前目录下testf文件的内容,每屏10行,每屏底部显示提示信息
$ more -d -10 testf
示例3:从当前目录下testf文件内容中查找字符串”Hello“,并从该字符串后显示且每屏显示五行
$ more -5 +/Hello
less
格式:less [选项] [文件]…
说明:与more类似,分屏显示文件内容。less命令允许向前(PageUp)或向后(PageDown)浏览文件。在less命令提示符下按q键退出
选项 | 说明 |
---|---|
-i或–ignore-case | 搜索时忽略大小写,除非搜索串中包含大写字母 |
-I或–IGNORE-CASE | 搜索时忽略大小写 |
-m或–long-prompt | 显示读取文件的百分比 |
-M或–LONG-PROMPT | 显示读取文件的百分比、行号及总行数 |
-N或–LINE-NUMBERS | 在每行前输出行号 |
-p pattern或–pattern=pattern | 定义一字符串,在文件中查找该字符串,从该字符串后开始显示 |
示例1:用less命令显示/etc/testf文件的内容,在每行前输出行号
$ less -N /etc/testf
示例2:用less命令从/etc/testf文件中查找字符串”Hello“,并从该字符串后显示
$ less -p Hello /etc/testf
head
格式:head [选项] …[文件]…
说明:用于查看一个文本文件的开头部分,行数由参数决值定,默认值是10
选项 | 说明 |
---|---|
-c或–bytes=num | 显示文件前面num个字节 |
-n或–lines=num | 显示文件前面num行,不指定此参数显示前10行 |
示例1:显示当前目录下testf文件前10个字节内容
$ head -c10 testf
示例2:显示当前目录下testf文件前5行内容
$ head -n5 testf
tail
格式:tail [选项] …[文件]…
说明:用于查看文本文件的末尾若干行,行数由参数决值定,默认值是10;若给定的文件不止一个,则在显示的每个文件前面加一个文件名标题
选项 | 说明 |
---|---|
-c或–bytes=num | 显示文件最后面num个字节 |
-n或–lines=num | 显示文件最后面num行,不指定此参数显示10行 |
示例1:显示当前目录下testf文件后10个字节内容
$ tail -c10 testf
示例2:显示当前目录下testf文件最后5行内容
$ tail -n5 testf
搜索、排序、及去掉重复内容命令
grep
格式:grep [选项] 查找模式 [文件…]
说明:用于在文本文件中查找指定模式的词或短语,并打印匹配的行。如果没有指定文件名,grep命令会搜索标准输入
选项 | 说明 |
---|---|
-b或–byte-offset | 在显示符合匹配字符串行前,标识该行第一个字符的位编号 |
-c或–count | 计算符合匹配字符串的行数 |
-E | 将查找模式解释成拓展的正则表达式,相当于egrep |
-F | 将查找模式解释成单纯的字符串,相当于fgrep |
-i或–ignore-case | 忽略字符大小写 |
-n或–line-number | 在显示包含匹配字符串的行之前,标示出该行的行号 |
-v | 反转查找,显示不包含匹配字符串的文本行 |
-V | 显示版本信息 |
-x或–line-regexp | 只显示全行都严格匹配的行 |
greb正则表达式元字符集
元字符 | 说明 | 示例 |
---|---|---|
^ | 行首定位,指定行的头部 | ‘^apple’匹配所有以apple开头的字符串 |
$ | 行尾定位,指定行的尾部 | ‘apple$’匹配所有以apple结尾的字符串 |
. | 匹配任意一个字符 | ‘app.e’匹配apple、appoe或其他 |
* | 匹配0个或多个前导字符 | NULL |
[] | 匹配[]中任意一个字符 | ‘app[lo]e’会匹配apple或appoe |
\< | 从匹配正则表达式的行开始 | NULL |
>\ | 到匹配正则表达式的行结束 | NULL |
x\{m,n} | m代表前导字符数量的下限,n代表上限 | NULL |
示例1:从当前目录下fruit文件中查找包含apple的行
$ grep apple fruit
示例2:从当前目录下fruit文件中查找包含apple的行,且不区分大小写
$ grep -i apple fruit
示例3:显示当前目录下fruit文件中所有以t结尾的行
$ grep t$ fruit
示例4:显示当前目录下fruit文件中所有包含至少有6个连续小写字符的字符串的行
$ grep '[a-z]\{6\}' fruit
sort
格式:sort [选项] …[文件]…
说明:用于对指定文件中所有的行排序,将结果显示在标准输出上。如不指定输入文件或使用”-“,表示排序的内容来自标准输入
选项 | 说明 |
---|---|
-m或–merge | 若给定文件已排好序,合并文件 |
-c或–check | 检查给定文件是否排序,未排序打印出错信息,以状态值1退出 |
-u或–unique | 对排序后相同的行只保留其中一行 |
-o 文件名 | 将排序输出写到输出文件中而不是标准输出 |
-d或-dictionary-order | 按字典顺序排序 |
-f或–ignore-case | 忽略字母大小写 |
-r或–reverse | 按逆序输出排序结果,默认排序输出时按升序 |
+pos1-pos2 | 指定一个或几个字段作为排序关键字,字段位置从pos1开始,到pos2为止(包含pos1,不含pos2),如不指定pos2,则关键字为从pos1到行尾。字段和字符的位置从0开始 |
示例1:将当前目录下fruits文件按逆序后输出到文件fruitsort中
$ sort -r -o fruitsort fruits
示例2:将当前目录下fruit文件按第一列和第二列排序
$ sort +1 -3 fruits
uniq
格式:uniq [选项]… [输入文件 [输出文件]]
说明:检查及删除文本文件中重复出现的行。该命令读入输入文件检查和删除相邻重复出现的行,加工后的结果写到输出文件中。如果输入文件用”-“表示,则从标准输入读取。
选项 | 说明 |
---|---|
-c或–count | 显示输出中,在每行行首加上本行在文件中出现的次数 |
-d或–repeated | 只显示文件中的各重复行 |
-u或–unique | 只显示文件中不重复的各行 |
示例1:去掉当前目录下testf文件中相邻的重复的行
$ uniq testf
示例2:去掉当前目录下testf文件中相邻的重复的行,并在行首显示该行在文件中出现的次数
$ uniq -c testf
示例3:去掉当前目录下testf文件中相邻的重复的行,并将结果输出到文件neat中
$ uniq testf neat
比较文件内容命令
comm
格式:comm [选项]… 文件1 文件2
说明:用于对两个已经排序好的文件进行比较,comm从文件1和文件2中读取正文进行比较,生成三行输出
- 在两个文件中都出现的行
- 仅在文件1中出现的行
- 仅在文件2中出现的行
选项 | 说明 |
---|---|
-123 | 选项1、2、3分别表示不显示common输出中的第一列、第二列和第三列 |
示例:比较当前目录下的samp1和samp2
先对两个文件排序
$ sort -o samp1 samp1
$ sort -o samp2 samp2
比较两个文件
$ comm samp1 samp2
diff
格式:diff [选项]… 文件列表
说明:用于比较文本文件,并找出它们的不同。diff命令功能比comm命令更强大,不要求文件预先排序。如果两个文件完全一样,该命令不显示任何输出。
选项 | 说明 |
---|---|
-b或–ignore-space-change | 忽略空格造成的不同 |
-B或–ignore-blank-lines | 忽略空行造成的不同 |
-i或–ignore-case | 忽略大小写的不同 |
-r或-recursive | 当比较的文件都是目录时,递归比较子目录中的文件 |
示例:比较当前目录下的samp1和samp2的差异
$ diff samp1 samp2
文件内容统计命令
wc
格式:wc [选项] …[文件]…
说明:用于统计给定文件中的字节数、字数、行数。其中字是由空格字符区分开的最大字符串。wc命令同时也给出所有指定文件的总统计数。如果没有给出文件名,则从标准输入读取
选项 | 说明 |
---|---|
-c或–bytes | 统计字节数 |
-m或–chars | 统计字符数 |
-l或–lines | 统计行数 |
-w或–words | 统计字数 |
示例1:统计当前目录下testf文件的行数、字数、字节数
$ wc -cwl testf
示例2:统计当前目录下testf1和testf2的字符数
$ wc -m testf1 testf2
查找文件命令
find
格式:find [路径名…] [表达式]
说明:用于查找符合条件的文件和目录。路径名是用空格隔开的要搜索文件的目录名清单,表达式包含要寻找的文件的匹配规范或说明。表达式是从左向右求值的,只要表达式中的测试结果为真,进行下一个测试。如果测试结果不符合,则当前文件的处理结束,检查下一个文件
表达式 | 说明 |
---|---|
-amin n | 查找系统中最后n分钟被访问过的文件或目录 |
-anewer<参考文件或目录> | 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录 |
-atime n | 查找系统中最后n*24小时被访问过的文件或目录 |
-cmin n | 查找系统最后n分钟被更改的文件或目录 |
-cnewer<参考文件或目录> | 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录 |
-ctime n | 查找系统中最后n*24小时被改变状态的文件 |
-depth | 从指定目录下最深层的子目录开始查找 |
-daystart | 从本日开始计算时间 |
-exec<执行指令> | 假设find指令的回传值为True,就执行该指令 |
-fstype<文件系统类型> | 只寻找该文件系统类型下的文件或目录 |
-gid<群组识别码> | 查找符合指定群组识别码的文件或目录 |
-group<群组名称> | 查找符合指定群组名的文件或目录 |
-inum<inode编号> | 查找符合指定的inode编号的文件或目录 |
-mmin n | 查找在n分钟内曾被更改过的文件或目录 |
-mtime n | 查找在n天内曾被更改过的文件或目录 |
-name<范本样式> | 指定字符串作为寻找文件或目录的范本样式 |
-path<范本样式> | 指定字符串作为寻找目录的范本样式 |
-perm<权限数值> | 查找符合指定的权限数值的文件或目录 |
假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有“./”字符串 | |
-prune | 不寻找字符串作为寻找文件或目录的范本样式 |
-size<文件大小> | 查找符合指定的文件大小的文件 |
-type<文件类型> | 只寻找符合指定的文件类型的文件。b-块设备文件;d-目录;c-字符设备文件;p-管道文件;l-符号链接文件;f-普通文件 |
-uid<用户识别码> | 查找符合指定的用户识别码的文件或目录 |
-user<拥有者名称> | 查找符合指定的拥有者名称的文件或目录 |
示例1:查找当前用户主目录下的所有文件
$ find ~ -print
示例2:查找当前用户主目录下最近3天内存取过的文件
$ find ~ atime 3 -print
示例3:查找当前目录下类型是目录的文件并排序
$ find . -type d |sort
示例4:查找当前目录下拓展名为md的文件并显示
$ find . -name "*.md" -print
示例5:查找当前目录下权限为755的文件
$ find . -perm 755 -print
示例6:查找当前目录下属主为stu的文件并显示
$ find . -user stu -print
文件的压缩和备份
bzip2
格式:bzip2 [选项] [要压缩的文件]
说明:用于压缩文件,压缩完后产生.bz2的压缩文件,并删除原始文件
选项 | 说明 |
---|---|
-c或–stdout | 将压缩或解压缩的结果送到标准输出 |
-d或–decompress | 执行解压缩 |
-f或–force | 压缩或解压缩时,若输出文件与现有文件同名,覆盖现有文件 |
-k或–keep | 在压缩或解压缩后,保留原始文件 |
示例1:压缩当前目录下的testf文件
$ bzip2 testf
示例2:解压缩当前目录下的testf.bz2,并保留原始文件
$ bzip2 -d -k testf.bz2
gzip
格式:gzip [选项] [文件…]
说明:用于压缩文件,压缩后产生.gz的压缩文件,并删除原始文件
选项 | 说明 |
---|---|
-c或–stdout或–to-stuout | 压缩后文件输出到标准输出设备,不改变原始文件 |
-d或–decompress或–uncompress | 执行解压缩 |
-f或–force | 强行压缩文件 |
-n或–no-name | 压缩文件时,不保存原来的文件名称及时间戳记 |
-N或–name | 压缩文件时,保存原来的文件名称及时间戳记 |
-r或–recursive | 递归处理,将指定目录下的所有文件及子目录一并处理 |
示例1:压缩当前目录下的testf文件
$ gzip testf
示例2:解压缩当前目录下的testf.gz
$ gzip -d testf.gz
示例3:压缩当前目录下tdir目录中的所有文件
$ gzip -r tdir
示例4:压缩当前目录下testf文件到samp.gz中
$ gzip -c testf > samp.gz
tar (tape achieve)
格式:tar [选项…] [文件或目录]
说明:用于建立、还原备份,可以加入、解开备份文件内的文件
选项 | 说明 |
---|---|
-A或–catenate | 新增tar文件到已存在的备份文件 |
-c或–create | 建立新的备份文件 |
-f<备份文件>或–file=<备份文件> | 指定备份文件 |
-t或–list | 列出备份文件的内容 |
-v或–verbose | 显示指令执行过程 |
-x或–extract或–get | 从备份文件中还原文件 |
-delete | 从备份文件中删除指定的文件 |
-r | 将文件追加到备份文件包里 |
-z | 通过gzip指令处理备份文件 |
-j | 通过bzip2指令处理备份文件 |
示例1:将目录下的bakf1、bakf2、bakf3备份到文件bak.tar中,并显示备份指令执行过程
$ tar -cvf bak.tar bakf1 bakf2 bakf3
示例2:将当前目录下的备份文件bak.tar还原
$ tar -xvf bak.tar
示例3:将当前目录下的文件bakf0备份到bak0.tar中,并新增bak0.tar到已存在的备份文件bak.tar中(可使用”tar -tvf *.tar“列出tar包内内容)
$ tar -cvf bak0.tar bakf0
$ tar -Avf bak.tar bak0.tar
示例3u:直接添加bak0到bak.tar中
$ tar -rvf bak.tar bak0
示例4:用bzip2命令将备份文件bak.tar压缩
$ bzip2 bak.tar
示例5:用gzip命令将备份文件bak.tar压缩
$ gzip bak.tar
示例6:在当前目录下,创建并压缩备份目录xxx为xxx.tar.bz2,
$ tar -jcvf xxx
示例7:在当前目录下,创建并压缩备份目录xxx为xxx.tar.gz
$ tar -zcvf xxx.tar.gz xxx
示例7r:在当前目录下,将xxx.tar.gz解压缩并还原
$ tar -xvf xxx.tar.gz
小结
- gzip只能压缩文件 , 不能压缩目录 , 而且不保留原文件。解压使用gzip –d或者 gunzip
- bzip2压缩文件,压缩文件后缀为.bz2;选项“-k”产生压缩文件后保留原文件。解压使用bzip2 –d或者 bunzip2
- zip压缩文件,压缩文件后缀为.zip;选项“-r”用来压缩目录。解压使用unzip
- 执行“tar -zcvf(-jcvf) [源文件]”;产生.gz(.bz2)文件
- 执行“tar -xvf(-jxvf/-zxvf) [*.gz(*.bz2)]”用以解包还原文件
改变文件或存取权限的命令
引子
存取权限是用来确定谁可以通过何种方式对文件和目录进行访问,Linux下规定3种访问文件和目录的方式
- 读®:对文件表示只允许指定用户读取该文件内容,禁止做任何更改操作;对目录表示可以列出存储在该目录下的文件
- 写(w):对文件表示允许指定用户打开并修改该文件;对目录表示允许从该目录中删除或添加新文件
- 执行(x):对文件表示允许指定用户执行该文件;对目录表示允许在该目录中进行查找,能用cd命令将工作目录改为该目录
对于”ls -l“显示的文件或目录详细信息的第1字段
示例:- rwx rwx —
第1个字符表示该文件为普通文件,第2至第4字符表示该文件的文件主具有的权限,示例中可读、可写、可执行或可查询;
第5至第7字符表示该文件组用户的权限,示例中可读、可写、可执行或可查询;
第8至第10字符表示其他用户对该文件的权限,示例中其他用户对此文件无操作权限
chmod
方式1:字符设定法
格式:chmod [who] [opt] [mode] 文件名或目录名…
说明:用于改变文件或目录的访问权限,其中
who表示对象,是以下字母中的一个或多个的组合
- u:表示文件的所有者
- g:表示同组用户
- o:表示其他用户
- a:表示所有用户
opt:表示操作
- +:添加某个权限
- -:取消某个权限
- =:赋予给定的权限,并取消原有权限
mode:表示权限,是以下字母一个或多个的组合
- r:可读
- w:可写
- x:可执行
示例1:为当前目录下test.txt文件的主人同组用户增加读写权限
$ chmod g+rw test.txt
示例2:将当前目录下test.txt文件的权限改变为文件主可以读和写,同组用户可以执行,其他用户无权访问
$ chmod u=rw,g=x test.txt
方式2:数字设定法
格式:chmod [mode] 文件名或目录名…
说明:将rwx看成二进制数,如果该位有权限,用1表示,该位没有权限,用0表示。例如,rwx r-x r-- 可以表示位111 101 100,再将其每三位数转换成一位八进制数,就是754。常见权限数字表示如下
权限 | 对应二进制 | 八进制 |
---|---|---|
rwx rw- rw- | 111 110 110 | 766 |
rw- r-- r– | 110 100 100 | 644 |
rwx r-x r-x | 111 101 101 | 755 |
r-- — — | 100 000 000 | 400 |
r-x r-- r– | 101 100 000 | 540 |
示例:将当前目录下test.txt文件的权限设为文件主可读写,同组用户可读写,其他用户只读
$ chmod 664 test.txt
改变用户组和文件主的命令
chgrp
格式:chgrp [选项]… 所属组 文件或目录…
说明:用于改变指定文件所属的用户组,其中所属组可以是用户组的ID,也可以是用户组的组名。文件时是以空格分开的要改变属组的文件列表,支持通配符。在Linux下一般只有超级用户才能改变该文件的属组。
选项 | 说明 |
---|---|
-R或–recursive | 递归式地改变指定目录及其下的所有子目录和文件的属组 |
示例1:将当前目录下文件test.txt的用户组改为teacher
$ chgrp teacher test.txt
示例2:将目录/home/user/usr及其子目录下的所有文件的用户组改为teacher
$ chgrp -R teacher /home/user/usr
chown
格式:chown [选项]… [用户][:[组]] 文件…
说明:用于将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。在Linux下一般只有超级用户才可以使用该命令。
选项 | 说明 |
---|---|
-R或–recursive | 递归式改变指定目录及其下的所有子目录和文件的拥有者 |
示例1:将当前目录下test.txt文件的所有者改为root
$ chown root test.txt
示例2:将目录/home/user/usr及其下所有文件和目录的所有者改为root
$ chown -R root /home/user/usr
链接文件的命令
ln
ln不带参数默认创建硬链接
硬链接文件有两个限制:
- 不允许给目录创建硬链接
- 只有在同一文件系统中的文件之间才能创建硬链接
格式:ln [选项]… 源文件或目录 目标文件或目录
说明:用于链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息
选项 | 说明 |
---|---|
-s | 对源文件建立软链接(符号链接),而非硬链接 |
示例1:为当前目录下的文件testf文件建立硬链接,名为testHARD
$ ln testf testfHARD
示例2:为当前目录下的文件testf文件建立软链接,名为testSYMBOL
$ ln -s testf testSYMBOL
区别:
- 硬链接的原文件和链接文件共用一个inode号,说明它们是同一个文件;而软链接的原文件和链接文件有不同的inode号,表明他们是两个不同的文件;
- 硬链接在文件属性上体现不出来,其表示文件类型的字符处为“-”(普通文件),因为在本质上硬链接文件和原文件是完全平等关系;而软链接明确标识是链接文件,其类型的字符处为“l”;
- 硬链接的链接数目要增加;软链接的链接数目不会增加;
- 硬链接文件大小跟原文件完全相同;软链接文件大小与原文件不同;
- 硬链接有自己的文件名;而软链接的文件名通常是指向其链接的原文件。