Linux 文件系统

实验环境:

  • Linux 5.19.13-arch1-1

  • konsole 22.08.2

1. 文件系统结构

Linux 的文件系统是一颗倒着的树,从/开始。或许可以使用 tree 命令来看一下这颗树

# 如果出现 command not found 就是 tree 这个软件包还没有被安装
# ArchLinux 安装 tree
sudo pacman -S tree
# 常规Linux安装tree
sudo apt-get install tree
# 或
sudo yum -y install tree

# tree 的常规使用, 只显示两个层级,层级过多显得过于繁杂
tree / -L 2

# 看看在根下有什么
tree / -L 1
### 显示信息
/
├── bin -> usr/bin
├── boot
├── dev
├── efi
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib
├── lost+found
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/bin
├── srv
├── swapfile
├── sys
├── tmp
├── usr
└── var
  • 注意,Linux系统的文件系统大同小异,以上的列表是在本地实验机上获取的,可能会与你正在使用的系统文件结构有差异

  • Linux 中一切皆为文件,在 Linux 中能运行的只有两种文件,一是脚本文件,即 shell脚本、perl脚本、python脚本等;第二种是二进制程序文件

目录 作用
/ 根目录,所有目录的起点
/bin 包含系统启动和运行所必须的二进制程序。一般内部命令的二进制程序都会存放在这里,这些命令即使在文件系统没有被挂载时仍可以使用
/sbin 这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留,因为这里通常存放 删除、格式化工具的命令
/lib 包含核心系统程序所需的库文件。这些文件与 Windows 中的动态链接库相似,作用类似于 Windows 里的 DLL 文件;几乎所有的应用程序都需要用到这些共享库;类似的还有lib32、lib64、libx32
/usr /usr 目录可能是最大的一个目录。它包含普通用户所需要的所有程序和文件。如果说 /bin 和 /lib 是系统级的,那 /usr/bin 和 /usr/lib 就是低用户级的,用户使用包管理器安装的软件会存放在 /usr/bin 和 /usr/sbin 中
/usr/bin 用户级的程序目录,存放这些程序的 二进制文件
/usr/sbin 类似于 /sbin,这里的命令对系统有一定的“危险性”
/usr/lib 包含由/usr/bin 目录中的程序所用的共享库,通常为二进制文件
/usr/share 包含许多由/usr/bin 目录中的程序使用的共享数据。 其中包括像默认的配置文件,图标,桌面背景,音频文件等等
/usr/local /usr/local 下的层次结构是模仿 /usr 下的层次结构,用户可以在这里编译软件,由源码编译的程序会存放(安装)在 /usr/local/bin 目录下,程序所使用的库文件存放在 /usr/local/lib 中。但安装在这里的程序并不会自动更新
/usr/local/bin
/usr/local/lib
目录 作用
/boot 存放 Linux 启动时的一些核心文件,包括 Linux内核(vmlinuz)、开机设置相关文件(存储在 grub 中的 字体设置、主题、系统设置等),但请不要直接修改这里的文件
/efi 这个目录一般位于 /boot 下,存放系统的默认引导程序,提供了一种在安全启动(Secure Boot)开启的状态下使用的方法
/lost+found 当部分恢复一个损坏的文件系统时,文件系统会自救,将文件备份在这个路径下。除非文件系统真正的损坏了,否则这个目录就是个空目录
/dev Linux中一切都是文件,硬件设备也是,它们会以文件的形式在这个目录下,设备的信息以二进制形式存储在文件里。/dev 下每个文件的作用可以看一下这篇文章
/etc etc,Etcetera,用来存放所有的系统层面的的配置文件。包含一系列的shell脚本,系统启动时会启动相应的系统服务。在/etc/crontab, 定义自动运行的任务。 /etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。/etc/passwd,包含用户帐号列表。
/root (超级用户)系统管理员的家目录
/home 当在系统中创建一个用户的时候,默认为新用户创建一个独属于该用户的家目录,避免不同用户之间相互干扰
/mnt mount;设备的可移除挂载点,可用于临时挂载设备,但现在基本不再使用,转而使用 /run/media
/run 临时文件系统,储存系统启动以来的信息,当系统重启时,这个目录下的文件应该被删除或清除,不建议对该目录进行操作;Arch挂载硬盘时,会挂载在/run/media 下而不是 /mnt
/proc Processes; 一个虚拟的文件系统,存储当前内核运行状态的一系列文件,存储在内存里,这些文件是可读的,可以从这里窥视内核是怎么监管系统的
/swap 虚拟交换分区,真实内存不足时使用硬盘空间作为内存,部分系统或许会将它命名为 /swapfiles
/srv 系统启动时,存放服务启动之后需要提取的数据
/var 除了/tmp 和 /home 目录之外,相对来说,目前我们看到的目录是静态的,这是说, 它们的内容不会改变。/var 目录是可能需要改动的文件存储的地方。各种数据库,假脱机文件, 用户邮件等等,都在这里
/opt 这个目录是为了按安装不属于系统的软件包(第三方软件或任何外部软件)而保留的,和 /usr/local 非常相似,可以将软件包的源代码放在这里,然后编译软件,但在这里,并没有 /opt/bin 目录和 /opt/lib 目录,所编译的软件只会创建一个属于该软件的文件夹,其二进制文件和库文件都放在这个文件夹里。当你觉得不再需要这些软件的时候,可以直接删除这个目录下的(所有)文件
/tmp temporary;用于存储由各种程序创建的临时文件的地方。一些配置,导致系统每次 重新启动时,都会清空这个目录

