1. Linux 文件种类与扩展名
在 Linux 系统中文件后缀名(扩展名,例如:.txt、.mp4、.jpg等)没有意义,通常加上后缀名只是为了方便识别。
在 Linux 命令行输入 ls -l file_name
可以查看一个文件的详细信息,其中第一个字符标识文件种类。
以下是对 Linux 文件种类的详细介绍:
- “-” 普通文件(Regular File)
- 文本文件(Text File):包含人类可读的文本字符,例如
.txt
、.c
、.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
:设备文件目录,包含了系统中的硬件设备对应的文件。/etc
:存放系统的配置文件,如用户账号、服务启动配置等。/root
:超级用户(root)的主目录。/home
:普通用户的主目录,每个用户在该目录下有一个以用户名命名的子目录。/lib
:系统库文件,包含了系统运行所需的共享库。/lib64
:64 位系统的库文件。/media
:用于挂载可移动设备,如 U 盘、光盘等。/mnt
:临时挂载文件系统的挂载点。/opt
:可选的应用程序安装目录。/proc
:虚拟文件系统,提供了系统运行时的内核和进程信息。/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
,隐藏文件通常是以.
开头的文件。
- 使用
- 以长格式列出
- 使用
-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
的文件。
- 示例:
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
的输出作为其他命令的输入,通过管道|
进行连接。
- 可以将
less
用于分页查看文件内容的命令行工具。
- 基本用法
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 安装