Linux文件管理
发表于|更新于
|浏览量:
基础命令行
echo指令 - 显示字符
- 功能:在屏幕上输出指定字符,是shell脚本中最常用的命令之一
- 指令格式:
echo "<string>"
bc指令 - 交互式计算器
- 功能:交互式命令行计算器
- 指令格式:
bc 进入交互式计算器,CTL+C退出交互界面
expr指令 - 非交互式计算器
- 功能:非交互式命令,直接输出结果
- 指令格式:
expr <expression>,注意操作符之间加空格,不加空格会直接输出表达式
- 实例:
1 2 3 4
| expr 1+1 1+1 expr 1 + 1 2
|
date指令 - 显示时间
- 功能:显示系统当前日期和时间
- 指令格式:
date显示系统时间
cat指令 - 显示文件内容
- 功能:查看文件内容(最基本用法)
- 指令格式:
cat <file path>
hostnamectl指令 - 主机管理
- 更改主机名称:
hostnamectl set-hostname <hostname>
pwd指令 - 显示当前工作目录
whoami - 显示当前用户
基础目录结构
路径介绍
- 绝对路径:以顶级目录开头的完整路径,在Linux系统中顶级目录是根目录”/“
- 相对路径:不以根目录开头,基于当前工作目录的路径表示方式
一级文件目录及功能
| 一级文件目录 |
功能及作用 |
| /bin |
存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行,是软链接 /bin -> /usr/bin |
| /sbin |
保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看,是软链接 /sbin -> /usr/sbin |
| /boot |
系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
| /dev |
设备文件保存位置,常见设备文件,sda(磁盘),tty(终端),设备文件大小通常显示为0字节,实际不存储数据 |
| /etc |
配置文件保存位置 |
| /home |
普通用户的主目录(也称为家目录),家目录名称可以与用户名不同 |
| /mnt |
挂载目录,系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
| /run |
挂载目录,作为临时文件系统(tmpfs)的挂载点 |
| /media |
挂载目录,一般是光盘文件挂载点 |
| /opt |
第三方安装的软件保存位置,/usr/local/ 目录也可以用来安装软件 |
| /proc |
存放系统进程相关文件 |
| /srv |
存放特定服务所需的资源文件,如ftp,http |
| /sys |
存放与系统硬件和内核相关的资源文件 |
| /tmp |
存放系统临时文件 |
| /usr |
Linux软件的安装目录,包含系统核心应用程序和共享资源 |
| /var |
存放log文件目录 |
| /lib |
存放32bit函数文件,是软链接 /lib -> /usr/lib |
| /lib64 |
存放64bit函数文件,是软链接 /lib64 -> /usr/lib64 |
| /root |
root用户的家目录 |
Linux文件操作指令
su - 切换用户指令
- 指令格式:
su [选项] [-] [<用户> [<参数>...]]
- 指令权限:
- 普通用户切换到任何用户都需要输入密码
- root用户切换到任何用户都不需要输入密码
- 注意:
- 加”-“切换:完全切换用户环境,继承目标用户的所有环境变量
- 无”-“切换:仅进行shell层面的切换,不改变当前环境变量
- 故运行
su指令时强烈建议加”-“
- 使用
su命令相当于创建了一个子进程,可以使用exit退出
- shell嵌套机制:
- 每次su命令都会创建一个新的shell,原始shell仍然保留在内存中
- 使用exit命令可逐层退出嵌套的shell,每个未退出的shell都会占用少量内存
- 实例:
1 2 3 4 5 6 7 8
| su - root su root
su - root pstree | grep bash |-ghostty-+-zsh---bash---su---bash-+-grep
|
cd - 切换路径
- 指令格式:
cd [path]
- 特殊方式:
cd <相对路径/绝对路径>:切换路径
cd .:切换至当前目录
cd ..:切换至上级目录
cd ~或cd:切换到当前用户的家目录
cd -:切换到上次使用的目录(反复使用,会在两个目录下切换)
cd ../..:实现多级跳转
cd "File Path":文件夹路径包含空格,使用string类型
ls - 列出文件属性
- 指令格式:
ls [path] [option]
- 特殊方式:
ls:会列出当前文件夹下的文件信息
ls <path> <path>:支持列出多个目录下的文件信息
ls <relative path>:支持相对路径
- 常用参数:
-a:显示以 . 开头隐藏的项目
-l:显示文件的详细信息
-d:显示目录本身属性,而不是目录下的内容
- 文件详细信息:

- 文件类型与权限:
- 第一列:表示文件类别,
-表示普通文件,d表示目录文件,b表示块设备,c表示字符设备,l表示软连接
- 后九列:分 3 组(每组 3 个),分别表示文件所有者、所属组、其他用户的权限,其中
r 读、w 写、x 执行,- 表示无对应权限
- 连接数:此处表示硬链接数
- 所有者:文件或目录所属用户
- 所属组:文件或目录所属组
- 文件大小:文件大小,单位为字节(Byte),可以使用
-h更方便查看文件大小,目录通常显示4096
- 最后修改时间:文件内容最后一次修改时间
- 文件名:文件或目录名称(符号连接带
->,并指向目标路径)
cat - 查看文件内容
- 指令功能:命令用于连接文件并打印到标准输出设备上,它的主要作用是用于查看和连接文件
- 指令格式:
cat [path]
- 常用参数:
cat [path] [path]:支持查看多个文件内容
cat:进入到交互环境,CTL+C退出,通常用于创建短文本(cat > file.txt)
-n:显示行号
- 衍生指令:
head:显示文件前10行内容,head -n <num> <path>或者head -<num> <path>参数显示前num行内容
tail:显示文件后10行内容,tail -n <num> <path>或者tail -<num> <path>参数显示后num行内容,tail -f <path>实时追踪文件结尾内容变化
more:分页显示当前文件内容,Enter查看下一行内容,Space查看下一页内容,Q退出查看,无法向上查看
less:分页查看当前文件内容,上下键向前向后查看,Q退出查看
touch - 创建文件
- 指令格式:
touch <path>
- 注意事项:
touch <path> <path>:支持创建多个文件
touch:指令创建的文件为文本文件(后缀名为空)
- 如果文件已经存在,则会直接更新该文件的时间戳
file - 查看文件类型
- 指令格式:
file <path>
- 注意事项:
- 图片文件.png后缀名改为.txt后要使用
file指令查看文件类型
- 后缀名并无实际意义,也不代表文件类型,仅用于方便查看
mkdir - 创建目录文件
- 指令格式:
mkdir <path>
- 常用参数:
mkdir -p <path>:需要时创建目标目录的父目录,但即使这些目录已存在也不视为错误
rmdir - 删除目录文件
rm - 删除文件
- 指令格式:
rm <path>
- 常用参数:
rm -i <path>:删除文件时询问
rm -f <path>:强制删除,忽略不存在的文件和参数,且从不询问
rm -r <path>:递归删除,可删除目录文件及其内容
- 注意事项:
rm <path> <path>:允许删除多个文件
alias - 指令别名
- 查看别名:
alias
- 添加别名:
alias <command>='<string>',例如alias rm='rm -i'
- 注意事项:
- 直接在命令行上使用
alias rm='rm -i',创建的命令是临时的,当前SHELL关闭之后就没有了
- 如果想要永久的创建
alias指令,需要修改环境变量配置文件.bashrc
cp - 文件拷贝
- 指令格式:
cp <源文件> [多个源文件路径] <目标路径>
- 常用参数:
cp -r <源目录> <目标路径>:拷贝目录文件
cp -a <源文件> <目标路径>:拷贝时保留文件属性(权限,所有者,所属组),必须是root用户,普通用户时无效
cp -i <源目录> <目标路径>:拷贝文件时,咨询是否覆盖
- 注意事项:
- 最后的
<目标路径>是存在的目录文件,就将cp指定的文件拷贝到目标路径
- 最后的
<目标路径>是不存在的目录文件,就将cp指定的文件拷贝到上级目录,并改名为目标文件名
mv - 移动文件
- 指令格式:
mv <源文件> <目标路径>
- 注意事项:
- 最后的
<目标路径>是存在的目录文件,就将mv指定的文件移动到目标路径
- 最后的
<目标路径>是不存在的目录文件,就将mv指定的文件移动到上级目录,并改名为目标文件名
mv指令可以实现改名操作,即mv <旧名称> <新名称>
通配符
| 通配符 |
说明 |
| * |
匹配零个、一个或多个任意字符 |
| ? |
表示一个非空的任意字符 |
| \ |
转译字符,让特殊字符失去原有的功能 |
| ‘ ‘ |
单引号中的特殊字符将失去功能 |
| [ ] |
中括号表示匹配中括号包含的其中的一个字符 |
| [^ ]或[! ] |
在方括号内使用 ^ 或 ! 用于排除匹配的字符集 |
| {} |
用于生成字符串序列 |
- 注意事项:
- 创建名为
a?的文件时,若该目录下存在可以匹配a?(形如aa)的文件时则会将文件的时间戳更新,此时若要创建名为a?的文件,需要使用touch 'a?'或者touch a\?
- 创建名为
a?的文件时,若该目录下不存在可以匹配a?的文件时则会创建名为'a?'的文件
- 常见用法:
ls *.txt列出以txt为结尾的所有文件
[a-z]匹配任何小写字母,[a-Z]表示匹配所有字母,[0-9]匹配任何数字,{a..z}输出小写字母字符串
Linux快捷键(shell)
| 快捷键 |
功能 |
ctl + a |
将光标移动到指令最左边 |
ctl + e |
将光标移动到指令最右边 |
ctl + l |
清空屏幕 |
ctl + w |
删除从光标位置到一个单词的左侧 |
ctl + u |
删除从光标位置到最左侧 |
ctl + y |
还原删除的指令 |
↑ |
显示上次输入的命令 |
↓ |
显示下次输入的命令 |
!<字符串> |
调出最近以字符串开头的指令 |
Linux编辑文件
vim编辑文件
- 指令格式:
vim <file>
- vim工作模式:指令模式, 编辑模式(插入模式), 末行模式, 可视化模式
指令模式:
| 指令 |
功能 |
h或者←(小键盘) |
实现光标向左移动 |
l或者→(小键盘) |
实现光标向右移动 |
j或者↓(小键盘) |
实现光标向下移动 |
k或者↑(小键盘) |
实现光标向上移动 |
gg指令 |
将光标移动到文件初始位置 |
shift+g或者G指令 |
将光标移动的文件末尾位置 |
nG指令 |
将光标移动第n行,其中n是表示数字 |
x指令 |
删除光标所在位置的字符 |
X指令 |
删除光标之前的字符 |
u指令 |
撤回之前的操作(windows编辑软件撤回次数取决于缓冲区设置, vim指令模式可以撤回到文件最开始的内容, 即无限回撤, vim缓冲区与windows设置不相同) |
dd指令 |
删除光标所在行,等同于1dd |
ndd指令 |
删除光标所在下n行(包含光标所在行) |
yy指令 |
复制光标所在行,等同于1yy |
nyy指令 |
复制光标所在下n行(包含光标所在行) |
p指令 |
会将上次ndd或nyy指令指定的行,添加到光标所在行的下面 |
P指令 |
会将上次ndd或nyy指令指定的行,添加到光标所在行的上面 |
编辑模式:
| 命令模式进入编辑模式指令 |
特殊功能 |
i指令 |
在光标所在位置的左侧开始插入文本 |
I指令 |
移动光标到所在行的行首位置,并向光标左侧插入文本 |
a指令 |
在光标所在位置的右侧开始插入文本 |
A指令 |
会移动光标到所在行的行尾位置,并向光标右侧插入文本 |
o指令 |
在光标所在行的下面另起一行开始插入文本 |
O指令 |
在光标所在行的上面另起一行开始插入文本 |
n指令 |
在指令模式下,切换到下一个找到的字符串,配合末行查找指令/使用 |
N指令 |
在指令模式下,切换到上一个找到的字符串,配合末行查找指令/使用 |
末行模式
- 在命令模式输入
:或者/进入末行模式
- 末行模式主要功能:
- 查找指定字符串
- 替换文本内容
- 保存文件内容
- 退出编辑器
| 末行指令 |
功能 |
/<字符串>指令 |
查找指定字符串,按下Enter键,匹配到的字符串会高亮显示,未匹配到字符串会报错 |
:w指令 |
保存修改的内容,即使保存了文件依然可以通过u指令进行撤回 |
:q指令 |
退出vim编辑器 |
:wq或者:x |
保存并退出vim编辑器 |
!指令 |
在其他指令后面加!表示强制执行 |
:set number |
显示行号,简写:set nu |
:set nonumber |
不显示行号,简写:set nonu |
:n1,n2s/old/new/global |
将n1行到n2行(包含n1,n2行)的old内容替换为new内容,global可以简写为g |
$末行字符 |
表示最后一行,例如:1,$s/old/new/g将全文的old替换为new |
\转义字符 |
若替换的文本中出现特殊字符需要使用转义字符\ |
global或者g |
表示替换全部文本,不加g或者global只会在每行找到的第一个内容做替换,若替换指令结尾加n,n表示数字,表示替换每行前n个内容 |
可视化模式
| 指令 |
功能 |
v指令 |
进入可视化界面,逐个选择 |
V指令 |
进入可视化界面,整行选择 |
ctrl+v指令 |
进入可视化界面,矩形框选 |
vim异常处理
- 多用户访问同一个文件,例
config文件
- 用户A使用vim打开文件
- 用户B再使用vim打开文件时会报错,报错情况如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| E325: 注意 发现交换文件 "~/.cache/vim/swap/%home%LinHao%config.swp" 所有者: LinHao 日期: 2025-12-12 21:27:37 文件名: ~LinHao/config 修改过: 否 用户名: LinHao 主机名: ArchLinux 进程 ID: 14454 (还!在!运!行!) 正在打开文件 "config" 日期: 2025-12-12 20:57:17
(1) 另一个程序可能也在编辑同一个文件。 如果是这样,修改时请注意避免同一个文件产生两个不同的版本。 退出,或者小心地继续。 (2) 上次编辑此文件时崩溃。 如果是这样,请用 ":recover" 或 "vim -r config" 恢复修改的内容 (请见 ":help recovery")。 如果你已经进行了恢复,请删除交换文件 "/home/LinHao/.cache/vim/swap/%home%Li nHao%.config.swp" 以避免再看到此消息。
交换文件 "~/.cache/vim/swap/%home%LinHao%.config.swp" 已存在! 以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 退出((Q)), 中止((A)):
|
- 原因:vim编辑文件是会创建一名为
.<file>.swp的交换文件(这也是vim可以无限撤回的原因),再次编辑会出现冲突(此时可能是上个用户正在编辑,或者vim不正常退出)
注意事项:
vim指令编辑文件时,首先进入的是编辑模式
- 在命令模式下,按
i, I, o, O, a或者A进入编辑模式,在任何模式下按ESC键都会返回指令模式
- 在末行模式要退出vim编辑器,如果修改的内容没有保存是不能正常退出vim编辑器,强制退出会导致编辑内容丢失
- 使用
vimtutor指令查看vim指令
- 上述指令在vi编辑器上同样适用
输出重定向
- 指令格式:
command >> file将指令正确的结果以追加的形式输出到file文件中,如果没有file文件则会被创建
- 指令格式:
command > file将指令正确的结果以覆盖的形式输出到file文件中,如果没有file文件则会被创建
- 指令格式:
command 2>> file将指令错误的结果以追加的形式输出到file文件中,如果没有file文件则会被创建
- 指令格式:
command 2>> file将指令错误的结果以覆盖的形式输出到file文件中,如果没有file文件则会被创建
- 指令格式:
command &>> file将指令正确和错误的结果以追加的形式输出到file文件中,如果没有file文件则会被创建
- 指令格式:
command &> file将指令正确和错误的结果以覆盖的形式输出到file文件中,如果没有file文件则会被创建
- 注意:
- 输出指令默认输出到屏幕上,效果等同于
command >> /dev/stdout或者command >> /dev/stderr
- 输出指令:
&>> /dev/null会将输出结果输入到黑洞中(直接丢弃)
输入重定向
- 指令格式:
command < file,将文件中的内容输入给指令command,部分指令不支持输入重定向
- 示例:将
order文件内容作为输入,可以不用再输入y确认1 2 3 4 5
| [LinHao@ArchLinux ~]$ cp /etc/hosts . [LinHao@ArchLinux ~]$ echo y > order [LinHao@ArchLinux ~]$ cp -i /etc/hosts . < order cp: 是否覆盖 './hosts'? [LinHao@ArchLinux ~]$
|
- 指令格式:
command << file,将文件中的内容输入给指令command,并且用户可以追加新的内容,再次输入file终止追加
- 常见使用:
1 2 3 4 5
| [LinHao@ArchLinux ~]$ cat > order << END > Today is a good day > END [LinHao@ArchLinux ~]$ cat order Today is a good day
|
可以将交互式的指令转化为非交互式命令
Linux管道
- 指令格式:
输出命令 | 输入命令,其中|表示Linux管道的命令,管道左侧的命令会产生输出结果,经过管道就会变成右侧指令的输入
- 常见指令格式:
输出指令 | xargs 特殊指令,其中xargs表示将管道输入作为右侧指令的参数而不是标准输入
- 常见指令格式:
输出指令 | grep 内容,grep指令原本格式是grep content file表示将file文件中含有内容content抓取出来,并显示content所在行,-i表示不区分大小写,-v参数进行反向抓取(显示除content的行),-n参数会显示行号,-A n参数表示after会显示查找内容后n行的内容,-B n参数before会显示查找内容前n行的内容, -n参数会显示行号
输出指令 | xargs grep 内容,将左侧指令的输出作为grep的输入抓取特定内容,例如:查找目录下python文件中的import字段,可以使用ls *.py | xargs grep import
| 可以作为右侧指令(接受输入命令) |
此时功能 |
| cat |
重复左侧指令输出 |
| head |
重复左侧指令输出 |
| tail |
重复左侧指令输出 |
cat, head, tail指令本身是显示文件内容,tail, head在后面不跟文件时功能与cat指令相似
正则表达式
| 正则表达式 |
说明 |
| ^a |
行首锚点,表示以a开头的内容 |
| b$ |
行尾锚点,表示以b结尾的内容,注意区别$b这是代表b变量 |
| . |
表示任意一个非空字符 |
| * |
数量修饰符,不能单独存在,必须跟在某个字符 / 表达式后,表示匹配前面的字符 0 次、1 次或多次 |
| .* |
表示匹配任意非空字符串(匹配1~n个任意非空字符) |
| ? |
表示可以重复前边的字符1次或0次,必须跟在某个字符 / 表达式后 |
- 注意:
grep b$ file是显示以b结尾的行,而grep $b file是在文件中找包含b变量的内容
grep ^ac$ file表示抓取只包含ac的行,grep ^$ file -v表示反向抓取空白行,grep ^a file | grep c$表示抓取以a开头,以c结尾的内容,简化写法grep '^a.*c$' file
grep -E a? file中,必须加上参数-E来指定是正则表达式
[!note] 正则表达式和通配符区别
正则表达式是用来匹配文件内容的,而通配符是来匹配文件名的
参考资料
- 通配符参考资料:通配符详细资料
- vim指令参考:vim指令参考