一. Linux系统的文件结构
Linux系统的文件结构是树状结构,以根目录(/)作为起点,所有的文件和目录都从根目录开始进行组织和管理。
1、根目录(/)
根目录是整个文件系统的起点,存储系统文件的关键路径。虽然根目录本身不会直接存放应用程序和用户文件,但它是所有文件系统的连接点。操作系统在引导过程中,必须能访问根目录,任何损坏或权限问题都会导致系统无法启动。
2、基本目录
/bin
:存放系统所需的基本命令(可执行文件),包括常用的基础命令,如ls、cp、mv等。这些命令在系统启动后就可以直接使用,用于系统的日常运维和管理。/dev
:存放Linux的外部设备,包括硬盘、终端、打印机等。在Linux中,访问设备的方式和访问文件的方式是相同的,这些设备都以文件的形式表示出来,并存放在/dev目录内。/etc
:存放系统配置文件和子目录。这些配置文件用于设置和管理系统的各种参数和行为,是系统管理员进行日常管理和维护的重要工具。/lib
:存放系统最基本的动态连接共享库,这些库文件为系统中的各种应用程序提供必要的支持和功能。类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。
3、系统管理与配置目录
/boot
:存放引导程序和内核文件,系统启动时必须访问此目录。这些文件包括内核映像、引导加载程序等,是系统启动和运行的关键。/sbin
:存放系统管理员使用的管理工具,如ifconfig、fdisk、reboot等。这些命令通常需要较高的权限才能执行,用于系统的管理和维护。/proc
:一个虚拟文件系统,提供关于系统进程和内核状态的信息。它不占用磁盘空间,而是由内核动态生成的,用于访问系统硬件状态和进程信息。/sys
:另一个虚拟文件系统,提供了对内核对象模型的访问。与硬件设备、驱动程序、模块相关的信息都会存放在这里,管理员可以通过该目录与系统硬件进行交互。
4、用户相关目录
/home
:用户的主目录,用于存放用户的数据、配置文件等个性化信息。每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。/root
:超级用户(root)的主目录,存放超级用户的数据和配置文件。
5、应用程序与第三方软件目录
/usr
:存放几乎所有用户级别的应用程序和文件,以及系统共享资源。这个目录包含了大量的子目录和文件,用于支持系统的运行和用户的操作。其中,/usr/bin目录存放了用户级别的可执行文件,/usr/lib目录存放了用户级别的库文件,/usr/share目录存放了共享的资源文件等。/opt
:给主机额外安装软件所摆放的目录。一些大型软件套件或商用软件(如Oracle、VMware)会默认安装到/opt目录中,以避免与系统软件产生冲突。
6、挂载点目录
挂载点目录用于将额外的存储设备(如硬盘、U盘、网络文件系统等)挂载到Linux文件系统的某个位置。Linux文件系统没有C:、D:这样的驱动器划分方式,所有存储设备都是通过挂载点与根目录/关联的。常见的挂载点目录包括:
/mnt
:一个临时挂载点,用于系统管理员手动挂载文件系统,尤其是在故障排查或数据恢复过程中。/media
:用于挂载可移动设备的目录,比如U盘、CD/DVD光盘。当插入这些设备时,许多Linux发行版会自动将其挂载到/media/下的子目录中。
7、特殊目录
/var
:存放经常变化的文件,如系统日志、邮件队列、缓存等。这些文件会随着系统的运行和用户的操作而不断变化和增长。/tmp
:存放临时文件。这个目录通常用于存放系统运行过程中产生的临时文件和数据。/lost+found
:当系统非法关机后,Linux会自动识别一些设备,并尝试挂载它们。如果挂载过程中发现了一些无法识别的文件系统碎片或孤立文件,就会将它们存放在这个目录下。管理员可以检查这个目录以找回可能丢失的文件。
二. 常见指令
1. ls 指令
语法:ls [选项][目录或文件]
功能:
- 列出指定目录下的所有子目录和文件(如果指定的是目录)。
- 列出指定文件的文件名和其他信息(如果指定的是文件)。
常用选项:
-
-a
:- 功能:列出目录下的所有文件,包括以
.
开头的隐含文件(隐藏文件)。 - 示例:
ls -a
- 功能:列出目录下的所有文件,包括以
-
-d
:- 功能:将目录像文件一样显示,而不是显示其下的文件。
- 示例:
ls -d 指定目录
-
-i
:- 功能:输出文件的 i 节点(inode)的索引信息。
- 示例:
ls -i 指定文件
或ls -ai
(结合 -a 选项)
-
-k
:- 功能:以 k 字节(1024 字节)的形式表示文件的大小。
- 示例:
ls -k 指定文件
或ls -alk
(结合 -a 和 -l 选项)
-
-l
:- 功能:列出文件的详细信息,包括权限、所有者、组、大小、修改时间和文件名。
- 示例:
ls -l
-
-n
:- 功能:用数字的 UID(用户ID)和 GID(组ID)代替名称。
- 示例:
ls -n
- UID 和 GID:在 Linux 系统中,每个用户和组都有一个唯一的数字 ID。UID 是用户 ID,GID 是组 ID。使用 -n 选项可以显示这些数字 ID 而不是用户名和组名。
-
-F
:- 功能:在每个文件名后附上一个字符以说明该文件的类型。
- 示例:
ls -F
- 文件类型字符:
*
:表示可执行的普通文件。/
:表示目录。@
:表示符号链接。|
:表示 FIFO(命名管道)。=
:表示套接字(sockets)。
-
-r
:- 功能:对目录内容进行反向排序。
- 示例:
ls -r
-
-t
:- 功能:根据文件的修改时间进行排序,最近修改的文件排在最前面。
- 示例:
ls -t
-
-s
:- 功能:在
-l
选项的基础上,在文件名后输出该文件的大小(以块为单位)。 - 示例:
ls -ls
- 找到目录下最大的文件:可以结合
-r
和-S
(注意是大写的 S,表示按文件大小反向排序)选项来找到目录下最大的文件,但标准ls
命令没有-S
选项,你可能需要使用ls -lS
(在某些系统或带有特定扩展的ls
版本中可能有效)或du
命令结合其他工具来实现这一功能。
- 功能:在
-
-R
:- 功能:递归地列出所有子目录下的文件。
- 示例:
ls -R
2. cd 指令
语法 : cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
-
切换到指定目录
- 使用绝对路径:从根目录(/)开始的完整路径。例如,
/home/user
。 - 使用相对路径:从当前目录开始的路径。例如,如果当前目录是
/home/user
,则cd Documents
会切换到/home/user/Documents
。
- 使用绝对路径:从根目录(/)开始的完整路径。例如,
-
切换到上一级目录
- 使用
..
表示上一级目录。例如,cd ..
。
- 使用
-
切换到用户主目录
- 使用
~
表示当前用户的主目录。例如,cd ~
。 - 不带任何参数的
cd
命令也会将当前工作目录更改为当前用户的家目录。
- 使用
-
切换到根目录
- 使用
/
表示根目录。例如,cd /
。
- 使用
-
使用
-
切换回上一个目录cd -
命令可以在当前目录和前一次所在的目录之间来回切换。
-
使用
.
表示当前目录- 虽然使用
cd .
实际上不会改变当前目录,但.
可以表示当前目录的路径。
- 虽然使用
-
使用环境变量表示路径
- 例如,
$HOME
表示当前用户的主目录,因此cd $HOME
等价于cd ~
。
- 例如,
-
使用通配符匹配部分路径
- 例如,
cd /var/log/sys*
会匹配/var/log/syslog
。
- 例如,
3. touch指令
是Linux和Unix系统中用于创建空文件或更新文件时间戳的常用命令。
一、基本功能
- 创建空文件:如果指定的文件不存在,
touch
命令会创建一个新的空文件。 - 更新文件时间戳:如果文件已经存在,
touch
命令会更新文件的访问时间(atime)和修改时间(mtime)。默认情况下,这两个时间戳都会被更新为当前时间。
二、常用选项
-a
:仅更新文件的访问时间,不改变修改时间。-m
:仅更新文件的修改时间,不改变访问时间。-c
:如果文件不存在,不会创建新文件,只更新时间戳(如果存在)。-d
:使用指定的时间和日期,而不是当前时间。时间字符串的格式可以是相对时间(如“3 days ago”)或绝对时间(如“2024-12-25 12:34”)。-t
:使用指定的时间戳(格式为[[CC]YY]MMDDhhmm[.ss])来更新文件的时间戳。-r
:使用另一个文件的时间戳来更新目标文件的时间戳。-h
:影响符号链接本身,而不是链接所指向的文件。
三、使用示例
- 创建一个空文件
touch myfile.txt
如果myfile.txt
不存在,则创建一个新的空文件。
- 更新文件的访问和修改时间
touch existingfile.txt
如果existingfile.txt
已经存在,则更新其访问和修改时间为当前时间。
- 只更新文件的访问时间
touch -a myfile.txt
只更新myfile.txt
的访问时间,不改变其修改时间。
- 使用指定的时间戳更新文件时间戳
touch -t 202412251234.56 myfile.txt
将myfile.txt
的访问和修改时间更新为2024年12月25日12:34:56(注意:秒是可选的)。
- 批量创建文件
touch file1.txt file2.txt file3.txt
同时创建file1.txt
、file2.txt
和file3.txt
三个空文件。
示例
4. mkdir指令
一、基本语法
mkdir [选项] 目录名
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件
二、常用选项
-p
:递归创建目录。如果目标目录的父目录不存在,会自动创建。例如,mkdir -p path/to/new/directory
会创建path/to/new
(如果不存在)以及directory
。-m
:设置新目录的权限。权限值是一个八进制数,表示文件的权限。例如,mkdir -m 755 newdir
会创建一个名为newdir
的目录,其权限为755
(即rwxr-xr-x)。
三、使用示例
- 创建单个目录
mkdir documents
在当前目录下创建一个名为documents
的目录。
- 递归创建目录
mkdir -p path/to/new/directory
创建多级目录结构,如path/to/new
不存在,也会一并创建。
- 创建目录并设置权限
mkdir -m 700 private_data
创建一个名为private_data
的目录,其权限为700
(即只有所有者有读写执行权限)。
- 使用通配符创建多个目录
mkdir dir1 dir2 dir3
同时创建名为dir1
、dir2
和dir3
的三个目录。
5. rm指令
一、基本语法
rm [选项] 文件或目录...
二、常用选项
-f
:强制删除文件或目录,不会提示确认,即使文件或目录是只读的。-i
:交互式删除,每次删除前都会询问确认。-r
:递归删除目录及其内容(包括子目录和文件)。
三、使用示例
- 删除单个文件
rm file.txt
删除当前目录下的file.txt
文件。
- 删除多个文件
rm file1.txt file2.txt file3.txt
同时删除file1.txt
、file2.txt
和file3.txt
三个文件。
- 递归删除目录及其内容
rm -r directory/
删除名为directory
的目录及其所有内容。
- 强制删除文件
rm -f file.txt
强制删除file.txt
文件,即使该文件是只读的也不会提示确认。
6. man指令
man
指令是Linux和类Unix操作系统中的一个重要命令,用于显示系统手册页(Manual pages),这些手册页包含了各种命令、系统调用、库函数等的详细说明和用法。
一、基本语法
man [选项] [命令/工具/程序名字]
二、常用选项
-a
:在所有的手册页中搜索,显示所有匹配的条目。-f
:显示给定关键字的简短描述信息。-k
:使用关键字搜索所有与该关键字相关的手册页。-P
:指定内容时使用分页程序。
三、手册页分区
Linux的手册页通常分为不同的区(section),每个区对应着不同类型的文档。常见的分区包括:
- 1:用户在shell中可以操作的命令或可执行文件。
- 2:系统内核可调用的函数与工具等。
- 3:库函数(通常为C的函数库libc)。
- 4:特殊文件(比如/dev中的设备文件)。
- 5:配置文件或某些文件格式。
- 6:游戏。
- 7:杂项,如惯例、协议、字符集标准等。
- 8:系统管理员可用的管理命令。
- 9:与内核相关的文件。
四、使用示例
- 查看ls命令的手册页
man ls
这将显示ls
命令的详细用法和选项。
- 查找与passwd相关的所有手册页
man -a passwd
这将显示所有与passwd
相关的手册页,包括用户密码文件、系统管理工具等。
- 显示printf命令的简短描述
man -f printf
这将显示printf
命令的简短描述信息。
- 搜索与关键字相关的手册页
man -k keyword
这将列出所有与指定关键字相关的手册页。
五、浏览手册页内容
在查看手册页时,可以使用以下按键进行浏览:
- 空格键:向下翻一页。
- Enter键:向下翻一行。
- b键:向上翻一页。
- q键:退出查看手册页。
- /:在手册页中搜索关键字,按n键查找下一个匹配项,按N键查找上一个匹配项。
7. cp指令
cp
指令是Linux和Unix系统中用于复制文件和目录的基本命令。
一、基本语法
cp [选项] 源文件或目录 目标文件或目录
二、常用选项
-a
:归档模式,保留源文件或目录的所有属性,包括权限、所有者、时间戳等。这相当于-dpR
选项的组合。-b
:若目标文件已存在,则在覆盖前先备份目标文件。-d
:当复制符号链接时,把目标文件或目录也建立为符号链接,并指向与源文件或目录相同的文件或目录。-f
:强制复制文件或目录,即使目标文件或目录已存在也不会提示,直接覆盖。-i
:覆盖目标文件或目录前询问是否确认。-n
:不覆盖已存在的文件。如果目标文件已存在,则不会进行复制。-p
:保留原文件的属性(权限、修改时间等)。-r
:递归复制目录及其包含的所有子目录和文件。-s
:对源文件建立符号链接,而非复制文件。-u
:仅当源文件比目标文件新或目标文件不存在时才进行复制。-v
:显示详细的复制进度信息,列出正在复制的文件或目录。-l
:对源文件建立硬链接,而非复制文件。但请注意,硬链接只能在同一文件系统内创建。
三、使用示例
- 复制单个文件
cp file1.txt file2.txt
将file1.txt
复制为file2.txt
。
- 复制文件到目录
cp file1.txt /path/to/directory/
将file1.txt
复制到指定目录/path/to/directory/
中。
- 递归复制目录
cp -r directory1/ directory2/
递归复制directory1/
目录及其所有内容到directory2/
中。
- 保留文件属性复制
cp -p file1.txt file2.txt
复制file1.txt
为file2.txt
,并保留其属性。
- 强制覆盖复制
cp -f file1.txt existing_file.txt
强制将file1.txt
覆盖到已存在的existing_file.txt
上。
- 交互式复制
cp -i file1.txt existing_file.txt
在覆盖existing_file.txt
前会询问确认。
- 仅当源文件更新时才复制
cp -u file1.txt existing_file.txt
仅当file1.txt
比existing_file.txt
新时才进行复制。
- 显示详细复制信息
cp -v file1.txt /path/to/directory/
显示将file1.txt
复制到指定目录的详细过程。
8. mv指令
mv
指令是Linux和Unix系统中用于移动文件或目录,以及重命名文件或目录的常用命令。以下是关于
一、基本语法
mv [选项] 源文件或目录 目标文件或目录
二、常用选项
-i
:在覆盖文件之前提示用户确认。这是防止不小心覆盖重要文件的有用选项。-f
:强制移动文件或目录,即使目标文件已经存在也不会提示,直接覆盖。但请谨慎使用,以免意外覆盖或删除重要文件。-n
:如果目标文件已存在,则不会进行移动操作。这个选项可以用来防止覆盖已存在的文件。-r
:递归地移动整个目录及其所有内容。如果目标目录不存在,则创建它。-p
:保留源文件的元数据(例如权限和时间戳)并应用于目标文件。默认情况下,mv命令会删除源文件的元数据并替换为目标文件的元数据。
三、使用示例
- 移动文件
mv old_directory/file.txt new_directory/
将old_directory
目录中的file.txt
文件移动到new_directory
目录中。
- 重命名文件
mv oldname.txt newname.txt
将oldname.txt
文件重命名为newname.txt
。
- 移动多个文件到目录
mv file1.txt file2.txt file3.txt /path/to/directory/
将file1.txt
、file2.txt
和file3.txt
文件移动到指定目录/path/to/directory/
中。
- 递归移动目录
mv -r directory1/ /path/to/destination/
递归地移动directory1/
目录及其所有内容到/path/to/destination/
中。
9. find指令
find
是Unix/Linux系统中非常强大和常用的命令,用于在指定目录下查找文件和目录。
一、基本语法
find
命令的基本语法如下:
find [path...] [expression]
[path...]
:指定要搜索的起始目录,可以指定一个或多个目录,并且可以使用相对路径或绝对路径。如果不指定起始目录,则默认从当前目录开始搜索。[expression]
:用于指定搜索条件的参数,可以是多个表达式组成的组合。find
命令会根据这些表达式逐个进行匹配。
二、常用选项和表达式
-
按名称搜索
-name
:按文件名搜索,可以使用通配符进行模糊匹配。例如,find . -name "*.txt"
会在当前目录及子目录中查找所有以.txt
结尾的文件。-iname
:按文件名搜索,不区分大小写。例如,find /home/user -iname "*.TXT"
会查找所有以.TXT
(不区分大小写)结尾的文件。
-
按类型搜索
-type f
:搜索普通文件。-type d
:搜索目录。-type l
:搜索符号链接。- 其他类型还包括字符设备文件(
-type c
)、块设备文件(-type b
)、套接字文件(-type s
)和管道文件(-type p
)。
-
按大小搜索
-size +10M
:搜索大于10MB的文件。-size -10M
:搜索小于10MB的文件。-size 10M
:搜索正好10MB的文件。- 常见的文件大小单位有KB(
k
)、MB(M
)、GB(G
)和字节(c
,默认单位)。
-
按时间搜索
-mtime +7
:搜索修改时间超过7天的文件。-mtime -7
:搜索修改时间在7天内的文件。-mtime 7
:搜索修改时间恰好为7天的文件。- 类似地,
-atime
用于按访问时间搜索,-ctime
用于按更改时间搜索。
-
按权限搜索
-perm 755
:精确匹配权限为755的文件。-perm -755
:3个权限位都必须至少匹配755的文件。-perm /755
:3个权限位中任意一个匹配755的文件。
-
按用户和组搜索
-user username
:搜索属于特定用户的文件。-group groupname
:搜索属于特定组的文件。
-
组合条件
-and
:逻辑与(默认)。-or
:逻辑或。!
:逻辑非。- 例如,
find /home/user -name "*.txt" -or -name "*.log"
会查找所有以.txt
或.log
结尾的文件。
-
执行操作
-exec
:对找到的每个文件执行指定的命令。例如,find /home/user -name "*.txt" -exec rm {} \;
会删除所有以.txt
结尾的文件。{}
表示找到的文件或目录,\;
表示-exec
命令的结束。-ok
:与-exec
类似,但在执行命令前会提示用户确认。-delete
:直接删除找到的文件。例如,find /home/user -name "*.tmp" -delete
会删除所有以.tmp
结尾的文件。
-
限制搜索深度
-maxdepth n
:限制搜索的最大深度为n。-mindepth n
:限制搜索的最小深度为n。
-
其他选项
-empty
:搜索空文件或空目录。-inum
:按inode号搜索文件。-regex
:使用正则表达式匹配文件路径。-iregex
:使用正则表达式匹配文件路径,不区分大小写。
三、使用示例
- 查找指定文件:
find /etc -name "hosts"
会在/etc
目录及子目录中查找名为hosts
的文件。 - 查找空文件或空目录:
find . -empty
会在当前目录及子目录中查找空文件或空目录。 - 查找大于100MB的文件:
find . -size +100M
会在当前目录及子目录中查找大于100MB的文件。 - 删除指定类型的文件:
find . -type f -name "*.tmp" -exec rm {} \;
会删除当前目录及子目录中所有以.tmp
结尾的文件。
10.grep指令
grep
命令是Linux和Unix系统中用于搜索文本的强大工具。它允许用户在文件中搜索符合特定模式的字符串,并输出匹配的行。
一、基本语法
grep [选项] '模式' 文件名
[选项]
:用于控制grep
的行为,可以是多个选项的组合。'模式'
:要搜索的字符串或正则表达式。文件名
:要在其中搜索的文件。
二、常用选项
- -i 或 –ignore-case:忽略字符大小写的差别。例如,
grep -i 'hello' file.txt
会查找file.txt
中所有包含hello
(不区分大小写)的行。 - -n 或 –line-number:在显示匹配行的同时,标示出该行的行号。例如,
grep -n 'error' logfile.txt
会显示匹配error
的行及其行号。 - -v 或 –invert-match:反转匹配,只显示不包含匹配文本的行。例如,
grep -v 'temp' file.txt
会显示file.txt
中所有不包含temp
的行。 - -c 或 –count:计算并输出匹配模式的行数。例如,
grep -c 'example' textfile.txt
会输出textfile.txt
中包含example
的行数。 - -E 或 –extended-regexp:使用扩展正则表达式进行匹配。例如,
grep -E 'hello|world' file.txt
会匹配file.txt
中包含hello
或world
的行。
三、使用示例
- 查找文件中包含特定字符串的行:
grep 'hello' file.txt
- 忽略大小写查找:
grep -i 'HELLO' file.txt
- 递归查找目录中的文件:
grep -r 'hello' /path/to/directory
- 查找并显示匹配行的行号:
grep -n 'error' logfile.txt
- 查找并列出包含匹配文本的文件名:
grep -l 'test' *.txt
- 显示匹配行及其前后几行的内容:
grep -C 3 'hello' file.txt
3. 其他指令
安装和登录命令
- login:用于用户登录系统。
- shutdown:用于关闭系统,可以设定关机的时间,可以立即关机也可以延迟关机。
- halt:立即停止系统,等同于一次电气断电。
- reboot:重启系统。
- install:通常用于安装软件包(但现代Linux发行版多使用包管理器如apt、yum等)。
- mount:挂载文件系统,比如将光盘、U盘等挂载到某个目录以便访问。
- umount:卸载已挂载的文件系统。
- chsh:更改用户的登录Shell。
- exit:退出当前Shell会话。
- last:显示最近登录到系统的用户信息。
文件处理命令
- file:识别文件类型。
- mkdir:创建目录。
- dd:转换和复制文件,常用于备份整个分区或磁盘。
- diff:比较两个文件的内容差异。
- cat:连接文件并打印到标准输出。
- ln:创建硬链接或符号链接。
系统管理相关命令
- df:显示磁盘空间使用情况。
- top:实时显示系统中各个进程的资源占用情况。
- free:显示内存使用情况。
- quota:显示磁盘使用配额。
- at:在指定时间执行一次性任务。
- lp:打印文件(现代系统可能使用
lpr
等命令)。 - adduser:添加新用户。
- groupadd:添加新组。
- kill:终止进程。
- crontab:编辑用户的cron表,用于设定周期性任务。
网络操作命令
- ifconfig(已被
ip
取代,但在一些旧系统中仍可用):配置网络接口。 - ip:显示/操作路由、设备、策略路由和隧道,是
ifconfig
的现代替代品。 - ping:测试网络连通性。
- netstat:显示网络连接、路由表、接口状态等。
- telnet:远程登录协议(现代系统可能使用SSH)。
- ftp:文件传输协议。
- route:显示/修改IP路由表。
- rlogin:远程登录(现代系统可能使用SSH)。
- rcp:远程复制文件(现代系统可能使用scp)。
- finger:查询用户信息。
- mail:发送和接收邮件。
- nslookup:查询DNS记录。
系统安全相关命令
- passwd:更改用户密码。
- su:切换用户。
- umask:设置创建文件时的默认权限掩码。
- chgrp:更改文件/目录的组。
- chmod:更改文件/目录的权限。
- chown:更改文件/目录的所有者。
- chattr:改变文件属性。
- sudo:以另一个用户的身份(通常是超级用户)执行命令。
- ps:显示当前进程状态。
- who:显示当前登录到系统的用户。
其它
- tar:归档文件。
- unzip:解压缩zip文件。
- gunzip:解压缩gzip文件。
- unarj:解压缩arj文件。
- mtools:用于操作DOS文件系统的工具集。