2. 操作目录

Linux 中一个路径表示的是存放文件的位置,路径有相对路径和绝对了路径。相对路径是以当前工作目录为参照,链接到目标文件资源的路径。绝对路径是以根为参照,链接到目标文件资源的路径。例如,以 /usr/local 为例,假设当前工作目录为 /usr ,则链接到 local 目录的绝对路径是 /usr/local,相对路径是 local

显示当前工作目录的路径:pwd

改变当前工作目录:cd

查看当前路径下所有文件:ls

创建目录:mkdir

删除目录:rmdir

移动目录 | 修改目录名:mv

1. pwd
# 一般我们称当前在文件系统中的位置为工作目录
# 全称 ”print working directory“,⽤于显⽰当前⼯作⽬录的路径,即显⽰所在位置的绝对路径
pwd

2. cd
# ”change directory“,⽤于更改当前所处的⼯作⽬录,
# 路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转⾄当前使⽤者的家⽬录
cd /usr  # 相对路径和绝对路径想必都了解了,略
cd ..    # 返回上一级目录,也可以返回上两级 cd ../..

3. ls
# “list”,显⽰指定⼯作⽬录下的⽂件及属性信息
ls 
ls -a  # 显示所有文件及目录,包括隐藏文件
ls -l  # 使用长格式详细列出文件及目录的详细信息
ls -t  # 根据最后的修改时间排序
ls -S  # 根据文件大小排序
ls -x  # 按文件扩展名排序
ls -R  # 递归列出所有子目录
ls -d  # 查看目录的信息,而不是里面子文件的信息

ls -l  # 会显示出文件/目录的详细信息
### 显示信息,注意`lrwxrwxrwx`
lrwxrwxrwx   1 root root    7 Dec 7 10:41 /usr/lib

ls -l显示出来的 lrwxrwxrwx是文件类型和用户权限,是第9小节的文件权限管理的重要前置内容

位置 简介
第一个字符 表示文件类型;'-'表示普通目录;'d'为目录;'l'为符号链接;'b'为块设备文件;'c'为字符设备文件
第2~4个字符 权限,分别为读(r)、写(w)、执行(x),这个位置表示的是文件所有者对文件的权限,r、w、x 对应数字则为 4、2、1
第5~7个字符 表示同组用户的权限,字符同义
第8~10个字符 表示其他用户的权限,字符同义

权限除了'r' 'w' 'x' 外,还有:

