Linux常用命令

# Linux常用命令

# 文件和目录操作

# 1.1 ls 命令

ls 命令:列出当前目录的文件和子目录,多个参数可以组合使用

# 列出当前目录可见的文件和子目录
ls
1
2
# 列出当前目录可见的文件和子目录,显示文件和目录,包括文件的权限、所有者、大小、修改日期等详细信息
ls -l
1
2
# 列出当前目录所有文件(包括隐藏)的详细信息
ls -al
1
2
# 列出当前目录所有文件(包括隐藏)的详细信息,用人类可读的方式显示大小
ls -alh
1
2
# 列出当前目录所有文件(包括隐藏)的详细信息,用人类可读的方式显示大小
ls -alh
1
2
# 按时间顺序,列出当前目录所有文件(包括隐藏)的详细信息
ls -alt
1
2
# 按修改时间顺序,列出当前目录所有文件(包括隐藏)的详细信息
ls -altr
1
2
# 列出文件并标记颜色分类
ls --color=auto
1
2

# 1.2 cd 命令

cd 命令:切换到指定目录

# 切换到指定目录(/path/to/directory)
cd /path/to/directory
1
2
# 切换到根目录
cd /
1
2
# 切换到当前用户家目录
cd ~
1
2
# 切换到上个工作目录
cd -
1
2
# 切换到上级目录
cd ..
1
2
# 切换到上级的上级目录
cd ../..
1
2

# 1.3 mkdir 命令

mkdir 命令,用来创建目录

# 创建一个名为directory的目录
mkdir directory
1
2
# 递归创建目录,如果目录的父级目录不存在,则一并创建,可以创建多层目录
mkdir -p parent/child
1
2
# 创建一个名为directory的目录,并将其权限设置为755
mkdir -m 755 directory
1
2

# 1.4 pwd 命令

pwd 命令用来显示当前目录的绝对路径

# 显示当前所在目录的绝对路径
pwd
1
2

# 1.5 rmdir 命令

rmdir 命令用来删除空目录

# 删除一个名为 directory 的空目录,不为空则报错
rmdir directory
1
2

# 1.6 tree 命令

tree 命令用于以树状结构显示目录的内容

# 显示当前目录的树状结构,包括所有文件和子目录
tree
1
2
# 显示指定目录的树状结构,只显示目录,不显示文件
tree -d /path/to/directory
1
2
# 显示当前目录的树状结构,包括所有文件和子目录,限制树的层级深度为2层
tree -L 2
1
2
# 显示当前目录的树状结构,包括所有文件和子目录,限制树的层级深度为2层,并存储到directory.txt文件中
tree -L 2 > directory.txt
1
2
# 只显示符合特定模式的文件和目录
tree -P "*.txt"
1
2

# 1.7 touch 命令

touch 命令用于创建空文件或更新文件的访问和修改时间 参数说明: 使用 -a 参数仅更新文件的访问时间,而不修改文件内容。 使用 -c 参数用于检查文件是否存在,如果文件不存在,则不会创建新文件。 使用 -m 参数仅更新文件的修改时间,而不修改文件内容。 使用 -r 参数并指定参考文件,可以将新文件的时间设置为与参考文件相同。 使用 -t 参数并指定时间戳,可以使用指定的时间创建文件

# 创建一个名为 file.txt 的空文件
touch file.txt
1
2
# 同时创建多个文件
touch file1.txt file2.txt file3.txt
1
2
# 更新file.txt文件的访问和修改时间
touch -a file.txt
1
2

# 1.8 ln 命令

ln 命令用于创建链接(硬链接或软链接)来关联文件 参数说明: 参数 -s:创建符号链接(软链接)。 参数 -f:强制创建链接,即使目标文件已存在。 参数 -v:显示创建链接的详细信息。 硬连接:硬链接是指向文件 inode 的直接链接,硬链接与原始文件之间的关系是平等的,无论是原始文件还是硬链接,对其进行任何修改都会在另一个上反映出来,硬链接只能在同一个文件系统中创建,只能指向文件 软连接:软链接是一个指向目标文件或目录的特殊文件,类似于 Windows 系统中的快捷方式。软链接包含目标的路径名,而不是直接指向数据块。当访问软链接时,系统会跟随链接并找到目标文件,软链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给软链接文件设置存取权限是没有意义的。

# 创建 file.txt 文件的硬链接 hardlink.txt
ln file.txt hardlink.txt
1
2
# 创建 /path/to/target 目录的软链接 symlink
ln -s /path/to/target symlink
1
2

