Linux的常用命令
- 1. Linux的终端与工作区
- 1.1 终端概述
- 1.2 切换终端
- 2. Shell语言解释器
- 2.1 Shell概述
- 3. 用户登录与身份切换
- 3.1 `su` 命令
- 3.2 `sudo` 命令
- 4. 文件、目录操作命令
- 4.1 `pwd` 命令
- 4.2 `cd` 命令
- 4.3 `ls` 命令
- 4.3.1 `ls 指令叠加使用`
- 4.4 `mkdir` 命令
- 4.5 `rmdir` 命令
- 4.6 `cp` 命令
- 4.7 `rm` 命令
- 4.8 `mv` 命令
- 4.9 `cat` 命令
- 4.10 `more` 和 `less` 命令
- 4.11 `head` 和 `tail` 命令
- 4.12 `touch` 命令
- 4.13 `ln` 命令
- 4.13.1 硬链接(Hard Link)
- 4.13.2 符号链接(Symbolic Link / Symlink)
- 5. 信息显示命令
- 5.1 `grep` 命令
- 5.2 `file` 命令
- 5.3 `find` 命令
- `find` 命令的基本语法:
- 常见用法和示例:
- 5.4 `locate` 命令
- `locate` 命令的基本语法:
- 常见用法和示例:
- `locate` 与 `find` 的比较:
1. Linux的终端与工作区
1.1 终端概述
Linux操作系统通常提供多个终端,用户可以在这些终端之间切换,以实现多任务处理。常见的终端划分如下:
- tty1 到 tty6:这些是命令行控制台终端,通常在没有图形界面时使用,每个终端都是独立的工作环境。
- tty7:这个终端通常是图形用户界面(GUI),如GNOME、KDE等图形化桌面环境。
1.2 切换终端
- 切换终端:用户可以通过按
Alt + F1
到Alt + F6
来切换不同的命令行终端。这对于多任务处理非常有用,尤其在需要监控多个任务或会话时。 - 从图形界面切换到命令行终端:按
Ctrl + Alt + F1
到Ctrl + Alt + F6
可以跳到一个命令行终端。在图形界面下可以通过Ctrl + Alt + F7
切换回图形环境。
这种终端管理方式有助于在没有图形界面的环境下进行系统管理,或者在资源受限的情况下执行一些系统任务。
2. Shell语言解释器
2.1 Shell概述
Shell是用户与Linux系统之间的命令语言解释器,主要用于执行命令并与操作系统内核交互。最常见的Shell是Bash(Bourne Again Shell),它具有以下特性:
- 命令自动补齐:Bash允许通过按
Tab
键来自动补全命令和文件名,极大提高了命令输入的效率。 - 历史记录:Bash会保存用户输入的命令历史,用户可以通过上下箭头浏览和重新执行之前的命令。
- 别名:用户可以为常用命令设置别名,简化常见操作。例如,设置
alias ll='ls -l'
可以让ll
等同于ls -l
。 - 输入输出重定向和管道:可以将命令的输出重定向到文件或通过管道将一个命令的输出传递给另一个命令。例如:
ls | grep "txt"
通过管道将ls
命令的输出传递给grep
命令。 - 通配符:Bash支持多种通配符,如
*
匹配任意字符,?
匹配单个字符,[]
匹配指定范围的字符,增强了文件名和目录匹配功能。
这些特性让用户能更高效地与系统交互,执行复杂的命令任务。
3. 用户登录与身份切换
3.1 su
命令
su
(Switch User)命令用于切换到指定的用户账户,特别是切换到root账户,以获取更高的权限。其基本格式为:
su [-lm] [-c command] username
-l
:模拟用户登录环境,通常用于切换到root账户时使用。-m
:保留当前环境变量(常用于保留用户的环境)。-c
:执行指定的命令。
3.2 sudo
命令
sudo
(SuperUser Do)命令允许普通用户在输入自己密码后,以root权限执行命令,而不需要知道root账户的密码。sudo
可以增加安全性并限制root权限的使用。格式为:
sudo [-u user] command
-u user
:指定执行命令的用户(默认为root)。command
:要执行的命令。
与su
不同,sudo
命令仅授予用户在特定情况下执行特权命令的权限,减少了滥用root权限的风险。
4. 文件、目录操作命令
4.1 pwd
命令
pwd
(Print Working Directory)命令用于显示当前工作目录的绝对路径。常用格式:
pwd
-P
参数:显示实际路径,避免符号链接路径的干扰。
4.2 cd
命令
cd
(Change Directory)命令用于更改当前工作目录。常见用法包括:
-
cd ~
:进入用户的主目录(即/home/username
)。
-
cd -
:返回上一个访问的目录。 -
cd ..
:进入上一级目录。
-
cd ../..
:进入上两级目录。
4.3 ls
命令
ls
(List)命令用于列出目录中的文件和子目录。常用选项包括:
-a
:列出所有文件(包括隐藏文件,即以.
开头的文件)。-l
:以长格式列出文件信息,包括文件的权限、所有者、大小、修改时间等。- ls -l == ll;
-F
:在文件名后添加标识符,表示文件类型(如目录后加/
,可执行文件后加*
)。-R
:递归列出目录及其所有子目录的内容。-t
:按文件的修改时间排序,最近修改的文件排在前面。
4.3.1 ls 指令叠加使用
- ls -al | more :命令会列出当前目录下的所有文件(包括隐藏文件),并使用长格式显示它们的详细信息,然后通过 more 命令分页显示这些信息。这样,当目录中文件很多时,你可以逐页查看输出,而不会一次性显示所有内容。
4.4 mkdir
命令
mkdir
(Make Directory)命令用于创建目录。常用选项包括:
-m
:指定目录的权限。-p
:递归创建多级目录,例如mkdir -p /path/to/directory
可以一次性创建多个目录。
4.5 rmdir
命令
rmdir
(Remove Directory)命令用于删除空目录。常用选项包括:
-p
:递归删除父目录,只有在目录为空时才能删除。-v
:显示删除过程。
4.6 cp
命令
cp
(Copy)命令用于复制文件或目录。常用选项包括:
-f
:强制覆盖目标文件。-i
:在覆盖文件时进行提示。-R
:递归复制目录及其内容。-b
:备份已存在的目标文件。-a
:保持文件的原有属性(包括权限、时间戳等)。
4.7 rm
命令
rm
(Remove)命令用于删除文件或目录。常用选项包括:
-d
:删除空目录。-f
:强制删除,不提示确认。-r
或-R
:递归删除目录及其内容。-v
:显示删除过程。
4.8 mv
命令
mv
(Move)命令用于移动或重命名文件。常用选项包括:
-b
:在覆盖目标文件之前备份文件。-f
:强制覆盖目标文件。-i
:在覆盖文件时进行确认。-u
:仅当源文件比目标文件新时,才执行覆盖
这里 aa就被重命名为ab了
4.9 cat
命令
cat
(Concatenate)命令用于显示文件内容、创建文件或合并多个文件。常用选项包括:
-n
:为输出的每行加上行号。
带行号查看testfile.txt的内容。
合并aa.txt 和bb.txt 并重命名为cc.txt。(aa,bb不会删除)
4.10 more
和 less
命令
这两个命令用于分页显示文件内容。
more
:从文件开头开始显示,按空格键翻页。less
:与more
类似,但提供更强大的导航功能,用户可以向前或向后翻页,支持搜索等。
less查看testfile.txt
4.11 head
和 tail
命令
head
:显示文件的前n行。例如:head -n 10 file.txt
显示文件的前10行。tail
:显示文件的后n行。例如:tail -n 10 file.txt
显示文件的后10行。
4.12 touch
命令
touch
命令用于修改文件的时间戳(访问时间和修改时间),或者创建新的空文件。常用选项包括:
-a
:仅修改访问时间。-m
:仅修改修改时间。
4.13 ln
命令
ln
(Link)命令用于创建硬链接或符号链接。常用选项包括:
-s
:创建符号链接(软链接)。-f
:强制覆盖已有链接。-i
:在覆盖已有的链接时,提示用户确认。-v
:显示命令的详细信息,显示已创建的链接。
4.13.1 硬链接(Hard Link)
硬链接是指多个文件名指向同一个 inode(文件内容和元数据的集合)。删除一个硬链接不会删除文件内容,除非所有指向该 inode 的链接都被删除。
基本用法:
命令格式
ln <源文件> <目标链接>
示例:
ln file1.txt file2.txt
这条命令会创建一个名为 file2.txt 的硬链接,它指向 file1.txt 文件的同一个内容。
注意:
硬链接不能跨文件系统(即不能链接到不同的磁盘分区)。
硬链接无法创建对目录的链接(除非使用超级用户权限)。
4.13.2 符号链接(Symbolic Link / Symlink)
符号链接是一个指向另一个文件或目录的快捷方式。它类似于 Windows 中的快捷方式。符号链接可以跨文件系统,并且可以创建对目录的链接。
命令格式:
ln -s <源文件> <目标链接>
示例:
ln -s /path/to/file1.txt /path/to/symlink.txt
这条命令会创建一个名为 symlink.txt 的符号链接,它指向 /path/to/file1.txt。
查看符号链接: 使用 ls -l 命令查看符号链接的详情。符号链接通常会显示目标文件,例如:
ls -l symlink.txt
输出:
lrwxrwxrwx 1 user user 20 Oct 1 10:00 symlink.txt -> /path/to/file1.txt
其中,l 表示这是一个符号链接,-> /path/to/file1.txt 表示符号链接指向的目标。
删除符号链接: 删除符号链接不会影响原文件内容,只是删除链接本身。
rm symlink.txt
5. 信息显示命令
5.1 grep
命令
grep 命令的基本语法:
grep [选项] '模式' 文件
模式:是要搜索的文本或正则表达式。
文件:指定要搜索的文件名。
常见的 grep 命令用法:
基本用法:查找文本中的模式
grep 'pattern' file.txt
该命令会在 file.txt 文件中查找包含 "pattern" 的行,并将匹配的行输出。
示例:
grep 'hello' file.txt
这会列出 file.txt 中所有包含 "hello" 的行。
忽略大小写(-i 选项) -i 选项使 grep 在搜索时忽略大小写。
grep -i 'pattern' file.txt
示例:
grep -i 'hello' file.txt
这个命令会匹配 hello、Hello、HELLO 等。
显示行号(-n 选项) -n 选项让 grep 在输出时显示匹配行的行号。
grep -n 'pattern' file.txt
示例:
grep -n 'hello' file.txt
输出类似:
2:hello world
5:Hello there
显示不匹配的行(-v 选项) -v 选项会显示不匹配给定模式的行。
grep -v 'pattern' file.txt
示例:
grep -v 'hello' file.txt
这个命令会显示 file.txt 中所有不包含 "hello" 的行。
匹配整个单词(-w 选项) -w 选项确保匹配的是完整的单词。
grep -w 'pattern' file.txt
示例:
grep -w 'hello' file.txt
这个命令只会匹配包含 "hello" 作为单独单词的行,而不会匹配 "helloworld" 或 "myhello"。
递归查找(-r 或 -R 选项) -r 或 -R 选项使 grep 在指定目录及其子目录中递归查找。
grep -r 'pattern' /path/to/directory/
示例:
grep -r 'hello' /home/user/
这个命令会递归查找 /home/user/ 目录及其子目录中的所有文件,列出包含 "hello" 的行。
显示匹配的文件名(-l 选项) -l 选项只显示包含模式的文件名,而不显示匹配的行内容。
grep -l 'pattern' *.txt
示例:
grep -l 'hello' *.txt
这个命令会列出当前目录下所有包含 "hello" 的 .txt 文件的文件名。
显示匹配的行数(-c 选项) -c 选项让 grep 输出匹配模式的行数,而不是显示匹配的行。
grep -c 'pattern' file.txt
示例:
grep -c 'hello' file.txt
这个命令会输出 file.txt 中包含 "hello" 的行数。
显示匹配前后的上下文(-B, -A, -C 选项)
-B N:显示匹配行之前的 N 行。
-A N:显示匹配行之后的 N 行。
-C N:显示匹配行之前和之后的 N 行(上下文行)。
示例:
grep -B 2 'hello' file.txt
这个命令会显示所有包含 "hello" 的行及其之前的 2 行内容。
grep -A 3 'hello' file.txt
这个命令会显示所有包含 "hello" 的行及其之后的 3 行内容。
grep -C 2 'hello' file.txt
这个命令会显示所有包含 "hello" 的行及其前后各 2 行内容。
使用正则表达式(-E 选项) grep 默认使用基本正则表达式。如果你需要使用扩展正则表达式(如 +、?、{} 等),可以使用 -E 选项,或者使用 egrep(egrep 是 grep -E 的简写)。
示例:
grep -E 'he+llo' file.txt
这个命令会匹配 hello、heello、heeeello 等字符串。
结合管道使用 grep
grep 通常与其他命令结合使用,通过管道 (|) 将其他命令的输出传递给 grep 进行筛选。
示例:
ps aux | grep 'nginx'
这个命令会列出所有包含 "nginx" 的进程信息。
5.2 file
命令
file 命令的基本语法:
file [选项] 文件名
文件名:要检测类型的文件或目录。
选项:可选,用于控制命令的行为。
常见用法和示例:
查看单个文件的类型:
file example.txt
输出示例:
example.txt: ASCII text
这表示 example.txt 文件是一个 ASCII 文本文件。
查看二进制文件的类型:
file example.bin
输出示例:
example.bin: data
这表示 example.bin 文件是一个二进制数据文件。file 会根据文件的内容尝试识别类型。
查看一个图像文件的类型:
file example.jpg
输出示例:
example.jpg: JPEG image data, EXIF standard 2.21
这表示 example.jpg 是一个 JPEG 图像文件,并且包含 EXIF 信息。
查看可执行文件的类型:
file example.out
输出示例:
example.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 4.15.0, not stripped
这表示 example.out 是一个 64 位 ELF 可执行文件。
查看多个文件的类型:
file example1.txt example2.jpg example3.bin
输出示例:
example1.txt: ASCII text
example2.jpg: JPEG image data, EXIF standard 2.21
example3.bin: data
这表示 file 可以一次性检测多个文件,并显示每个文件的类型。
查看文件类型并输出详细信息(-i 选项): -i 选项显示文件的 MIME 类型,这对于确定文件的具体格式(如文本编码、图像格式等)非常有用。
file -i example.txt
输出示例:
example.txt: text/plain; charset=us-ascii
这表示 example.txt 是一个普通文本文件,字符集为 US-ASCII。
查看文件类型并输出文件的编码(-b 选项): -b 选项用于省略 file 命令的文件名输出,只显示文件的类型信息。
file -b example.txt
输出示例:
ASCII text
这表示 example.txt 是一个 ASCII 文本文件,并且仅输出类型信息而不显示文件名。
查看文件是否是压缩文件: 如果你不确定文件是否被压缩,可以使用 file 命令查看:
file example.tar.gz
输出示例:
example.tar.gz: gzip compressed data, from Unix, last modified: Mon May 10 10:21:33 2021
这表示 example.tar.gz 是一个 GZIP 压缩文件。
查看文件的 MIME 类型(-m 选项): -m 选项可以让你指定一个自定义的魔法文件来解析文件类型(通常不常用)。
file -m /usr/share/file/magic example.txt
查看一个目录中所有文件的类型(递归检查): 使用 find 和 file 配合,可以查看一个目录中所有文件的类型:
find /path/to/dir -type f -exec file {} \;
这条命令会递归地查看 /path/to/dir 目录下的所有文件并显示它们的类型。
5.3 find
命令
find
是一个强大的命令,用于在文件系统中查找符合条件的文件或目录。它通过递归搜索指定目录及其子目录中的文件,并根据用户指定的条件(如文件名、修改时间、大小等)进行过滤。
find
命令的基本语法:
find [路径] [条件] [操作]
- 路径:要开始搜索的目录路径,通常为
/
(根目录)或当前目录.
。 - 条件:指定查找的条件,如文件名、文件类型、修改时间等。
- 操作:对查找到的文件进行操作,如删除、打印、修改权限等。
常见用法和示例:
-
查找指定目录下的所有文件:
find /path/to/directory
这条命令会递归查找
/path/to/directory
目录下的所有文件和子目录。 -
查找指定目录下的所有文件(包括子目录)并按文件名查找:
find /path/to/directory -name 'pattern'
其中
pattern
是文件名的模式,支持通配符。示例:
查找/home/user/
目录下所有以.txt
结尾的文件:find /home/user -name '*.txt'
-
忽略大小写进行查找(
-iname
):
-iname
选项可以在查找文件时忽略大小写。示例:
查找所有以hello
或HELLO
等形式命名的文件:find /home/user -iname 'hello*'
-
查找某个类型的文件(
-type
):
使用-type
选项查找指定类型的文件:f
:普通文件d
:目录l
:符号链接(symlink)
示例:
查找/home/user/
目录下的所有目录:find /home/user -type d
查找
/home/user/
目录下的所有普通文件:find /home/user -type f
-
查找文件并执行操作(
-exec
):
-exec
选项允许在找到符合条件的文件时执行指定的命令。常用于删除、移动文件或修改文件权限等操作。示例:
查找所有.log
文件并删除:find /path/to/directory -name '*.log' -exec rm {} \;
rm {}
:执行删除命令。{}
是一个占位符,表示find
找到的每个文件。\;
用来结束-exec
选项。
示例:
查找所有.txt
文件并修改权限:find /home/user -name '*.txt' -exec chmod 644 {} \;
-
查找修改时间在一定范围内的文件(
-mtime
、-atime
、-ctime
):-mtime
:按文件的最后修改时间查找文件。-atime
:按文件的最后访问时间查找文件。-ctime
:按文件的状态改变时间查找文件。
选项后面可以跟数字或带符号的数字:
+n
:表示查找修改时间超过n
天的文件。-n
:表示查找修改时间在n
天内的文件。n
:表示查找恰好修改时间为n
天的文件。
示例:
查找 7 天前修改的文件:find /path/to/directory -mtime +7
查找过去 7 天内访问过的文件:
find /path/to/directory -atime -7
-
查找指定大小的文件(
-size
):
-size
选项用于查找特定大小的文件。单位可以是:b
:块(512字节)c
:字节k
:KBM
:MBG
:GB
示例:
查找大于 100MB 的文件:find /path/to/directory -size +100M
查找小于 10KB 的文件:
find /path/to/directory -size -10k
-
查找并列出空文件或空目录(
-empty
):
-empty
选项用于查找空文件或空目录。示例:
查找空目录:find /path/to/directory -type d -empty
查找空文件:
find /path/to/directory -type f -empty
-
查找指定权限的文件(
-perm
):
-perm
选项用于查找具有特定权限的文件,可以指定权限的数字值或符号模式。示例:
查找权限为 755 的文件:find /path/to/directory -perm 755
查找所有可执行的文件:
find /path/to/directory -perm /111
-
查找文件并限制最大搜索深度(
-maxdepth
和-mindepth
):-maxdepth N
:限制搜索的最大深度为N
级。-mindepth N
:限制搜索的最小深度为N
级。
示例:
查找/path/to/directory
中最多一层深度的文件:find /path/to/directory -maxdepth 1
5.4 locate
命令
locate
是一个非常快速的文件查找工具,它通过查询一个预先构建的数据库来查找文件,而不是实时遍历文件系统。因此,locate
命令的查找速度非常快,但前提是数据库必须是最新的。默认情况下,locate
使用的数据库是由 updatedb
命令定期更新的。
locate
命令的基本语法:
locate [选项] 查找模式
- 查找模式:这是你要查找的文件或目录的名称模式,支持通配符(如
*
、?
)来进行模糊匹配。
常见用法和示例:
-
查找文件:
locate filename
这条命令会在
locate
数据库中查找所有包含 “filename” 的文件路径。示例:
查找所有包含 “nginx” 的文件路径:locate nginx
输出示例:
/etc/nginx/nginx.conf /var/log/nginx/access.log /usr/sbin/nginx
-
使用通配符查找文件:
locate
支持使用通配符来进行模糊匹配:*
:匹配任意字符(包括零个字符)。?
:匹配一个字符。
示例:
查找所有.txt
结尾的文件:locate *.txt
查找以 “log” 开头且以 “.txt” 结尾的文件:
locate log*.txt
-
查找并限制结果显示(
-n
选项):
-n
选项用来限制显示的结果数。示例:
显示匹配到的前 10 个结果:locate -n 10 nginx
-
查看详细路径信息(
-i
选项):
-i
选项用于忽略大小写进行查找。示例:
查找所有不区分大小写的 “nginx” 文件:locate -i nginx
-
查看文件的完整路径(
-c
选项):
-c
选项会显示匹配到的文件数量,而不是文件路径。示例:
查找包含 “nginx” 的文件,并输出文件总数:locate -c nginx
-
更新数据库(
updatedb
命令):
locate
使用的数据库并非实时更新,而是定期通过updatedb
命令来更新。通常这个过程是由系统定时任务(如 cron)来执行的,但用户也可以手动执行updatedb
来更新数据库。示例:
手动更新数据库:sudo updatedb
-
查找文件路径中包含特定目录(
-r
选项):
-r
选项用于使用正则表达式来查找路径中符合条件的文件。示例:
查找路径中包含 “nginx” 的文件:locate -r nginx
-
查找文件路径中排除某个目录(
-e
选项):
-e
选项用于排除包含某个目录的文件。示例:
查找包含 “log” 的文件,但排除路径中包含 “nginx” 的文件:locate log -e nginx
locate
与 find
的比较:
- 速度:
locate
基于一个预先构建的数据库来查找文件,因此搜索速度非常快;而find
则是实时查找文件,速度较慢,尤其是在大文件系统上。 - 实时性:
locate
依赖于数据库,如果数据库没有及时更新,可能无法找到最近添加的文件。而find
是实时查找,能找到最新的文件。 - 使用场景:如果你需要快速查找文件且不需要实时更新,可以使用
locate
;如果需要实时查找文件,或者需要复杂的查找条件(如查找文件类型、大小等),则应使用find
。