's':当文件被执行时,把该文件的UID或GID赋予执行进程的UID或GID

't':设置标志位,即留在内存,不被换出。如果文件为目录,则目录中的文件只能被文件所有者或root用户删除。如果是可执行文件,则在执行后,指向其征文段的指针仍留在内存,方便再次执行。

'-':没有设置权限

4. mkdir
# “make directories”,⽤于创建⽬录⽂件
# 语法格式
mkdir [参数] ⽬录
###
mkdir -p /tmp/d1/d1.1/ # 递归创建多级⽬录(原 d1 ⽬录不存在)
mkdir -m 700 dir2 # 建⽴⽬录的同时设置⽬录的权限

5. rmdir
#  “remove directory”,⽤于删除空⽬录⽂件,不带参数的情况下只能删除空⽬录
# 语法格式
rmdir [参数] ⽬录
###
rmdir -p /home/d1 # ⽤递归的⽅式删除指定的⽬录路径中的所有⽗级⽬录,⾮空则报错

6. mv
# “move”,⽤于对⽂件或目录进⾏剪切和重命名
# 可以理解为 “Ctrl+x“ && ”Ctrl+v“
# 改命令可以对 文件 和 目录 起作用
# 语法格式:
mv [参数] 源⽂件 ⽬标⽂件
###
mv 源⽂件 ⽬标⽂件 # 若路径没有改变,可以理解为重命名操作v
mv -i 源⽂件 ⽬标⽂件 # 若存在同名⽂件,则向⽤⼾询问是否覆盖
mv -f 源⽂件 ⽬标⽂件 # 覆盖已有⽂件时,不进⾏任何提⽰

3. 操作文件

复制文件:cp

创建文件:touch

删除文件:rm

移动文件 | 修改文件名:mv

Linux 中一切都是文件,目录也是一份文件,只是目录是一份只读文件

cp、rm、mv 对 文件 有效果

1. cp
# copy,⽤于将⼀个或多个⽂件或⽬录复制到指定位置
# 语法格式
cp [参数] 源⽂件 ⽬标⽂件
###
cp -f # 若⽬标⽂件已存在,直接覆盖,不询问
cp -i # 若⽬标⽂件已存在,覆盖前询问
cp -p # 保留源⽂件⽬录的所有属性,包括权限和其它杂七杂⼋的属性
cp -r # 递归复制⽂件和⽬录cp -a 源文件或目录 目标文件或目录

2. touch
# 用于创建空文件与修改时间戳
# 语法格式:
touch [参数] 文件

