Linux文件与目录管理
目录的相关操作:
特殊的目录:
. :代表此层目录;
.. :代表上一层目录;
- :代表前一个工作目录;
~ :代表目前使用者身份所在的目录;
~account:代表account这个使用者的家目录(account是账号的名称)。
注意:在所有目录下面都会存在的两个目录,分别是 . 和 ..,即使是根目录,也存在上一层目录,只是上一层目录和当前目录都是同一目录。
常见的处理目录的命令:
cd(Change Directory):切换目录;
pwd(Print Working Directory):显示当前目录;
mkdir(Make Directory):建立一个新目录;
rmdir:删除一个空目录。
执行文件路径的变量:$PATH:
查看文件属性的命令ls的完整文件名为:bin/ls,但是在任何地方都能执行这个命令,就是因为环境变量PATH的帮助。
系统会依照PATH的设置去每个PATH定义的目录下查找文件名为ls的可执行文件。
如果有多个ls可执行文件,那么先查找到的同名命令先被执行。
注意:
-
-
- 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同;
- PATH是可以修改的;
- 使用绝对路径或相对路径指定某个命令的文件名来执行,会比查找PATH来的正确;
- 本目录(.)最好不要放到PATH中。
-
文件与目录管理:
1.文件与目录的查看:ls
ls [-aAdfFhilnrRSt] 文件名或目录名称
a:显示全部文件(包含隐藏文件);
A:同上,但不包括.与..这两个目录;
d:仅列出目录本身(不包含目录内的文件数据);
f:直接列出结果,而不进行排序(默认以文件名排序);
F:根据文件、目录等信息,在文件名后附加数据结构(/代表目录,*代表可执行文件,=代表socket文件,|代表FIFO文件);
h:将文件容量以人类易读的方式列出来;
i:列出inode号码;
l:详细信息显示,包含文件的属性与权限等数据;
n:列出UID与GID而非使用者与用户组的名称;
r:将排序结果反向输出;
R:连同子目录内容一起列出来;
S:以文件容量大小排序;
t:依时间排序;
ls [--color={never,auto,always}] 文件名或目录名称
never:不要依据文件特性给予颜色显示;
always:显示颜色;
auto:让系统自行依据设置来判断是否给予颜色;
ls [--full-time] 文件名或目录名称
以完整时间模式(年、月、日、时、分)输出;
2.文件与目录的复制、删除、移动:cp、rm、mv
cp(复制文件或目录)
cp [-adfilprsu] 源文件 目标文件
cp [options] source1 source2 source3 .... directory
a:相当于pdr的意思;
d:若源文件为链接文件的属性,则复制链接文件属性而非文件本身;
f:为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次;
i:若目标文件已经存在,在覆盖时会先询问操作的进行;
l:进行硬链接,而非复制文件本身;
p:保留属性复制,连同文件的属性一起复制过去(备份常用);
r:递归复制(目录的复制常用);(不加r目录则无法复制)
s:复制成为快捷方式链接文件;
u:目标文件比源文件旧才更新,或目标文件不存在的情况下才复制;
以上参数,注意区分a和p,l和s。
rm(删除文件或目录)
rm [-fir] 文件或目录
f:force意思,忽略不存在的文件,不会出现警告信息;
i:交互模式,在删除前会询问使用者是否操作;(为了怕文件被误删,默认都加入了-i这个选项)
r:递归删除,最常用于目录的删除(这是非常危险的选项);
mv(移动文件与目录,或重命名)
mv [-fiu] 源文件 目标文件
mv [options] source1,source2,source3 .... directory
f:force的意思,如果目标文件已经存在,不会询问直接覆盖;
i:若目标文件已经存在,就会询问是否覆盖;
u:若目标文件已经存在,且源文件比较新,才会更新;
3.获取路径的文件名与目录名称
basename:取得文件名;
dirname:取得目录名。
文件内容查看:
常用命令如下:
cat:串联的意思,由第一行开始显示文件内容;
tac:从最后一行开始显示;
nl:显示的时候,同时输出行号;
more:一页一页地显示文件内容;
less:与more类似,但可以往前翻页;
head:只看前面几行;
tail:只看后面几行;
od:以二进制的方式读取文件内容。
1.直接查看:
cat(concatenate):cat [-AbEnTv]
A:相当于vET的整合,可列出一些特殊字符而不是空白而已;(tab会以^I表示,换行符则是以$显示)
b:列出行号,仅针对非空白行;
E:将结尾的换行符$显示出来;
n:打印出行号,也包含空白行的行号;
T:将Tab按键以^I显示出来;
v:列出一些看不出来的字符。
tac(反向列示):就是将cat反着写,所以功能也是相反的;
nl(添加行号打印):nl [-bnw] 文件
b a:不论是否为空行,也同样列出行号;
b t:空的那一行不要列出行号;
n ln:行号在屏幕的最左方显示;
n rn:行号在自己栏位的最右方显示,且不加0;
n rz:行号在自己栏位的最右方显示,空位自动补0;
w:行号栏位占用的字节数;
2.翻页查看:
more(一页一页翻动);
空格键:向下翻一页;
回车键:向下翻一行;
/字符串:向下查找字符串这个关键词;
:f:立刻显示出文件名以及目录显示的行数;
q:立刻离开more,不再显示该文件内容;
b或ctrl+b:往回翻页,只对文件有用;
less(一页一页翻动):可以往前往后翻看文件;(前面所学的man就是调用less来显示说明文件内容)
空格键:向下翻一页;
pagedown:向下翻页;
pageup:向上翻页;
/字符串:向下查找字符串这个关键词;
?字符串:向上查找字符串这个关键词;
n:重复前一个查找;
N:反向的重复前一个查找;
g:前进到这个数据的第一行;
G:前进到这个数据的最后一行;
q:离开less这个程序;
3.数据截取:
head(取出前面几行):head [-n number] 文件
n:后面接数字,代表显示几行。(如果是负数,代表列出前面所有行数,但不包括结尾指定数字的行)
tail(取出后面几行):tail [-n number] 文件
n:后面接数字,代表显示几行。
f:表示持续刷新显示后面所接文件中的内容,直到按下crtl+c才结束。
举例:只想要显示第51行至第100行的内容。
思路:先用head截取前100行,再用tail截取这100行的后50行。
注意:前后两个命令使用 | 符号连接,这个符号叫做管道,意思是前面的命令所输出的信息,通过管道交由后续的命令继续使用。
格式如:head -n 100 文件名 | tail -n 50
4.非纯文本文件od:读取非纯文本,比如二进制文件和数据文件;
od [-t TYPE] 文件
a:利用默认的字符输出;
c:使用ASCII字符来输出;
d[size]:利用十进制来输出,每个整数占用size字节;
f[size]:利用浮点数值来输出;
o[size]:利用八进制来输出;
x[size]:利用十六进制来输出;
5.修改文件时间或创建新文件touch:
修改时间(mtime):当该文件的内容数据变更时,就会更新这个时间;(内容数据指的是文件的内容,而不是文件的属性或权限)
状态时间(ctime):当该文件的状态改变时,就会更新这个时间;(比如权限与属性被更改了)
读取时间(atime):当该文件的内容被读取时,就会更新这个时间;(比如我们使用cat命令去读取一个文件时)
注意:在默认情况下,ls命令显示的是该文件的mtime,也就是这个文件的内容上次被修改的时间。
创建新文件:touch [-acdmt] 文件
a:仅自定义access time;
c:仅修改文件的时间,若该文件不存在则不建立新文件;
d:后面可接自定义的日期而不目前的日期;
m:仅修改mtime;
t:后面可接自定义的时间而不用目前的时间;
文件默认权限与隐藏权限:
文件默认权限:umask,umask的数字指的是默认值需要减掉的权限(与权限有关的是后三位数字)。
1.直接输入umask,可以查看数字类型的权限设置值;
2.输入umask后,加入-S这个选项,会以符号类型的方式来显示权限
注:新建文件默认没有x权限,只有rw权限,故默认权限值为666;
新建目录默认所有权限均开放,故默认权限值为777。
故上面根目录的权限值022代表了,user没有拿掉任何权限,group和other被拿掉了w(值为2)这个权限。
那么用户:
建立文件时:666-022=644
建立目录时:777-022=755
注意:其实直接使用数字来进行减法有时可能会出错,比如umask为003,那么666-003=663,这就是个错误的结果。
(正确结果应该为664,因为3代表了2和1两个权限,实际上原本的默认权限中就没有1,就不用再减1了)
文件隐藏权限:在系统安全上面非常的重要。
chattr(配置文件隐藏属性):只能在ext2、ext3、ext4的Linux传统文件系统上完整生效。(xfs仅支持部分参数)
格式:chattr [+-=] [ASacdistu] 文件或目录名称
+-=:增加、删除、设置参数;
A:存取时间atime不会被修改;
S:进行文件修改时,修改会同步写入到磁盘中;
a:这个文件只能增加数据,而不能删除和修改;(故只有root才能设置此属性)
c:自动将此文件压缩,读取的时候再自动解压缩;
d:可使之不会被dump备份;
i:这个文件不能被删除、改名、设置链接,也无法写入或新增数据;(故只有root才能设置此属性)
lsattr(显示文件隐藏属性):
格式:lsattr [-adR] 文件或目录
a:将隐藏的文件属性也显示出来;
d:仅列出目录本身的属性而非目录内的文件名;
R:连同子目录的数据也一并列出来。
* 使用chattr设置后,可以使用lsattr来查看隐藏的属性。
命令与文件的查找:
脚本文件(命令)的查找
which(查找执行文件):根据PATH这个环境变量所规范的路径,去查找执行文件的文件名。
格式:which [-a] command
a:将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称。
文件的查找
whereis:在一些特定的目录中查找文件,想知道在哪些目录中进行查找,可输入whereis -l。
格式:whereis [-bmsu] 文件或目录名
b:只找binary(二进制)格式的文件;
m:只找在说明文件manual路径下的文件;
s:只找source源文件;
u:查找不在上述三个项目当中的其他特殊文件。
locate/updatedb:输入文件的部分名称就能得到结果,限制是只在已建立的数据库/var/lib/mlocate/中查找数据。
但是,数据库的建立默认是在每天执行一次更新,如果你建立起的文件是在更新前查找,就会查找不到。
此时,需要使用updatedb来手动更新数据库。
格式:locate [-ir] keyword
find:查找整个硬盘,故速度较慢。
格式:find [PATH] [option] [action]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~