1. Linux 文件种类与扩展名
在 Linux 系统中文件后缀名(扩展名,例如:.txt、.mp4、.jpg等)没有意义,通常加上后缀名只是为了方便识别。
在 Linux 命令行输入 ls -l file_name 可以查看一个文件的详细信息,其中第一个字符标识文件种类。
以下是对 Linux 文件种类的详细介绍:
- “-” 普通文件(Regular File)
- 文本文件(Text File):包含人类可读的文本字符,例如
.txt、.html等。 - 二进制文件(Binary File):以二进制格式存储的数据,例如可执行程序(
.exe、.bin)、图像文件(.jpg、.png)、压缩文件(.zip、.tar.gz)等。
- 文本文件(Text File):包含人类可读的文本字符,例如
- “d” 目录文件(Directory)
- 用于组织和分类文件,包含其他文件和子目录的信息。目录类似于 Windows 中的文件夹。
- 链接文件(Link File)
- “l” 软链接(Symbolic Link):也称为符号链接,是一个指向另一个文件或目录的特殊文件。如果目标文件被删除或移动,软链接将失效。
- 硬链接(Hard Link):硬链接与原始文件共享相同的 inode(索引节点),对硬链接的修改会反映在原始文件上,反之亦然。删除原始文件不会影响硬链接的可用性,直到所有硬链接都被删除。硬链接文件的文件类型与原始文件相同,例如,如果原始文件是普通文件,那么其硬链接的文件类型也是普通文件。
- 设备文件(Device File)
- “c” 字符设备文件(Character Device File):以字符为单位进行输入/输出操作,例如键盘、鼠标、串口等,通常位于
/dev目录下,例如/dev/tty1。 - “b” 块设备文件(Block Device File):以数据块为单位进行输入/输出操作,例如硬盘、光盘等,通常位于
/dev目录下,例如/dev/sda。
- “c” 字符设备文件(Character Device File):以字符为单位进行输入/输出操作,例如键盘、鼠标、串口等,通常位于
- “p” 管道文件(Pipe)
- 分为命名管道(Named Pipe)和匿名管道(Anonymous Pipe)。用于进程间通信,数据在管道中按照先进先出的原则流动。
- “s” 套接字文件(Socket)
- 用于网络通信,进程可以通过套接字进行数据交换。
2. Linux 常见目录结构与作用
/bin:存放常用的二进制命令,如ls、cat、mkdir等。/sbin:存放系统管理员使用的系统管理程序。/boot:包含了系统启动所需的文件,如内核、引导加载程序等。/dev:设备文件目录,包含了系统中的硬件设备对应的文件。- /dev/cdrom 和 /dev/sr0,系统光盘镜像设备
- /dev/null,黑洞设备,只进不出
- /dev/random,生成随机数的设备
- /dev/zero,能源源不断地产生数据
- /dev/pts/0,虚拟的Bash Shell终端,提供给远程用户使用 0 代表第一个终端 1 代表第 2 个终端以此类推
- /dev/stderr,错误输出
- /dev/stdin,标准输入
- /dev/stdout,标准输出
/etc:存放系统的配置文件,如用户账号、服务启动配置等。- /etc/sysconfig/network-script/,网络配置文件目录
- /etc/hostname,系统主机名配置文件
- /etc/resolv.conf,dns 客户端配置文件
- /etc/hosts,本地域名解析配置文件
- /etc/fstab 系统挂载目录开机自启动挂载列表
- /etc/passwd 系统用户文件
/root:超级用户(root)的主目录。/home:普通用户的主目录,每个用户在该目录下有一个以用户名命名的子目录。/lib:系统库文件,包含了系统运行所需的共享库。/lib64:64 位系统的库文件。/media:用于挂载可移动设备,如 U 盘、光盘等。/mnt:临时挂载文件系统的挂载点。/opt:可选的应用程序安装目录。/proc:虚拟文件系统,提供了系统运行时的内核和进程信息。- /proc/meminfo 内存信息
- /proc/cpuinfo cpu信息
/run:存放系统运行时的数据,如进程 ID、锁文件等。/srv:服务特定的数据目录。/sys:类似于/proc,也是一个虚拟文件系统,提供了内核设备、驱动等的信息。/tmp:临时文件目录,系统重启时会清空。/usr:包含了用户程序和文件,如应用程序、库文件、文档等。/var:经常变化的数据,如日志文件、邮件队列等。
3. 绝对路径与相对路径概念
在文件系统中,绝对路径和相对路径是用于指定文件或目录位置的两种方式。相对路径更简洁,适用于在同一目录层次结构内进行操作;绝对路径则无论在任何位置都能准确无误地定位到目标。
- 绝对路径:是指从根目录开始的完整路径,它准确地指定了文件或目录在文件系统中的位置。
- 示例:在 Linux 系统中,
/home/user/documents/file.txt就是一个绝对路径,在 Windows 系统中,C:\Users\Username\Documents\file.txt是绝对路径。
- 示例:在 Linux 系统中,
- 相对路径:是指相对于当前工作目录的路径。如果当前工作目录是
/home/user,那么对于同一系统中的documents/file.txt就是一个相对路径。相对路径不以根目录开头,而是基于当前所在的位置来描述如何到达目标文件或目录。
4. 文件与目录管理常用命令
4.1. 查看文件与目录
pwd
显示当前工作目录的绝对路径。
- -L:若当前的工作目录是个符号链接,它会显示符号链接路径,此为pwd命令默认参数。
- -P:若当前的工作目录是个符号链接,它会显示符号链接所指向的实际路径。
cd
更改当前工作目录。
- 切换到指定目录
- cd /path/to/directory ,其中 /path/to/directory 是要切换到的目录的完整路径。
- 切换到上一级目录
- 使用 cd.. 可以切换到当前目录的父目录。
- 切换到用户主目录
- 输入 cd 或 cd ~ 都可以切换到当前用户的主目录。
- 切换到指定用户的主目录
- cd ~username ,其中 username 是指定用户的用户名,将切换到该用户的主目录。
- 切换到最近访问的目录
- 如果之前从一个目录切换到另一个目录,然后想快速返回之前访问过的目录,可以使用 cd – 。
ls
列出目录中的文件和子目录。
- 基本用法
- 直接输入
ls命令,将列出当前工作目录中的文件和子目录。
- 直接输入
- 列出指定目录
ls /path/to/directory,其中/path/to/directory是要列出内容的目录路径。
- 列出所有文件(包括隐藏文件)
- 使用
-a选项:ls -a,隐藏文·1件通常是以.开头的文件。
- 使用
- 以长格式列出
- 使用
-l选项:ls -l,会显示文件的详细信息,如权限、所有者、大小、修改时间等。
- 使用
- 按文件大小排序
- 使用
-S选项:ls -S,将按照文件大小从大到小排序。
- 使用
- 按时间排序
-t选项按修改时间排序,最新修改的文件排在前面。ls -lt按修改时间升序排列(从旧到新)。ls -ltr按修改时间降序排列(从新到旧)。
- 显示 inode 号
- 使用
-i 选项:ls -i ,会显示文件的 inode 号。
- 使用
- 递归列出子目录内容
- 使用
-R选项:ls -R,会递归地列出当前目录及其子目录中的内容。
- 使用
- 结合多个选项
- 例如,
ls -al同时列出所有文件(包括隐藏文件)并以长格式显示。
- 例如,
find
用于在指定目录下查找文件和目录。语法:find [路径] [表达式]
- 路径:是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔。如果未指定路径,则默认为当前目录。
- 表达式:指定搜索的条件和操作。
- 常见的表达式选项
-name:按照文件名查找。- 示例:
find /home -name "*.txt"在/home目录及其子目录中查找所有扩展名为.txt的文件。
- 示例:
-type:按照文件类型查找。常见的文件类型有f(普通文件)、d(目录)、l(符号链接)等。- 示例:
find / -type d在根目录及其子目录中查找所有目录。
- 示例:
-size:按照文件大小查找,可以使用+和-来指定大于或小于某个大小,单位可以是c(字节)、k(千字节)、M(兆字节)等。- 示例:
find /var -size +10M在/var目录及其子目录中查找大于 10MB 的文件。
- 示例:
-mtime:按照文件修改时间查找,可以使用+和-来指定在某个时间之前或之后的文件,单位可以是-n(n天前)或+n(n天后)。- 示例:
find /etc -mtime -7在/etc目录及其子目录中查找 7 天内修改过的文件。
- 示例:
-exec:对找到的文件执行指定的命令。- 示例:
find /tmp -name "*.log" -exec rm {} \;在/tmp目录中删除所有扩展名为.log的文件。
- 示例:
-user:按照文件所有者查找。- 示例:
find /home -user username在/home目录及其子目录中查找属于指定用户username的文件。
- 示例:
which
返回第一个在 $PATH 环境变量中匹配到的可执行文件路径。
- 用法示例:
which ip,添加-a选项显示所有匹配的路径(而不仅是第一个)
cat
用于查看、创建、连接文件。
- 显示文件内容
- 直接指定文件名作为参数,
cat file.txt将会显示file.txt的全部内容。
- 直接指定文件名作为参数,
- 合并多个文件
- 可以同时指定多个文件名,
cat file1.txt file2.txt会依次显示file1.txt和file2.txt的内容。
- 可以同时指定多个文件名,
- 从标准输入读取内容
- 当不指定文件名时,
cat会从标准输入(通常是键盘)读取数据,直到用户按下Ctrl + D组合键结束输入,并将输入内容显示出来。
- 当不指定文件名时,
- 配合重定向操作
- 如
cat file.txt > new_file.txt,将file.txt的内容重定向输出到新文件new_file.txt中,如果new_file.txt已存在,会覆盖其原有内容。 cat file.txt >> new_file.txt,将file.txt的内容追加到new_file.txt的末尾。
- 如
- 显示行号
- 使用
-n选项显示文件内容并在每一行的前面加上行号,cat -n file.txt。 - 使用
-b 选项显示文件内容并为非空白行添加行号,cat -b file.txt。 - 使用
-s 选项压缩连续的空白行为一行,cat -s file.txt。
- 使用
- 显示非打印字符
- 使用
-v或-T选项可以显示不可打印的字符。-v选项会以可见的方式显示控制字符和其他非打印字符,-T选项会将制表符显示为^I。
- 使用
- 结合其他命令使用
- 可以将
cat的输出作为其他命令的输入,通过管道|进行连接。
- 可以将
cat 命令创建文件的用法示例:
cat > test.txt <<EOF
Current path: $PWD
Today is: $(date)
EOF
# 查看文件内容
cat test.txt
Current path: /root/shell
Today is: 2025年 06月 11日 星期三 23:36:30 CST
# EOF 加上单引号
cat > test.txt <<'EOF'
Current path: $PWD
Today is: $(date)
EOF
# 查看文件内容
cat test.txt
Current path: $PWD
Today is: $(date)
# EOF 加上双引号
cat > test.txt <<"EOF"
Current path: $PWD
Today is: $(date)
EOF
# 查看文件内容
cat test.txt
Current path: $PWD
Today is: $(date)
# 需要解析变量/命令 → 用 <<EOF(不加引号)。
# 需保留原始文本 → 用 <<'EOF'(加单引号)。
# 不建议使用 <<"EOF" 效果和单引号相同但可读性差,在普通字符串中:"$VAR" 会解析变量,'$VAR' 不会,容易混淆。
echo '$PATH'
$PATH
echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/go/bin:/root/binBashless
用于分页查看文件内容的命令行工具。
- 基本用法
less filename,其中filename是要查看的文件的名称。
- 浏览文件
- 按空格键:向下翻一页。
- 按回车键:向下滚动一行。
b键:向上翻一页。y键:向上滚动一行。
- 搜索
- 输入
/pattern,然后按回车键,查找文件中匹配pattern的内容。 - 按
n键查找下一个匹配项,按N键查找上一个匹配项。
- 输入
- 退出
- 按
q键退出less。
- 按
- 显示行号
- 输入
:num,其中num是要显示的行号,将直接跳转到指定行。
- 输入
- 其他操作
h键:显示帮助信息。G键:跳转到文件末尾。g键:跳转到文件开头。
- 结合管道使用
- 可以与其他命令结合使用,例如
cat large_file.txt | less,用于查看大型文件的内容。
- 可以与其他命令结合使用,例如
head
用于查看文件的开头部分内容。
- 基本用法
head filename,其中filename是要查看的文件名称。默认情况下,它会显示文件的前 10 行内容。
- 指定行数
head -n num filename,其中-n表示指定行数,num是要显示的行数。例如,head -n 20 filename会显示文件的前 20 行。
- 多个文件
- 可以同时指定多个文件,例如
head file1.txt file2.txt,将分别显示每个文件的前 10 行内容。
- 可以同时指定多个文件,例如
- 结合管道使用
- 可以与其他命令结合使用,通过管道将输出传递给
head。例如,command | head,其中command是产生输出的命令。
- 可以与其他命令结合使用,通过管道将输出传递给
tail
用于查看文件的末尾部分内容。
- 基本用法
tail filename,其中filename是要查看的文件名称。默认情况下,它会显示文件的最后10行内容。
- 指定行数
tail -n num filename,其中-n表示指定行数,num是要显示的行数。例如,tail -n 20 filename会显示文件的最后20行。
- 实时查看文件更新
tail -f filename,其中-f表示实时查看文件更新。它会一直监视文件的末尾内容,并在文件有更新时实时显示。
- 结合管道使用
- 可以与其他命令结合使用,通过管道将输出传递给
tail。例如,command | tail,其中command是产生输出的命令。
- 可以与其他命令结合使用,通过管道将输出传递给
4.2. 创建、复制、移动、删除文件与目录
touch
用于创建新的空文件,如果文件已存在,则会更新文件的访问时间和修改时间。
- 创建一个新的空文件:
touch filename- 例如:
touch newfile.txt将会在当前目录创建一个名为newfile.txt的空文件。
- 例如:
- 同时创建多个文件:
touch file1 file2 file3 - 更新文件的时间戳:如果指定的文件已经存在,
touch命令会更新其访问时间和修改时间为当前系统时间。 - 指定特定的时间来更新时间戳:
touch -t [[CC]YY]MMDDhhmm[.ss] filename其中,CC表示年份的前两位,YY表示年份的后两位,MM表示月份(01 – 12),DD表示日期(01 – 31),hh表示小时(00 – 23),mm表示分钟(00 – 59),ss表示秒(00 – 60)。- 例如:
touch -t 202307131230 file.txt会将file.txt的时间戳设置为 2023 年 7 月 13 日 12 点 30 分。
- 例如:
mkdir
用于在 Linux 和其他类 Unix 操作系统中创建新的目录。
- 基本语法:
mkdir directory_name其中directory_name是要创建的目录的名称。- 示例:
mkdir new_directory这将在当前工作目录下创建一个名为new_directory的新目录。
- 示例:
- 常用选项:
-p:可以创建多级目录。如果中间目录不存在,会一并创建。- 示例:
mkdir -p parent/child/subchild这将创建parent目录、parent/child目录和parent/child/subchild目录。
- 示例:
-v:显示创建目录的详细信息。- 示例:
mkdir -v new_dir执行时会显示创建目录的过程信息。
- 示例:
-m:创建目录并设置权限。- 示例:
mkdir -m 755 new_dir
- 示例:
cp
用于在 Linux 和其他类 Unix 操作系统中复制文件和目录。
- 基本语法:
cp source destination其中,source是要复制的源文件或目录,destination是复制的目标位置。 - 常用选项:
-r或-R:递归复制目录及其内容,包括子目录和文件。-i:在覆盖目标文件之前提示确认。-v:显示详细的复制过程。-f:强制覆盖目标文件,不提示。
- 示例:
- 复制文件:
cp file.txt new_file.txt - 复制目录(包括其内容):
cp -r directory new_directory - 复制多个文件到一个目录:
cp file1.txt file2.txt destination_directory - 强制复制并显示详细信息:
cp -fv file.txt destination.txt
- 复制文件:
mv
用于在 Linux 和其他类 Unix 操作系统中用于移动或重命名文件和目录。
- 基本语法:
mv source destination其中,source是要移动或重命名的源文件或目录,destination是移动的目标位置或新的文件名。如果destination是一个已存在的目录,source会被移动到该目录下。 - 常用选项:
-i:如果目标文件已存在,会提示用户是否覆盖。-f:强制覆盖目标文件,不提示。-v:显示详细的移动过程。
- 示例:
- 移动文件:
mv file.txt /new/location/file.txt - 移动目录:
mv directory /new/location/directory - 重命名文件:
mv old_file.txt new_file.txt - 重命名目录:
mv old_directory new_directory - 强制移动并显示详细信息:
mv -fv file.txt destination.txt
- 移动文件:
rm
用于在 Linux 和其他类 Unix 操作系统中用于删除文件或目录。
- 基本语法:
rm file_or_directory - 常用选项:
-r或-R:递归删除目录及其内容。-f:强制删除,不提示确认。-i:在删除前提示确认。-v:显示详细的删除过程。
- 示例:
- 删除文件:
rm file.txt - 删除空目录:
rmdir directory# 或者使用 rm 命令加上 -d 选项:rm -d directory - 删除非空目录及其内容:
rm -r directory - 强制删除文件,不提示:
rm -f file.txt - 递归强制删除目录及其内容,不提示:
rm -rf directory
- 删除文件:
4.3. 修改文件内容
4.3.1. vi 与 vim 编辑器
vi 编辑器是 Linux 系统的一款默认编辑器,它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。
vim 编辑器是 vi 编辑器的升级版,vi 不显示高亮颜色语法,vim显示高亮颜色语法。
默认vi 是安装的 , vim 需要通过 yum install vim -y 安装。
常用命令
- 基本操作
vim 文件名打开文件:q退出:q!强制退出(不保存):w保存:wq或:x保存并退出:w 新文件名另存为ZZ保存并退出(普通模式下)
- 移动光标(普通模式)
hjkl左、下、上、右0跳到行首$跳到行尾gg跳到文件第一行G跳到文件最后一行:n跳到第n行(如:10)Ctrl + f向下翻页(Page Down)Ctrl + b向上翻页(Page Up)
- 编辑文本
- 删除与复制
dd删除当前行dw删除当前单词yy复制当前行yw复制当前单词
- 撤销与重做
u撤销Ctrl + r重做
- 删除与复制
- 查找与替换
/关键词向前搜索(按n下一个,N上一个):%s/旧/新/g全局替换(所有匹配):s/旧/新/g当前行替换:n1,n2s/旧/新/g替换第n1到n2行的内容
- 可视化模式
Ctrl + v进入块选择模式(列编辑)- 示例:多行行首添加注释(如
#)Ctrl + v + 上下键选中多行的第一列。- 按
I,输入#,按Esc
4.3.2. sed、awk、grep
详细介绍见 shell 篇
4.4. 文件上传与下载
wget
# 基本下载
wget https://example.com/file.zip # 文件会保存到当前目录,文件名与远程一致。
# 指定保存路径和文件名
wget -O /tmp/archive.tar.gz https://example.com/file.tar.gz
# 断点续传
wget -c https://example.com/large-file.iso # 如果下载中断,重新运行此命令会从中断处继续。
# 后台下载
wget -b https://example.com/file.zip # 日志会写入当前目录的 wget-log 文件。
# 递归下载(整站或目录)
## 常用选项:
## -np:不追溯至父目录。
## -l [深度]:限制递归深度。
## -A [扩展名]:仅下载指定类型文件(如 -A "*.pdf")。
## -R [扩展名]:排除指定类型文件(如 -R "*.jpg")。
wget -r -l 2 -A "*.pdf" https://example.com # 下载网站内所有 PDF,深度为 2
# ps:如果 wget下载提示无法建立 SSL 连接,则加上选项 --no-check-certificate
wget --no-check-certificate [URL]Bashcurl
# curl 命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。
curl -o 123.png https://www.xxx.com/img/hello.png
# ps: 如果遇到下载提示无法简历 SSL 链接,使用 -k 选项或者 --insecure
curl -k -o 123.png https://www.xxx.com/img/hello.png
# 下载远程脚本并直接在本地执行
curl -s http://example.com/test.sh | bash # -s 代表静默模式,会屏蔽掉 curl 命令本身的输出Bashsz 与 rz
# 系统默认没有该命令,需要下载:yum install lrzsz -y
# 将服务器上选定的文件下载到本地
sz bak.tar.gz
# 从本地选择文件上传到服务器。
rz
# 如果文件已经存,则上传失败,可以用 -E 选项解决
rz -E # -E 如果目标文件名已经存在,则重命名传入文件。新文件名将添加一个点和一个数字(0..999)
# 如果上传文件出现乱码可以添加 -be 选项
rz -be
# -b 二进制模式(避免转义字符处理),-e 转义控制字符(防止特殊符号被解析)。Bash4.5. 文件压缩与解压
zip 与 unzip
zip -rq etc.zip /etc
# zip 后的第一个参数是压缩包路径及文件名,后面的为被压缩的文件
# 选项:-r 递归压缩,-q 静默输出。
# 选项:-l 显示压缩包的列表信息,-q 静默输出,-d 解压到指定的目录。
unzip -q xxx.zip -d /optBashtar
# 打包
tar cvf etc_bak.tar /etc/ # c 创建归档,v 显示详细过程,f 指定归档文件名和路径
# 压缩
gzip etc_bak.tar # 文件体积变小,并且加上后缀.gz
# gzip -> gunzip
# bzip2-> bunzip2
# 上述两步可以合二为一
tar czvf etc1_bak.tar.gz /etc/ # 选项 z 代表 gzip 压缩算法
tar cjvf etc1_bak.tar.bz2 /etc/ # 选项 j 代表 bzip2 压缩算法
# xxx.tar.gz 或者 xxx.tar.bz2 解压命令相同
tar xvf 压缩包 -C 解压到的目录 # 无需指定解压算法,tar会自动判断Bash