3. rm
# remove,⽤于删除⽂件或⽬录,⼀次可以删除多个⽂件
# 这个命令很危险,总有狗头人打着清理内存,给电脑加速的借⼝说 rm -rf /* 可以让电脑
# 的速度更快,这个命令如果使用 root 权限完全运⾏,电脑系统瞬间消失
# 语法格式
rm [参数] ⽂件(file or directory)
###
rm -r filename # 递归删除
rm -f filename # 强制删除,不会进⾏⼆次询问
rm -rf /tmp/testDocu/* # '*'作为通配符,删除/tmp/testDocu下所有文件

4. mv
# “move”,⽤于对⽂件或目录进⾏剪切和重命名
# 可以理解为 “Ctrl+x“ && ”Ctrl+v“
# 改命令可以对 文件 和 目录 起作用
# 语法格式:
mv [参数] 源⽂件 ⽬标⽂件
###
mv 源⽂件 ⽬标⽂件 # 若路径没有改变,可以理解为重命名操作v
mv -i 源⽂件 ⽬标⽂件 # 若存在同名⽂件,则向⽤⼾询问是否覆盖
mv -f 源⽂件 ⽬标⽂件 # 覆盖已有⽂件时,不进⾏任何提⽰

4. 查看文件

截取文件全部内容:cat、more、less(tac)

截取文件部分内容:head、tail

查看文件隐藏属性: lsattr

更改文件隐藏属性:chattr

查看文件进程信息:lsof

Linux系统中的一切都是文件,那么使用lsof命令查看进程打开的文件,又或是查看文件的进程信息,都能够很好的帮助用户了解相关服务的运行状态,是一个不错的系统监视工具

1. cat
# 全称 “concatenate”,⽤于查看⽂件内容,并将⽂件内容直接打印在终端
# 基本格式
cat [参数] ⽂件
###
cat -n filename # 显⽰⾏数(空⾏也编号)
cat -s filename # 显⽰⾏数(多个空⾏算⼀个编号)
cat -b filename # 显⽰⾏数(空⾏不编号)

2. more
# ⽤于分⻚显⽰⽂本⽂件内容。如果⽂本⽂件中的内容较多较⻓,使⽤cat命令读取后则很难看清,
# 这时使⽤more命令进⾏分⻚查看就更加合适了,可以把⽂本内容⼀⻚⼀⻚的显⽰在终端界⾯上,
# ⽤⼾每按⼀次回⻋即向下⼀⾏,每按⼀次空格即向下⼀⻚,直⾄看完为⽌
# 基本格式
more [参数] ⽂件
###
more -f filename # 计算实际的⾏数,⽽⾮⾃动换⾏的⾏数
more -s filename # 多个空⾏压缩成⼀⾏显⽰(不要在查看代码的时候使⽤这个选项)
more -u filename # 禁⽌下划线
more +num filename # 从第 num ⾏开始显⽰
more +/pattern filename # 在每个⽂档显⽰前搜寻该字(pattern),然后从该字串之后开始显⽰

3. less
# 和 more 命令类似,但 more 命令只能从前向后浏览文件内容
# 而 less 命令则不仅能从前向后(PageDown键),还可以从后向前(PageUp键)浏览
# 基本格式
less [参数] ⽂件
###
less -e filename # 当⽂件显⽰结束后⾃动退出
less -i filename # 忽略搜索时的⼤⼩写
less -m filename # 显⽰阅读进度百分⽐
less -N filename # 显⽰每⾏的⾏号
less -s filename # 显⽰连续空⾏为⼀⾏
less -S filename # 在单⾏显⽰较⻓的内容,⽽不换⾏显⽰
less -X filename # 将TAB字符显⽰为指定个数的空格字符

# 关于 cat、more、less:
#     当截取全部内容时,三个命令的格式大体相同,但一般建议使用`less`,
#     因为less可以前后翻页
4. head
# ⽤于截取⽂件开头的内容,默认为前10⾏
# 语法格式:
head [参数] ⽂件
###
head -n <数字> filename # 定义显⽰⾏数
head -c <数字> filename # 指定显⽰头部内容的字符数
head -v filename # 总是显⽰⽂件名的头信息

5. tail
# ⽤于截取⽂件尾部内容,默认为后10⾏
# 语法格式:
tail [参数] ⽂件
### 上⾯ head 能⽤的选项 tail 都能⽤
tail -f filename # 持续显⽰⽂件最新追加的内容(这个选项感觉好玩⼀点)

# -n,默认截取文件前十行或后十行

5. 编辑文件

编辑单个文件:vim

在这部分要熟悉一个在Linux里很流行的程序,vivim

vim是vi的进阶版,但差别在哪也没查,一直在用 vim

Vim 教程_w3cschool 这个应该是比较详细的信息,以下写的只是常用的

这是除了重定向外唯一的在命令行修改文件内容的方式(大概)

  • 命令模式:使用命令进入后就是,此时是只读状态

  • 输入模式:命令模式下安'a'、'i'、'o'进入输入模式,可从键盘编辑文档

  • 底线模式:命令模式下输入':',然后可以对修改后的文件进行保存或退出

批量编辑文本文件:sed

文本和数据进行处理的编程语言:awk

1. vim fileName    # 使用后进入相应的文件
### 命令模式下,可以使用一些自带的命令,最常用的或许是 dd
# dd,删除当前行
# 5dd,删除当前行及其之后的 5 行,数字可更改
### 命令模式下,点击'a'进入 输入模式
### 输入模式下点击'Ecs' 退回命令模式
### 命令模式下使用 ':wq' 保存退出
# w , 将修改写入文件
# q ,退出 vim
# 有时候忘记用sudo编辑需要权限的文件,修改不能保存,不能正常退出
# ":wq",强制退出

2. sed

3. awk

6. 文件内容处理

文件内容排序:sort

文本内容统计:wc

比较两个文件的差异:comm、diff、cmp

合并两个文件:paste

字符转换工具:tr

去除文件中的重复行:uniq

连接两个文件:join

分割文件:split

修补文件:patch

筛选特定文本内容:grep、fgrep、egrep

按列提取文件内容:cut

作用:以指定的查找模式 搜索、匹配 参数内容

  • grep 一次只能搜索一个,可扩展正则表达式,一般使用这个命令而不是其他两个

  • egrep 可扩展正则表达式

  • fgrep 检索固定字符串

  • 这里的命令大多都需要结合重定向符才能对文件内容产生实际更改
1. sort [选项] 文件名
# 会将文件的内容按行排序,然后打印到终端

2. wc
# “Word count”,⽤于统计⽂件的字节数、单词数、⾏数等信息,
# 并将统计结果输出到终端界⾯
# 语法格式:
wc [参数] ⽂件
###
wc -w filename # 统计单词数
wc -c filename # 统计字节数
wc -l filename # 统计⾏数
wc -m filename # 统计字符数

3. comm
# 对两个已经排好序的文件进行比较
# 若没有任何选项则会把结果分成3行显示:第一行显示仅在第一个文件出现过的列
# 第二行显示仅在第二个文件出现过的列,第三行显示两个文件的交集
# 语法格式
comm [参数] 文件1 文件2
###
comm -1 file1 file2
comm -2 file1 file2
comm -3 file1 file2

4. diff
# different,逐行比较两个文件
# 参数主要用于忽略某些条件
# 语法格式
diff [参数] 文件1 文件2
### 
diff -a file1 file2      # 逐行比较文本文件
diff -b file1 file2      # 不检查空格字符的不同
diff -x file1 file2      # 不比较选项中所制定的文件或目录
diff -y file1 file2      # 以并列的方式先死后文件的异同之处
diff --brief file1 file2 # 仅判断两个文件是否不同
diff --left-colunm file1 file2  # 若连个文件某一行内容相同,仅在左侧边栏显示该行

5. cmp
# 用于比较两个任意类型的文件,若两个文件相同则默认不输出任何信息,
# 若两个文件不同,则会输出第一个不同之处的字符和列数编号,结果输出到标准输出
# 语法格式:
cmp [参数] [文件] [文件]
### 
cmp file1 file2
cmp -I file1 file2  # 标示出所有不一样的地方

6. paste
# 把每个文件以列对列的方式,一列列地加以合并
# 语法格式: 
paste [参数] [文件1] [文件2]
### 
[guyan@DrangonBoat ~]$ cat file_1
 aaa 
 bbb
[guyan@DrangonBoat ~]$ cat file_2
 AAA
 BBB
[guyan@DrangonBoat ~]$ paste file_1 file_2
 aaa     AAA
 bbb    BBB
# 选项 -d 设置新的分隔符,默认为空格或 tab 键
paste -d: file1 file2
# 选项 -s 会先将文件粘贴成一行,然后再合并
[guyan@DrangonBoat ~]$ paste -s file_1 file_2
aaa    bbb
AAA    BBB

7. tr
# transform,⼀款批量字符转换、压缩、删除的⽂本⼯具,
# 但仅能从标准输⼊中读取⽂本内容,需要与管道符或输⼊重定向操作符搭配使⽤
# 处理的内容可以是 字符串 或 文件
# 语法格式:
tr [参数] 字符串1 字符串2
###
# 将指定⽂件中的所有出现在字符串[a-z]中的字符都转换成⼤写字⺟
# 然后输出内容到终端界⾯
tr [a-z] [A-Z] < fileName
# 删除字符串 [0-9] 中出现的所有字符,然后输出内容到终端界⾯
tr -d [0-9] < fileName 
# -s 用于删除所有重复出现的字符序列
# 将指定文件中的多个相邻空行去重后输出内容到终端界面
tr -s "[\n]" < fileName 

8. uniq
# unique,用于去除文件中的重复内容行
# 注意,这个命令实际上并没有对文本进行操作,可以尝试与重定向符组合使用
# 语法格式:
uniq [参数] 文件
### 
uniq -c fileName  # 打印每行在文本中重复出现的次数
uniq -d fileName  #     每个重复纪录只出现一次
uniq -u fileName  # 只显示没有重复的纪录

9. join
# 将两个具有相同域的纪录给挑选出来,再将这些纪录所有的域放到一行
# 语法格式:
join [参数] [文件1] [文件2]
### 
[guyan@DrangonBoat ~]$ cat file.db 
 A li:20:men:anhui
 B wang:21:women:jiangsu
 C zhang:22:men:anhui
[guyan@DrangonBoat ~]$ cat file_hobby.db 
 A li:Song
 B wang:shopping
[guyan@DrangonBoat ~]$ join -t: file.db file_hobby.db 
 A li:20:men:anhui:Song
 B wang:21:women:jiangsu:shopping
# 选项
-a1或-a2    可以理解为数据库的左右连接
-i            忽略大小写
-o            设置结果显示的格式
-t            改变域的分隔符
-v1或-v2    不显示共同域的纪录之外,-v1显示第一个文件没有共同域的纪录,-v2显示第二个文件中没有共同域的纪录
-1或-2       -1用来设置文件1连接的域,-2用来设置文件2连接的域

10. split
# 将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件
# 语法格式:
split [参数] [切割文件][文件名]
### 选项
-b    指定每多少字节切成一个小文件
-C    与参数”-b”相似,但是在切 割时将尽量维持每行的完整性

11. patch
# 让用户利用设置修补文件的方式,修改,更新原始文件
# 语法格式:
patch [参数]
# https://www.linuxcool.com/patch

12. grep
# “global search regular expression and print out the line”
# ⽤于全⾯搜索的正则表达式,并将结果输出
# grep 命令执⾏时,会先取得⽂件内容和要检索的关键字,
# 如果这⼀份⽂件的某⼀⾏有字符串与关键字相匹配,就将这⼀⾏打印到终端上
# 直到⽐对完所有⽂件中的所有内容
# 语法格式
grep [参数] ⽂件
###
# 在当前⽬录中,查找后缀有 file 字样的⽂件中包含 test 字符串的⽂件,并打印出该字符串的⾏
grep test *file
# ls 获取了当前⽬录下的所有⽂件或⽬录名,在准备打印到终端的时候被抑制
# 管道符将抑制的信息(ls)传递给 grep,grep 会查找和 string 相匹配的字符串
# 如果有相匹配的字符串,就打印这⼀⾏,如果没有就继续查找下⼀⾏
ls | grep string

13. cut
# 按列提取文件内容,grep 命令仅能对关键词按行进行提取过滤
# 而cut命令则是可以根据指定的关键词信息,针对特定的列内容进行过滤
# 语法格式:
cut [参数] 文件
### 
-c    以字符为单位进行分割
-b    以字节为单位进行分割
-d    自定义分隔符,默认为制表符”TAB”
-f    显示指定字段的内容
-n    取消分割多字节字符

7. 查找文件

查找文件或目录:find、locate

查找二进制文件:which、whereis

1. find
# 根据给定的路径和条件查找相关⽂件或⽬录,可以使⽤的参数很多,并且⽀持正则表达式
# 结合管道符后能够实现更加复杂的功能
# 语法格式
find [路径] [参数]
### 以下所有查找命令都在 / (全局)下进⾏
find / -name string # 匹配名称
find / -perm string # 匹配权限(mode为完全匹配,-mode为包含即可)
find / -user username # 匹配所有者
find / -group gname # 匹配所有组
find / -size +50M # 匹配⽂件的⼤⼩,‘+’表⽰查找超过50M的⽂件,‘-’表⽰...
find / -prune ⽬录 [其它选项] # 忽略某个⽬录
find / -exec rm -rf {} \; # 后⾯可跟⽤于进⼀步处理搜索结果的命令
### 复杂实例
# 全盘搜索系统中所有后缀为.mp4的⽂件,并删除所有查找到的⽂件
# {} 表⽰所有匹配项的集合,也可以使⽤ grep 进⼀步筛选
find / -name *.mp4 -exec
rm -rf {} \;

2. locate
# ⽤于快速查找⽂件或⽬录,不同于 find 的全局搜索, locate 命令基于数据⽂件
# /var/lib/locatedb
# 语法格式:
locate [参数] ⽂件

3. which
# ⽤于查找命令⽂件,能够快速搜索⼆进制程序所对应的位置。
# 不关心程序的源代码和帮助文件,只关注命令本身所在的路径
# 语法格式
which [参数] ⽂件
### emmmmm,不⽤管参数了,直接接命令就可以
which ls
### 打印信息
/usr/bin/ls

4. whereis
# 和 which 类似,但会定位 二进制程序、源代码文件 和 man 手册页等相关文件路径
# whereis 速度很快,其在 Linux 创建的一个包含本地所有文件信息的数据库中查找
# 这个数据库每天通过⾃动执⾏updatedb命令更新⼀次,搜索最近新增文件可能查找不到
#语法格式
whereis [参数] [命令名]
###
whereis ls
whereis -b ls  # 查找二进制程序或命令
whereis -m ls  # 查找 man 手册文件
whereis -s ls  # 查找源代码文件

8. 文件链接

创建文件链接:ln

使用tree -L 1 /,有下面内容,是一些箭头,从一个目录指向另一个目录,那就是链接,从一个路径指向另一个路径

tree -L 1 /
### 显示信息(部分删减)
/
├── bin -> usr/bin
├── lib -> usr/lib
├── lib64 -> usr/lib

ln命令用于创建文件链接,是给系统中已有的某个文件指定一个可用于访问它的名称。可以设置新的文件名指定不同的访问权限,以控制对信息的共享和安全性问题。

链接有硬链接和软链接,这里不想说明它们的区别,知道怎么用着好用就行。

  • 硬链接:链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接,此时,这个文件拥有多个有效路径名

  • 软链接:没有硬链接的那些限制,且软链接只是相当于Window下的快捷方式

# 不使用选项时,默认建立硬链接
ln fileName /home/guyan/Destop/fileHardLink
# 选项'-s',建立软链接,一般情况下我们都只使用软链接
ln -s fileName /home/guyan/Destop/fileSoftLink

9. 文件/目录权限管理

更改文件权限:chmod

更改文件所有者:chown

更改文件所属用户组:chgrp

设置权限掩码:umask

Linux系统中每一个文件都有一个所有者,同时具有一个足编号,表示该文件所属的组。

现在可以使用命令 ls -l 查看文件的权限,文件和目录的访问权限只有读、写、执行。这里要是忘了可以返回去看本章的第二节

一般情况下可以使用字符的形式更改用户权限,但也可以将权限字符转化为数字,为避免混淆,权限 r = 4 , w = 2, x = 1

# 查看一个文件的权限
ls -l fileName
### 显示信息
-rw-r--r-- 1 guyan guyan 20 Oct27日 03:59 fileName
1. chmod
# change mode,用于改变文件或目录权限
# 设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入-R参数进行递归操作
# r=4,w=2,x=1
# 基本格式
chmod [who] [+|-|=] [mode] fileName
###
chmod g+r fileName
chmod a+x fileName
chmod ug+w,o-x fileName
# 还可以直接三个数字连在一起同时为 u g a 设置权限
chmod 777 fileName # 当然,一般不建议 777
选项 选项 简介
[who] u [user]对文件所有者的权限进行设置
g [group]对文件所有者的同组用户的权限进行设置
o [other]对其他用户的权限进行设置
a [all]对所有用户的权限进行设置
[+\ -\ =]
-
=
[mode] r、w、x 读、写、执行
s、t、u、g、o
2. chown
# Change owner,用于改变文件或目录的用户和用户组信息
# cp 命令会复制其权限设置,当一个用户复制一份文件给别人的时候,需要更改文件的所有者
# 语法格式:
chown [参数] 所属主:所属组 文件
# -R    递归改变
# -v    显示 chown 命令对文件的详细操作
# -c    显示所属信息变更信息
# -f    若该文件拥有者无法被更改也不要显示错误
# -h    只对于链接文件进行变更,而非真正指向的文件
### 例子
# 改变指定文件的所属主与所属组
chown root:root /etc/fstab
# 改变指定文件的所属主与所属组,并显示过程
chown -c linuxprobe:linuxprobe /etc/fstab

10. 文件压缩/解压缩

压缩文件:bzip2、zip

解压缩文件:bunzip2、gunzip、unrar、unzip

压缩/解压缩:gzip

查看压缩文件内容:zcat、zless、bzcat、bzless、tar

复制文件到归档包:cpio

压缩和解压缩的命令还有很多,命令选项都差不多

可能使用最多的是 tar、zip、unzip、unrar

如果需要一个图形化的压缩工具可以选用 Ark,如果是打包项目,用相应的 IDE 就行,这些压缩命令可以用,但有时后没必要

1. tar
# 用于压缩和解压缩文件,
# 能够制作出Linux系统中常见的.tar、.tar.gz、.tar.bz2等格式的压缩包文件
# 语法格式:
tar 参数 文件或目录
###
# https://www.linuxcool.com/tar
# 常用选项
-x    从归档文件中提取文件
-z    通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-j    通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v    显示指令执行过程
-v    显示操作过程
-r    添加文件到已经压缩的文件

11. 文件传输与接收

文件传输工具:curl

下载网络文件:wget

1. curl
# CommandLine URL,用于在Shell终端界面中基于URL规则进行的文件传输工作。
# curl是一款综合的传输工具,可以上传也可以下载,支持HTTP、HTTPS、FTP等三十余种常见协议
# 语法格式:
curl [参数] 网址
### 
curl https://www.linuxcool.com  # 获取指定网站的网页源码
curl -O https://www.linuxprobe.com/docs/LinuxProbe.pdf  # 下载指定网站中的文件
# 下载指定文件服务器中的文件(用户名:linuxcool,密码:redhat):
curl -u linuxprobe:redhat ftp://www.linuxcool.com/LinuxProbe.pdf
### 选项
-o    指定新的本地文件名
-O    保留远程文件的原始名
-u    通过服务端配置的用户名和密码授权访问
-I    打印HTTP响应头信息
-u    指定登录账户密码信息
-C    支持断点续传
-T    上传文件

2. wget
# Web get,用于从指定网址下载网络文件
# wget 非常稳定,即便网络波动导致下载终止,也会不断的尝试重连,直至整个文件下载完毕
# 支持如HTTP、HTTPS、FTP等常见协议,可以在命令行中直接下载网络文件
# 语法格式: 
wget [参数] 网址
###
wget https://**/fileName  # 下载指定的网络文件

### 选项
-V    显示版本信息
-h    显示帮助信息
-b    启动后转入后台执行
-c    支持断点续传
-O    定义本地文件名
-e <命令>    执行指定的命令

12. 其它

输出字符串或提取后的变量:echo

改变根目录:chroot

1. echo
# 用于在终端设备上输出指定字符串或变量提取后值的命令,能够给用户一些简单的提醒信息
# 语法格式:
echo [参数] 字符串/变量
###
echo $PATH  # 输出当前环境变量
echo string  # 输出字符串到终端

2. chroot
# change root,用于把根目录换成指定的目录
# 这个命令一般只有在安装系统或重装系统的时候才会使用
# 语法格式:
chroot /path

参考

posted @ 2022-10-30 17:20  故魇  阅读(241)  评论(0编辑  收藏  举报