# 1.9 rename 命令

rename 命令用于批量重命名文件或目录,它可以根据指定的规则来修改文件或目录的名称 命令格式一般为 rename <表达式> <文件列表> 注意:使用规则批量修改名称,一定要进行测试,防止意外发送

# 在当前文件夹下的txt类型的文件前面添加前缀 prefix_
rename 's/^/prefix_/' ./*.txt
1
2

# 1.10 stat 命令

stat 命令用于显示文件或文件夹的详细状态信息,包括文件的权限、大小、时间戳等,比ls 更详细

# 显示file.txt文件的详细状态信息
stat file.txt
1
2

# 1.11 file 命令

file 命令用于确定文件的类型。它会根据文件的内容和特征进行分析,并提供关于文件类型的信息,可能不准确 参数 -b:以简短形式输出文件类型。 参数-i:以 MIME 类型格式输出文件类型。 参数-f <文件>:指定包含要检查的文件列表的文件。 参数-L:如果目标是符号链接,则跟踪链接的目标文件类型。 参数-z:对压缩文件进行解压缩并确定其类型。

# 简短形式输出myfile.txt文件类
file -b myfile.txt
1
2

# 1.12 find 命令

find 命令用于在指定的目录层次结构中查找符合条件的文件和目录。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 命令样例:find <查询路径> <查找条件> <结果操作> 使用 -name 参数指定要匹配的文件名模式,支持使用通配符进行模式匹配。 使用 -type 参数指定要搜索的文件类型,例如普通文件、目录、符号链接等。 使用 -size 参数指定要搜索的文件大小范围,可以使用+或-符号表示大于或小于某个值。 使用 -mtime 参数指定要搜索的文件修改时间范围,可以使用+或-符号表示在多少天之前或之后修改的。 使用 -exec 参数指定对搜索到的文件执行的命令。使用{}表示匹配到的文件。 还可以使用逻辑运算符 -o(或)和 -a(与)组合多个条件。

# 列出当前目录及子目录下所有文件和文件夹
find .
1
2
# 在 /log 目录下查找以 .log 结尾的文件名
find /log -name "*.log"
1
2
# 查找当前目录及其子目录中所有的目录
find . -type d
1
2
# 查找当前目录及其子目录中所有以 .txt 结尾的文件,并删除它们
find <路径> -name <文件名模式> -exec <命令> {} \;
1
2
# 在当前目录及子目录下查找所有以 .txt 和 .pdf 结尾的文件
find . -name "*.txt" -o -name "*.pdf"
1
2
# 匹配文件路径或者文件
find /usr/ -path "*local*"
1
2
# 基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
1
2
# 查找当前目录及其子目录中所有大于 1MB 的文件
find . -size +1M
1
2
# 查找当前目录及其子目录中最近 7 天内修改过的文件
find . -mtime -7
1
2

# 1.13 cp 命令

cp 命令用于复制文件或目录。它允许将一个或多个源文件或目录复制到指定的目标位置 命令格式:cp [参数] <源文件/目录> <目标文件/目录> 参数 -r 或 -R:复制目录及其内容(递归复制)。 参数 -i:在目标文件已存在时,提示是否覆盖。 参数 -v:显示详细的复制过程。 参数 -p:保留源文件的权限、所有者和时间戳。 参数 -f:强制复制,无需确认覆盖。

# 复制当前目录下file.txt文件到/path/to/destination/位置
cp file.txt /path/to/destination/
1
2
# 复制当前目录下file.txt文件到/path/to/destination/位置,并改名称为file2.txt
cp file.txt /path/to/destination/file2.txt
1
2
# 复制当前目录下多个文件到目标/path/to/destination/位置
cp file1.txt file2.txt /path/to/destination/
1
2
# 将目录 /usr/cp下的所有文件及其子目录复制到目录 /usr/cp2 中
cp -r /usr/cp /usr/cp2
1
2
# 将目录 /usr/cp 中的以a开头的所有txt文件复制到目录 /usr/cp2 中
cp -i /usr/cp a*.txt /usr/cp2
1
2

# 1.14 mv 命令

mv 命令用于移动文件或重命名文件,它可以将一个或多个源文件或目录移动到指定的目标位置或重命名文件 命令格式:mv [参数] <源文件/目录> <目标文件/目录> 参数 -r 或 -R:移动目录及其内容(递归复制)。 参数 -i:在目标文件已存在时,提示是否覆盖。 参数 -v:显示详细的复制过程。

# 移动当前目录下file.txt文件到/path/to/destination/位置
mv file.txt /path/to/destination/
1
2
# 移动当前目录下file.txt文件到/path/to/destination/位置,并改名称为file2.txt
mv file.txt /path/to/destination/file2.txt
1
2
# 移动当前目录下多个文件到目标/path/to/destination/位置
mv file1.txt file2.txt /path/to/destination/
1
2
# 将目录 /usr/cp下的所有文件及其子目录移动到目录 /usr/cp2 中
mv -r /usr/cp /usr/cp2
1
2
# 将目录 /usr/cp 中的以a开头的所有txt文件移动到目录 /usr/cp2 中
mv -i /usr/cp a*.txt /usr/cp2
1
2
# 当前目录下file.txt文件,重名了为file2.txt文件
mv file.txt file2.txt
1
2

# 1.15 rm 命令

rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 命令格式: rm [参数] <文件/目录> 使用 -r 或 -R 参数来进行递归删除。 使用 -f 参数来强制删除,无需确认。 使用 -i 参数可以在删除前提示用户确认每个文件的删除操作。 使用 -v 参数可以显示详细的删除过程,列出每个删除的文件。

# 删除test.txt文件
rm test.txt  
1
2
# 删除多个文件
rm file1.txt file2.txt
1
2
# 交互式删除文件
rm -i test.txt test2.txt
1
2
# 删除当前目录下的所有文件和目录
rm -r *
1
2
# 删除目录下的所有文件和目录
rm -r testdir/
1
2
# 强制删除目录下的所有文件和目录
rm -rf testdir
1
2
# 显示当前删除操作的详情
rm -v testdir
1
2

# 1.16 locate 命令

locate 命令和 slocate 命令都用来查找文件或目录,locate 命令其实是 find -name 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。

# 搜索名称为file.txt的文件
locate file.txt
1
2
# 搜索所有 txt 文件
locate *.txt
1
2
# 搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh
1
2

# 文件和目录权限及归属操作

# 2.1 chmod 命令

chmod 命令用来变更文件或目录的权限 chmod 命令的格式:chmod [参数] 字母或者数字权限模式 文件或目录 参数: 参数 -c:显示每个修改的文件的详细信息,包括权限更改前后的值。 参数 -f:不显示错误信息。 参数 -v:显示每个修改的文件的详细信息,但不显示权限更改前后的值。 参数 -R:递归地修改目录及其子目录下的文件或目录权限。 参数 --reference=<参考文件或目录>:将目标文件或目录的权限设置为与参考文件或目录相同。 参数 --version:显示命令的版本信息。 参数 --help:显示命令的帮助信息。 权限模式: 字母模式: u:表示用户(所有者)权限。 g:表示用户组权限。 o:表示其他用户权限。 a:表示所有用户权限(包括用户、用户组和其他用户)。 +:添加指定的权限。 -:移除指定的权限。 =:设置指定的权限。 r:读取权限。 w:写入权限。 x:执行权限。 X:只对目录或已经具有可执行权限的文件进行操作。 s:设置文件的 setuid 或 setgid 位。 t:设置目录的粘着位。 数字模式: 数字模式使用 0-7 的三位数字表示权限,分别对应用户、用户组和其他用户的权限。其中,每个数字值 4表示读、2表示写、 1 表示执行,权限组合即为值相加。例如,权限为 rwxr-xr-x 的数字模式为 755。

# 将文件 file.txt 设置为所有者可读写,用户组和其他用户只读
# 字母模式
chmod u=rw,go=r file.txt
# 数字模式
chmod 644 file.txt
1
2
3
4
5
# 将目录 directory/ 及其所有子目录和文件的权限设置为所有者可读写执行,用户组和其他用户只读执行
# 字母模式
chmod -R u=rwx,go=rx directory/
# 数字模式
chmod 755 file.txt
1
2
3
4
5

# 2.2 chown 命令

chown 命令:用于修改文件或目录的所有者(user)和所属组(group)的命令 语法规则:chown [选参数] 用户[:组] 文件或目录 参数 -R:递归地修改目录及其子目录下的文件或目录的所有者和所属组。 参数 --reference=<参考文件或目录>:将目标文件或目录的所有者和所属组设置为与参考文件或目录相同。

# 将文件 file.txt 的所有者更改为 newuser
chown newuser file.txt
1
2
# 将文件 file.txt 的所有者更改为 newuser 所属组更改为newgroup
chown newuser:newgroup file.txt
1
2
# 将directory目录及其所有子目录和文件的所有者更改为 newuser 所属组更改为newgroup
chown -R newuser:newgroup directory/
1
2
# 将文件 file.txt 的所有者和所属组设置为与参考文件 reference.txt 相同
chown --reference=reference.txt file.txt
1
2

# 文件内容查看编辑

# 2.1 cat 命令

cat命令:用于将文件内容输出到标准输出(屏幕)或将多个文件合并为一个文件。 注意:cat 命令会将整个文件内容加载到内存中,如果文件非常大,超出了系统可用的内存容量,可能会导致系统性能下降或出现内存不足的情况。不推荐使用该命令打开大文件。 命令参考:cat [参数] [文件] 参数说明: 参数 -n:显示行号,将每一行前面加上行号。 参数 -b:显示行号,只对非空行进行编号。 参数 -s:合并连续的空行为一个空行。

# 显示file.txt文件的内容,建议不要直接打开大文件
cat file.txt
1
2
# 将多个文件的内容合并输出到屏幕
cat file1.txt file2.txt
1
2
# 将文件file1.txt和文件file2.txt的内容合并成为file3.txt文件
cat file1.txt file2.txt > file3.txt
1
2
# 将文件file1.txt的内容追加到文件file2.txt的末尾
cat file1.txt >> file2.txt
1
2

# 2.2 head 命令

head命令:显示文件的开头部分或从标准输入中读取内容的前几行,使用文本模式来处理文件读取前10行

# 显示 file.txt 的前 10 行内容
head file.txt
1
2
# 显示 file.txt 的前 5 行内容
head -n 5 file.txt
1
2
# 显示 file.txt 的前 100 个字节
head -c 100 file.txt
1
2
# 显示文件名和内容
head -v file1.txt file2.txt
1
2

# 2.3 tail 命令

tail 命令:用于显示文件的末尾几行内容,默认情况下显示最后 10 行 命令格式:tail [参数] [文件] 参数: 参数 -n <数值>:指定要显示的行数 参数 -c <数值>:指定要显示的字节数 参数 -f:持续显示文件的末尾内容,并随着文件的更新进行实时刷新。适用于查看日志文件等实时更新的情况。

#  显示 file.txt 的最后 10 行内容
tail file.txt
1
2
#  显示 file.txt 的最后 5 行内容
tail -n 5 file.txt
1
2
#  显示 file.txt 的最后 100 个字节
tail -c 100 file.txt
1
2
#  实时刷新显示 file.txt 的末尾内容
tail -f file.txt
1
2

# 2.4 less 命令

less 命令:逐页显示文本文件的内容,适合查看大文本内容,并且允许用户浏览和搜索文件内容,常用于日志搜索和查看。 命令格式:less [参数] [文件] 参数: 参数 -N:显示行号 参数 -i:忽略搜索时的大小写 在 less 命令打开文件的查看模式中,可以使用方向键上下移动浏览内容。还可以使用其他命令进行导航。 可以使用的有 空格键:向下滚动一屏。 b:向上滚动一屏。 G:跳转到文件末尾。 g:跳转到文件开头。 q:退出 less 查看模式 less 查看模式中搜索: 当在查看模式中输入/ 或者 ?后即可进入搜索模式,可以使用正则匹配 /?不同的是,/是从当前位置向下匹配, ?是从当前位置向上匹配 匹配后,可以使用 n(下一个匹配项)和 N(上一个匹配项)跳转匹配项

# 逐页显示 file.txt 的内容
less file.txt
1
2
# 逐页显示 file.txt 的内容并显示行号
less -N file.txt
1
2
# 逐页显示 file.txt 的内容,搜索时忽略大小写
less -i file.txt
1
2

# 2.5 sed 命令

sed 命令读取文本文件的内容,并根据提供的编辑指令进行处理,可以进行替换、删除、插入等操作,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾,而不会修改原始文件内容,除非你使用重定向存储输出。 命令格式:sed [参数] [命令] [文件] 参数: 参数 -n:关闭默认输出,只输出经过处理的结果。 参数 -i:直接修改原始文件,而不是将结果输出到标准输出。 参数 s/pattern/replacement/:替换模式 pattern 出现的内容为 replacement 参数 d:删除匹配到的行 参数 p:打印匹配到的行 参数 i:在指定行之前插入文本 参数 a:在指定行之后追加文本

# 将 file.txt 文件中第一次出现的"Hello"替换为"Hi"
sed 's/Hello/Hi/' file.txt
1
2
# 将 file.txt 文件中出现的"Hello"全替换为"Hi"
sed 's/Hello/Hi/g' file.txt
1
2

在大的日志文件中,我们可能只需要指定之间段的日志,方便查看,则可以如下处理 使用正则匹配,将logfile.txt文件中的。时间范围为2023-05-28 09:00:00-18:00:00之间的输出到1.txt文件

# 截取指定时间范围内的日志并将结果输出到 1.txt 文件中
sed -n '/^2023-05-28 09:00:00/,/^2023-05-28 18:00:00/p' logfile.txt > 1.txt
1
2

# 2.6 grep 命令

grep是一个用于搜索文本的强大命令行工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,在搜索时使用逐行匹配的方式,可以用于搜索大文本文件,可以指定搜索一个或者多个 grep命令的基本语法:grep [参数] 模式 [文件] 参数: 参数 -i:忽略大小写进行匹配。 参数 -v:反向匹配,只显示不匹配的行。 参数 -r:递归地在目录及其子目录中搜索。 参数 -l:只显示包含匹配项的文件名,而不显示匹配的具体行。 参数 -n:显示匹配行的行号。 参数 -c:仅显示匹配行的计数。 参数 -e:指定多个模式进行匹配。

# 在example.txt文件中搜索包含单词"example"的行,并忽略大小写
grep -i "example" example.txt
1
2
# 在/path/to/directory目录及其子目录中递归搜索包含单词"error"的行,并显示匹配的行号
grep -r -n "error" /path/to/directory
1
2
# 在file.txt文件中,反向匹配,只显示不包含单词"success"的行
grep -v "success" file.txt
1
2
# 在fruits.txt文件中搜索包含单词"apple"或"banana"的行
grep -e "apple" -e "banana" fruits.txt
1
2

# 2.7 vim 命令(应用)

Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富。基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)插入模式(Insert mode)底线命令模式(Last line mode) 用户刚刚启动 vi/vim,便进入了命令模式, 在命令模式下按下 i 就进入了输入模式,在命令模式下按下 :(英文冒号)就进入了底线命令模式。

简单常用命令

命令模式下,按 i 进入插入模式,按 ESC 回到命令模式 命令模式下输入:wq进行文件保存并退出 (:w 存盘, :q 退出) (注::w 后可以跟文件名) 命令模式下使用hjkl (可以前下上后移动光标),也可以使用光标键 (←↓↑→)。 命令模式下,按 a 进入插入模式,在光标后插入 命令模式下,按 o (小写字母o) 进入插入模式,在光标当前行后,插入一个新行 命令模式下,按 O (大写字母O)进入插入模式,在光标当前行前,插入一个新行 命令模式下,按 0 (数字零),到本行,行头 命令模式下,按 $到本行,行尾 命令模式下,输入/搜索词,然后回车可在文本中进行搜索,按n可跳转到下一个匹配项目

vim/vi 经典键位图 vim/vi 经典键位图

# 压缩和解压缩

# 3.1 `` 命令

# 

1
2

# 系统信息和状态

# 4.1 `` 命令

# 

1
2

#

# 6.1 `` 命令

# 

1
2

# 相关扩展

Linux 用 户分为:拥有者、组群(Group)、其他(other),Linux 系统中,预设的情況下,系统 中所有的帐号与一般身份使用者,以及 root 的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!

# Linux 文件的用户权限的分析图

  drwxr-xr-x   5 root root2   144 May 23 02:07 .test
# ↑╰┬╯╰┬╯╰┬╯    
# ┆ ┆  ┆  ╰┈ 第8到10位 表示其他用户对该目录的读写权限 ,只有执行(x)
# ┆ ┆  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 第5到7位 表示该目录所属组root2对它的读写权限 ,有读取(r)、执行(x)
# ┆ ╰┈┈┈┈ 第2到4位 表示该目录拥有者root对它的读写权限 ,读取(r)、写入(w)和执行(x)
# ╰┈┈ 第1位`d`代表目录,`-`代表普通文件

# 5: 表示的是目录中的链接计数(不包括. 和 ..)
# root:表示拥有者的用户名,这里是root
# root2:表示目录所属组的组名,这里是root2
# 144: 这个数字表示该目录的大小(以千字节为单位)
# `May 23 02:07`: 表示该目录的最后修改时间
# `.test`: 前面的.表示该目录是一个隐藏的,目录名称为test
1
2
3
4
5
6
7
8
9
10
11
12
13