文件权限
意义
权限类型
1. r 可读
2. w 可写
3. x 可执行/切换陌路
4. - 无权限
通配符
* 匹配0个或多个字符串
?匹配1个字符
[abcd] 匹配abcd中间任意一个字符
[a-Z] 匹配a-Z范围里的任意一个字符
[!abc] 不匹配方括号里的任何一个字符 ;与[^abc]一致
帮助命令
man
语法
man [man options] [[section] page ...]...
man -k [apropos options] regexp ...
man -K [man options] [section] term ...
man -f [whats options] page ...
man -l [man option] file ...
man -w|-W [man options] page ...
参数
-f 显示给定关键字的简短描述信息
-k 根据关键词搜索帮助手册
-w 显示手册文件所在位置
快捷操作
空格键 下翻一页
回车键 下滚一行
j 下滚一行
k 上滚一行
b 回翻一页
f 下翻一页
q 退出
/word 搜索word关键词
案例
查看cp命令的帮助手册 man cp
查看sleep命令的简要信息 man -f sleep
查看第3个章节的sleep信息 man 3 sleep
查看passwd文件的详细介绍 man 5 passwd
查看ls命令的帮助手册文件所在位置 man -w ls
搜索disk相关的帮助手册 man -k disk
info
作用:阅读info 格式的文件
语法
info [OPTION]...[MENU-ITEM..]
参数
-w 显示info文档的物理位置
-f 指定要访问的info文件
-n 在首个浏览过info文件中指定节点
-O 跳转至命令行选项
常用操作
n 显示下一节点的页面内容
p 显示上一节点的页面内容
l 返回上一个访问节点的页面内容
空格键 向前滚动一页
退格键/del 向后滚动一页
b/e 一个节点内容的开始/结束
h 打开info教程
d 回到info的初始节点
回车键 跳转到链接文本
q 退出
案例
查看ls命令的info文档 info ls
显示ls命令info文档的物理位置 info -w ls
whatit
作用:查询一个命令执行什么功能并将查询结果打印到终端上
语法
whatis 命令
案例
查询sleep命令的功能
whatis sleep
touch 创建空文件与修改时间戳命令
作用:
- 改变已有文件的时间戳属性。(注意:在修改文件的时间属性的时候,用户必须是文件的属主,或拥有写文件的访问权限)
- 创建新的空文件
语法
touch [OPTION]...FILE...
参数
-a 改变文件的读取时间记录
-m 改变文件的修改时间记录
-r 使用参考文件的时间记录,与--file的效果一致
-c 不创建新文件
-d 使用指定字符串表示时间式
-t 设定文件的时间记录,格式与date命令相同
--no-create 不创建新文件
案例
- 创建一个空文件
touch file.txt
(前提:file.txt文件不存在)
- 创建多个空文件
touch file1.txt file2.txt file3.txt
touch file{1..3}.txt
- 修改已有文件的时间戳为当前系统时间(包括修改时间和访问时间)
touch file.txt
- 修改文件的access时间(文件的access时间指的是文件被访问或读取的时间)
touch -a file.txt
- 修改文件的modify时间(文件的modify时间指的是文件被修改的时间)
touch -m file.txt
- 强制避免创建新文件
touch -c nofile.txt
touch --no-create.nofile.txt
- 将访问和修改时间从一个文件复制到另一个文件(将ref_file.txt的访问和修改时间复制到file.txt)
touch file.txt -r ref_file.txt
- 修改文件时间为明天
touch -d "tomorrow" file.txt
- 修改文件时间为任意时间
touch -t 202403060000 file.txt
mkdir 目录创建命令
作用:创建目录
注意:默认状态下,如果要创建的目录已经存在,则提示已存在,而不会继续创建目录,新建的目录与它所在目录下的文件有重名也不行。
语法
mkdir [OPTION]...DIRECTORY
参数
-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-v 显示目录的创建过程
案例
- 在当前目录下创建一个名为
dir1
的子目录
mkdir dir1
- 创建多个目录
mkdir dir2 dir3 dir4
mkdir dir{5..7}
- 递归创建目录
mkdir -p dir7/dir8/dir9
- 在
dir1
目录下建立子目录dir10
,并且设置文件权限 700
mkdir -m 700 dir1/dir10
- 显示目录的创建过程
mkdir -v dir[11...13]
rmdir 删除空目录命令
作用:删除空目录
语法
rmdir [OPTION]...DIRECTORY
参数
-p 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
-v 显示命令的详细执行过程
案例
- 删除空目录
rmdir dir
- 递归删除多重目录
rmdir -p dir1/dir2/dir3
- 显示指令详细执行过程
rmdir -v dir
mv 移动或重命名命令
作用:
- 移动文件;
- 重命名文件
语法
mv [OPTION]...[-T] SOURCE DEST
mv [OPTION]...SOURCE...DIRECTORY
mv [OPTION]...-t DIRECTORY SOURCE...
参数
-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作
案例
- 将文件
file.txt
移动到目录dir
中
mv file.txt dir
- 将
file.txt
重命名为newfile.txt
mv file.txt newfile.txt
- 将目录
dir1
移动到目录dir2
中(前提是目录dir2
已存在,若不存在则改名)
mv dir1 dir2
- 将
file1.txt
改名为file2.txt
,如果file2.txt
已经存在,则询问是否覆盖
mv -i file1.txt file2.txt
- 将文件
file1.txt
改名为file2.txt
,如果file2.txt
已经存在,则直接覆盖
mv -f file1.txt file2.txt
- 文件被覆盖前做备份
mv -b file1.txt file2.txt
- 源文件比目标文件新时才执行更新
mv -u file1.txt file2.txt
- 移动当前文件夹下的所有文件到上一级目录
mv * ./
- 将当前目录的一个子目录里的文件移动到另一个子目录里
mv dir3/* dir2
cp 复制命令
作用:复制文件到目录
语法
cp [OPTION]...[-T] SOURCE DEST
cp [OPTION]...SOURCE...DIRECTORY
cp [OPTION]...-t DIRECTORY SOURCE...
参数
-f 若目标文件已存在,则会直接覆盖
-i 若目标文件已存在,则会询问是否覆盖
-a 通常在复制目录时使用,它保留链接,文件属性,并复制到目录下的所有内容
-r 递归复制文件和目录
-b 覆盖已存在的文件目标前将目标文件备份
-v 详细显示cp命令执行的操作过程
案例
- 复制文件
cp file1.txt file2.txt
- 复制目录
cp -r dir1 dir2
- 复制文件,若目标文件已存在,则询问是否覆盖
cp -i file1.txt file2.txt
- 复制文件,若目标文件已存在,则直接覆盖,不提示
cp -f file1.txt file2.txt
- 复制文件,若目标文件已存在,则先进行备份
cp -b file1.txt file2.txt
- 复制目录,并且保留源目录所有属性都一致
cp -a dir1 dir2
cd 目录操作
作用:切换目录
语法
cd [参数] 目录
几个特殊目录
~ 用户家目录
. 当前目录
.. 当前目录的上一级目录
/ 根目录
- 上一次所在的目录
相对路径与绝对路径
- 起始路径为
/
的称为绝对路径 - 起始路径不是为
/
的称为相对路径
案例
- 切换到
dir
目录
cd dir
- 切换到上两级目录
cd ../..
- 切换到家目录
cd ~
cd
- 切换到上一次所在的目录
cd -
目录操作
pwd
作用:显示当前路径
语法
pwd
案例
显示当前路径
pwd
ls
作用:显示目录信息
语法
ls [OPTION]...[FILE]...
参数
-a 显示所有文件及目录(包括以"."开头的隐藏文件)
-l 使用长格式列出文件及目录信息
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-h 以人类可读的格式显示数字大小
-A 同 -a,但不列出 .(当前目录)及 ..(父目录)
-S 根据文件大小排序
-R 递归列出所有子目录
-F 在列出的文件名称后加一符号;例如可执行档则加*,目录则加/
案例
- 列出当前目录所有文件(包括隐藏文件)
ls -a
- 列出当前目录文件的详细信息
ls -l
- 列出根目录 / 下所有文件
ls /
- 列出当前目录下所有文件和目录的详细信息(包括子目录内容)
ls -lR
- 列出当前目录下所有有
f
开头的文件的详细信息
ls -l f*
- 列出当前目录下所有文件,并根据修改时间倒序排列
ls -ltr
- 列出目前工作目录下所有文件及目录;目录于名称后加 / ,可执行档于名称后加*
ls -AF
- 列出当前目录详细信息并以可读大小显示文件大小
ls -lh
tree
作用:以树状图列出目录内容
语法
tree [参数]
参数
-a 显示所有文件和目录
-L 层级显示
-t 用文件和目录的更改时间排序
-r 用文件和目录的更改时间倒序排序
-f 在每个文件或目录之前,显示完整的相对路径名称
-d 显示目录名称而非内容
案例
- 显示当前目录下的文件和目录
tree
- 显示所有文件和目录
tree -a
- 只显示目录
tree -d
- 只显示n层目录(n为数字)
tree -L 2
- 显示权限信息
tree -p
- 用文件和目录的更改时间排序
tree -t
- 以相反次序排序
tree -r
- 显示完整的相对路径
tree -f
stat 显示文件状态信息命令
作用:显示文件或文件系统的详细信息
语法
stat [OPTION]...FILE...
参数
-L 支持符号链接
-f 显示文件系统的信息
-t 以简洁的方式输出
三种时间
- atime:access time 访问时间
读取文件(more/less/cat/tail)、修改时间(vim/nano)时改变 - mtime:modify time 修改时间
修改文件(vim/nano)时改变 - ctime:change time 状态改变时间
修改文件(vim/nano)、文件属性变化(chmod/chown)时改变
案例
- 查看文件file.txt的信息
stat file.txt
- 查看file.txt文件所在文件系统信息
stat -f file.txt
- 以简洁方式输出信息
stat -t file.txt
rename 批量文件重命名命令
作用:用字符串替换的方式批量改变文件名
语法
rename 's/old-name/new-name/' files
- 原字符串:将文件名需要替换的字符串;
- 目标字符串:将文件名中含有的原字符串替换成目标字符串;
- 文件:指定要改变文件名的文件列表
通配符
? 可替代单个字符
* 可替代多个字符
参数
-n 模拟运行,实际命令没进行重命名
-v 输出每步执行信息
-f 强制改写
案例
- 将myfile.txt改为myfile.doc
rename 's/.txt/.doc/' myfile.txt
- 模拟将file1.txt,file2.txt,file3.txt改为file01.txt,file02.txt,file03.txt
rename -n 's/file/file0/' myfile.txt
- 实际更改上一步,并输出执行过程信息
rename -v 's/file/file0/' myfile.txt
basename 提取文件或目录名命令
作用:提取文件路径名的文件名
语法
basename NAME [SUFFIX]
basename OPTIN...NAME...
参数
-a 支持处理多个文件
-s 删除指定后缀
案例
- 提取文件名
basename /etc/passwd
- 提取目录名(删除最后的/)
basename /usr/local/
- 提取多个输入
base -a /etc/passwd /usr/local/
- 删除指定后缀
basename /etc/sysctl.conf .conf
basename -s .conf /etc/sysctl.conf
dirname:提取路径目录部分命令
作用:去除文件名中的非目录部分
语法
dirname [OPTION] NAME...
案例
- 提取文件的路径
dirname /usr/bin/cat
- 提取目录的路径
dirname /home/xdn/commands
chattr_lsattr:修改_查看文件属性命令
作用:更改文件属性
语法
chattr [-RVf] +-=[aAcCdDeijsStTu] files
属性
A: 即Atime,告诉系统不要修改对这个文件的最后访问时间
S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份
D:检查压缩文件中的错误。
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
t:文件系统支持尾部合并(tail-merging)。
X:可以直接访问压缩文件的内容。
参数
-R:递归处理目录下的所有文件。
-v:设置文件或目录版本。
-V:显示指令执行过程。
+ : 开启文件或目录的该项属性。
- : 关闭文件或目录的该项属性。
= : 指定文件或目录的该项属性。
案例
- 防止某个关键文件被修改
chattr +i file.txt
- 解锁
chattr -i file.txt
- 只允许文件追加内容(对日志文件特别有用)
chattr +a file.txt
- 对一个目录中的所有文件添加权限
chattr -R +i dir
- 查看文件属性
lsattr file.txt
file:识别文件类型命令
作用:识别文件类型
语法
file [参数] 文件
参数
-b: 列出文件类型,不显示文件名称
-c:详细显示指令执行过程
-f:指定名称文件,显示多个文件类型信息
-L:直接显示符号连接所指向的文件类别
-m:指定魔法数字文件
-z:尝试去解读压缩文件的内容
-i:显示MIME的内容
案例
- 查看文件的类型
file file.txt
file dir
file /dev/sda
- 查看文件类型,但不显示文件名
file -b file.txt
- 显示MIME类别
file -i file.txt
- 查看某个符号链接文件(快捷方式)的类型
file /dev/cdrom
- 直接查看某个符号链接文件(快捷方式)所对应的目标文件的文件类型
file -L /dev/cdrom
md5sum:生成和校验文件的md5值命令
作用:生成和校验文件的md5值
语法
md5sum [OPTION] ... [FILE]...
参数
-b:以二进制模式读取文件
-t:以文本模式读入文件内容
-c:根据已生成的md5值,对现存文件进行校验
--status:校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断
案例
- 生成file.txt文件的md5值
md5sum file.txt
- 不同模式计算同一个文件的md5值
md5sum -b file.txt
md5sum -t file.txt
- 将生成md5值重定向到指定的文件
md5sum file.txt > file.md5
- md5校验
md5sum -c file.md5
- md5校验,不显示任何输出,用返回码表示成功与否(0表示成功,1表示否)
md5sum -c --status file.md5
echo $?
find:查找目录或文件命令
作用:搜索指定文件
语法
find [路径][参数][条件]
参数
-name name ,-iname name:文件名称符合name的文件。
-perm:匹配权限(mode为完全匹配,-mode为包含即可)。
-user:匹配所有者
-group:匹配所有组
-mtime -n +n : 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n:匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n:匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser:匹配无所有者的文件
-nogroup:匹配无所有者的文件
-newer f1 !f2:匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f:匹配文件类型(后面的字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size:匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune:忽略某个目录
-exec ......{}\:后面可跟用于进一步处理搜索结果的命令
案例
- 全盘搜索系统中所有以.conf结尾的文件
find / -name *.conf
- 在/etc目录中搜索所有大约1K大小的文件
find /etc -size +1k
- 在/home目录中搜索所有属于指定用户的文件
find /home -user xdn
- 搜索当前目录下所有的文件
find -type f
- 搜索当前目录下所有权限为664的文件,并列出来
find . -perm 664 -exec ls -l {} \;
- 列出当前工作目录中的所有文件、目录以及子文件信息
find .
- 在当前目录下搜索所有指定后缀的文件,后缀不需要大小写
find . -iname "*.txt"
- 在当前目录下搜素所有后缀不是.log的文件
find . ! -name "*.txt"
- 搜索当前工作目录中的所有7天内被修改过的文件,并删除
find . -mtime -7 -exec rm -i {} \;
which:搜索命令位置命令
作用:查找命令文件所在位置
语法
which [-a] filename ...
案例
- 查找文件所在位置
which bash
which ls
which fdisk
whereis:查找文件命令
作用:查找命令的二进制程序、源代码文件和man手册页等相关文件的路径
语法
whereis [options][-BMS directory... -f] name...
参数
-b:查找二进制程序或命令
-B:从指定目录下查找二进制程序或命令
-m:查找man手册文件
-M:从指定目录下查找man手册文件
-s:只查找源代码文件
-S:从指定目录下查找源代码文件
案例
- 查找ls命令的程序路径和man手册页位置
whereis ls
- 查找ls命令的二进制程序路径
whereis -b ls
- 查找ls命令的man手册页路径
whereis -m ls
locate:查找符合条件的文档命令
作用:快速查找文件或目录
语法
locate [参数] [文件]
参数
-i 忽略大小写
案例
- 查找系统中所有file.txt文件
locate file.txt
- 搜索路径中包含/etc/sh的文件
locate /etc/sh
- 查找和whereis相关的所有文件
locate whereis
- 查找/home/xdn/commands/locate/目录下所有以f开头的文件,不区分大小写
locate -i locate /f
chown:改变文件所属用户或组命令
作用:改变文件或目录的用户和用户组
语法
chown [参数] 所属主:所属组 文件
参数
-R:对目前目录下的所有文件与目录进行相同的变更
-c:显示所属信息变更信息
案例
- 改变file.txt文件的所属主与所属组
sudo chown alvin:alvin file.txt
- 只改变file.txt文件的所属主
sudo chown alvin file.txt
- 只改变file.txt文件的所属组
sudo chown :alvin file.txt
- 改变指定文件的所属主与所属组,并显示过程
sudo chown -c xdn:xdn file.txt
- 改变指定目录及其内所有子文件的所属主与所属组
sudo chown -R alvin:alvin dir
chgrp:改变文件或目录所属组
作用:更改文件用户组
语法
chgrp [参数][目录]
参数
-v:显示指令执行过程
-R:递归处理,将指定目录下的所有文件及子目录
--reference:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同
案例
- 改变文件的用户组
sudo chgrp alvin file.txt
- 改变文件的用户组,并显示命令执行过程
sudo chgrp -v alvin file.txt
- 根据参照文件改变文件的用户组
sudo chgrp --reference=reffile.txt file.txt
- 将dir及其子目录下的所有文件的用户组改为alvin
sudo -R alvin dir
chmod:改变用户对文件或目录的权限
作用:改变文件或目录权限(只有文件的属主和超级用户 root 才能执行此命令)
语法
chmod [OPTION]...MODE[.MODE]... FILE...
chmod [OPTION]... OCTAL_MODE FILE...
chmod [OPTION]...--reference=RFILE FILE...
格式
[ugoa][+-=][rwx]
对象
对象 | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其他用户 |
a | all | 所用用户,相当于ugo |
操作
| 操作 | 说明 |
| + | 为指定的用户类型增加权限|
| - | 去除指定用户类型的权限 |
| = | 设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
权限
| 权限 | 名字 | 说明 |
| r | 读 | 设置为可读权限 |
| w | 写 | 设置为可写权限 |
| x | 执行 | 设置为可执行权限 |
数字模式
!(/i/l/?n=23&i=blog/3149811/202405/3149811-20240516172813142-685156644.png)
参数
-R:对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
案例
- 将文件file.txt设置为所有人可读取
chmod a+r file.txt
- 将当前目录下所有文件及递归目录文件设置为所有人可读取
chmod -R a+r*
- 将file.txt设置为只有该文件拥有者才可以执行
chmod u+x file.txt
- 将file.txt设置为文件拥有者及其同组人员可写入,但其他人不可写入
chmod ug+w,o-w file.txt
- 将file.txt设置为所有人都可读可写可执行
chmod a+r,a+w,a+x file.txt
chmod 777 file.txt
- 将file.txt设置为文件拥有者可读可写可执行,此外的其他人可读可执行
chmod 755 file.txt
- 将file.txt设置为文件拥有者可读可写,此外其他人都没任何权限
chmod u=rw,go=file.txt
grep:文本搜索工具
作用:文本搜索工具
语法
grep [参数] 文件
参数
-i:忽略大小写
-c:只输出匹配行的数量
-l:只列出所有的匹配行,不列出具体的匹配行
-n:列出所有的匹配行,显示行号
-h:查询多文件时不显示文件名
-s:不显示不存在,没有匹配文本的错误嘻嘻
-v:显示不包含匹配文本的所有行
-w:匹配整词
-x:匹配整行
-r:递归搜索
-q:禁止输出任何结果,已退出状态表示搜索是否成功
-b:打印匹配行距文件头部的偏移量,以字节为单位
-o:与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-F:匹配固定字符串的内容
-E:支持扩展的正则表达式
案例
- 搜索某个文件中,包含某个关键词的内容
grep xdn /etc/passwd
- 搜索多个文件中,包含某个关键词的内容
grep xdn /etc/passwd /etc/shadow
- 搜索多个文件中,包含某个关键词的内容,不显示文件名称
grep -h xdn /etc/passwd /etc/shadow
- 递归搜索,不仅搜索指定目录,还搜索其内子目录内是否有关键词文件
grep -rl hello *
- 输出在某个文件中,包含某个关键词行的数量
grep -c root /etc/passwd /etc/shadow
- 忽略大小写
grep -i XDN /etc/passwd
- 在文件中查找要搜索的内容,并显示行号
grep -n xdn /etc/passwd
- 反向查找
grep -v xdn /etc/passwd
- 搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示
grep -l hello *
- 搜索某个文件中,精准匹配到某个关键词的内容
grep -x hello file1.txt
grep -x hello file3.txt
- 判断某个文件中,是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),方便在shell脚本中判断和调用
grep -q hello file1.txt
grep -q hello file2.txt