Linux学习笔记

(1)Linux的目录结构

Linux的目录结构是由根目录(/)开始的,下面是一些常见的目录,按目录的平均使用频次排序:

目录 说明
/home 存放用户主目录。
/var 存放系统运行时生成的变化数据,如日志文件等。
/tmp 存放临时文件。
/usr 存放用户级应用程序和数据。
/etc 存放系统的配置文件,包括网络配置、用户配置和服务配置等。
/bin 存放系统常用的二进制可执行文件。
/lib 存放系统常用的共享库文件。
/sbin 存放系统管理员使用的二进制可执行文件。
/proc 存放系统内核和进程相关的信息。
/boot 存放启动Linux时使用的内核和启动引导程序。
/mnt 临时挂载文件系统的目录。
/media 存放可移动媒体,如光盘、U盘等。
/opt 存放可选的应用程序。
/srv 存放服务相关的数据文件。
/sys 存放系统硬件信息的虚拟文件系统。
/root 超级用户(root)的主目录。
/dev 存放设备文件,包括硬件设备和虚拟设备。

以上是Linux目录结构的常见部分,不同的Linux发行版可能会有些差异。


(2)同步、关机重启、登录注销

同步命令 sync

命令概述:

sync命令用于将内存中的数据同步到磁盘中,确保数据能够被持久化保存,避免数据丢失。

基本语法:

1
sync

选项和参数说明

sync命令没有选项和参数,只有一个无需参数的命令。

应用实例

sync命令通常在系统关机前使用,以确保所有数据都已经写入磁盘中,避免数据丢失。例如:

1
sync && shutdown -h now

这个命令将会先执行sync命令,等待数据同步到磁盘中,然后执行关机命令shutdown -h now,确保系统安全关机。


关机命令 shutdown

命令概述

shutdown命令用于关闭系统或者重启系统,可以指定关闭或重启的时间,还可以发送消息给所有用户。

基本语法

1
shutdown [选项] [时间] [消息]

其中,选项是可选的,时间表示关闭或重启的时间,可以是绝对时间或相对时间,消息是要发送给所有用户的消息。

选项和参数说明

常用选项:

  • -h:关闭系统;
  • -r:重启系统;
  • -c:取消之前的关机或重启命令。

常用参数:

  • now:立即关闭或重启系统;
  • +5:在5分钟后关闭或重启系统;
  • 22:00:在指定时间关闭或重启系统;
  • “System is going down”:发送给所有用户的消息。

应用实例

  1. 立即关闭系统,并发送消息给所有用户:
1
shutdown -h now "System is going down"
  1. 在5分钟后重启系统:
1
shutdown -r +5 "System is going down"
  1. 在指定时间关闭系统:
1
shutdown -h 22:00 "System is going down"
  1. 取消之前的关机或重启命令:
1
shutdown -c

特别说明

在执行shutdown命令之前,建议先执行sync命令将内存中的数据同步到磁盘中,避免数据丢失。


重启命令 reboot

命令概述

reboot命令用于重新启动Linux系统。

基本语法

reboot命令的基本语法如下:

1
reboot [选项]

选项说明

常用选项如下:

  • -f:强制进行重新启动操作,不提示任何信息。
  • -n:不要向init进程发送SIGTERM信号,直接进行重新启动操作。
  • -w:不要进行实际的重新启动操作,仅向系统记录日志信息。

应用实例

  1. 重新启动系统:
1
reboot
  1. 强制重新启动系统:
1
reboot -f
  1. 不向init进程发送SIGTERM信号,直接进行重新启动操作:
1
reboot -n
  1. 仅记录日志信息,不进行实际的重新启动操作:
1
reboot -w

登录命令 login

命令概述

login命令用于登录到Linux系统,并启动一个新的会话。

基本语法

login命令的基本语法如下:

1
login [OPTION] [USER]

选项说明

login命令的常用选项如下:

  • USER:要登录的用户名。如果省略该参数,则默认使用当前用户的用户名。
  • -f:强制登录,即使已经登录了该用户。
  • -p:提示输入密码,即使当前用户已经有密码。

应用实例

  1. 使用当前用户登录系统:
1
login
  1. 使用指定用户登录系统:
1
login username
  1. 强制使用指定用户登录系统:
1
login -f username
  1. 提示输入密码登录系统:
1
login -p

特别说明

使用login命令需要提供正确的用户名和密码,才能成功登录到Linux系统。在输入密码时,密码输入是不可见的,不会显示在屏幕上。如果需要退出当前会话,可以使用exit命令或者按下Ctrl+d键。


注销命令 logout

命令概述

logout命令用于退出当前的登录会话。

基本语法

logout命令的基本语法如下:

1
logout

选项和参数说明

logout命令没有任何选项和参数。

应用实例

  1. 退出当前的登录会话:
1
logout

特别说明

使用logout命令会结束当前的登录会话,并返回到登录界面或者终端。在退出会话前,请确保已经保存了所有的数据,并关闭了所有的程序。


(3)vi和vim编辑器

vi 和 vim 的基本介绍

Linux 系统会内置 vi 文本编辑器,Vim具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

vi 和 vim 常用的三种模式

  1. 正常模式

以 vim 打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中,可以使用『上下左右』按键来移动光标,可以使用『删除字符』或『删除整行』来处理文件内容,也可以使用『复制、粘贴』来处理文件数据。

  1. 插入模式

按下i, I, o, O, a, A中的任一个字母之后才会进入编辑模式, 一般来说按i即可。

  1. 命令行模式

按下esc再输入:进入,在这个模式当中,可以使用相关指令完成读取、存盘、替换、离开 vim 、显示行号等的动作。


vi和vim的基本使用

基本语法

1
vi [选项] [文件名] 

1
vim [选项] [文件名]

选项说明

  • -c:在Vim中使用Ctrl+C替代Esc键
  • -i:在Vim中使用Insert键进入插入模式
  • -x:在Vim中使用Delete键删除字符
  • -n:打开文件后,将光标定位到第n行
  • -R:以只读方式打开文件
  • -u:指定Vim的配置文件

应用实例

  • 打开文件并编辑: vi test.txtvim test.txt
  • 在Vim中使用Ctrl+C替代Esc键: vim -c "set ttimeoutlen=100" test.txt
  • 在Vim中使用Insert键进入插入模式: vim -c "set insertmode" test.txt
  • 在Vim中使用Delete键删除字符: vim -c "set compatiblescroll=off" test.txt

特别说明

Vi和Vim的命令非常丰富,常用的命令有插入、删除、复制、保存等。在使用Vi和Vim时,可以通过输入:help命令来查看所有可用的命令和选项。


vi 和 vim 常用快捷键

注意: 以下内容默认在 一般模式 下执行,特殊情况会额外注明。

文本操作

  • 拷贝:
    • 当前行:yy
    • 当前行向下 n 行:nyy
    • 粘贴:p
  • 删除:
    • 当前行:dd
    • 当前行向下 n 行:ndd
  • 查找:
    • /关键字 回车,输入 n 查找下一个,输入 N 查找上一个
  • 撤销:
    • 上次操作:u
    • 重做:Ctrl+r

文件操作

  • 保存文件::w
  • 保存并退出::wq
  • 退出不保存::q
  • 强制退出::q!

定位

  • 到达文件末尾:G
  • 到达文件首行:gg
  • 移动到指定行:: 输入行号,回车

编辑

  • 进入插入模式:iIaAoO
  • 进入替换模式:rR

其他

  • 设置行号::set nu
  • 取消行号::set nonu
  • 显示当前光标所在的行号和列号::set cul
  • 切换输入法:Ctrl+Shift+i
  • 帮助::help

更多资源


(4)用户管理

添加新用户 useradd

命令概述

useradd是Linux系统中用于添加新用户的命令。

基本语法

1
useradd [选项] 用户名

选项说明

  • -m:创建用户时同时创建家目录
  • -d:指定用户的家目录
  • -s:指定用户的默认shell
  • -g:指定用户的主组
  • -G:指定用户的附加组

应用实例

创建新用户并指定家目录:

1
useradd -m -d /home/bob bob

其他

推荐使用adduser命令,会有更友好的交互式提示来辅助创建用户。


设置密码 passwd

命令概述

passwd是Linux系统中用于设置用户密码的命令。

基本语法

1
passwd [选项] 用户名

选项说明

  • -l:锁定用户的密码
  • -u:解锁用户的密码
  • -S:显示密码状态

应用实例

  1. 设置用户密码:passwd alice
  2. 锁定用户密码:passwd -l alice
  3. 解锁用户密码:passwd -u alice

删除用户 userdel

命令概述

userdel是Linux系统中用于删除用户的命令。

基本语法

1
userdel [选项] 用户名

选项说明

-r:同时删除用户的家目录

应用实例

  1. 删除用户:userdel alice

  2. 删除用户及其家目录:userdel -r bob


(5)查看和切换用户


查看用户用户标识符和组标识符 id

命令概述

id是Linux系统中用于查看用户uid和gid的命令。

基本语法

1
id 用户名

应用实例

  1. 查看当前用户的uid和gid:id

  2. 查看指定用户的uid和gid:id mkbk


切换用户 su

命令概述

su是Linux系统中用于切换用户的命令。

基本语法

1
su [选项] 用户名

选项和参数说明

  • -c:指定要执行的命令

应用实例

  1. 切换到其他用户:su mkbk

  2. 切换到其他用户并执行命令:su -c "ls -l" mkbk


查看用户名 whoami

命令概述

whoami是Linux系统中用于查看当前用户的用户名的命令。

基本语法:

1
whoami

应用实例

  • 查看当前用户的用户名:whoami

(6)组管理

groupadd命令

命令概述:

groupadd是Linux系统中用于添加新组的命令。

基本语法

1
groupadd [选项] 组名

选项和参数说明:

  • -g:指定新组的gid
  • -r:创建系统组

应用实例

  1. 创建新组:groupadd newgroup
  2. 创建新组并指定gid:groupadd -g 1001 newgroup

groupdel命令

命令概述

groupdel是Linux系统中用于删除组的命令。

基本语法

1
groupdel [选项] 组名

选项说明

  • -r:同时删除组内的所有用户

应用实例

  1. 删除组:groupdel newgroup
  2. 删除组及其所有用户:groupdel -r newgroup

usermod命令

命令概述

usermod是Linux系统中用于修改用户信息的命令。

基本语法:

1
usermod [选项] 用户名

选项说明

  • -d:修改用户的家目录
  • -s:修改用户的默认shell
  • -g:修改用户的主组
  • -G:修改用户的附加组
  • -l:修改用户的登录名

应用实例

  1. 修改用户的家目录:usermod -d /home/alice_new alice

  2. 修改用户的默认shell:usermod -s /bin/zsh alice

特别说明

在使用这些命令时,需要注意权限问题,一些命令需要root权限才能执行。另外,在修改用户和组时,需要注意对系统的影响,避免出现不必要的错误。


(7)用户和组相关文件

/etc/passwd 文件

用户(user)的配置文件,记录用户的各种信息

每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
例如:test:x:1002:1002::/home/tset:/bin/sh

/etc/shadow 文件

口令的配置文件

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
例如:test:$y$j9T$ewogJGpUIdnVpTHNs/Buw1$V9SUftWeSQbv71fTo7L9F4yTJ.f4fS3smV1MZACtH86:19848:0:99999:7:::

/etc/group 文件

组(group)的配置文件,记录Linux 包含的组的信息

每行含义:组名:口令:组标识号:组内用户列表
例如: test:x:1002:


(8)实用指令

运行级别

运行级别(runlevel)是Linux系统中一个非常重要的概念,它决定了系统启动时需要执行哪些服务和进程。在Linux中,一共有7个运行级别,分别为:

运行级别 描述 用途
0 关机 关闭系统
1 单用户模式 系统维护和修复(找回丢失密码)
2 多用户模式(不含网络服务) 仅限命令行操作,不提供网络服务
3 完全的多用户模式 提供完整的命令行和网络服务
4 保留级别 未被使用
5 图形界面模式 提供图形界面和网络服务
6 重启 重新启动系统

可以使用以下命令查看当前系统的运行级别:

1
runlevel

该命令会输出当前的运行级别以及上一个运行级别(如果运行级记录中没有先前的运行级别,则使用字符N表示先前的运行级别)。例如,输出可能为:

1
N 5

可以使用以下命令切换运行级别:

1
init 运行级别

1
telinit 运行级别

切换运行级别后,系统会启动或关闭相应的服务和进程,以满足当前运行级别的需求。需要注意的是,不同的Linux发行版可能对运行级别的定义有所不同,具体使用时需要查看相关文档或手册。


帮助指令

man

命令概述

man是Linux系统中最常用的查看命令帮助文档的命令。通过man命令,可以查看Linux系统中安装的各种命令和工具的帮助文档,了解它们的用法和参数。

基本语法:

1
man [选项] 命令名

选项说明

  • -f:查看命令所在的文件
  • -k:查找命令相关的关键词
  • -C:不使用缓存,强制重新生成帮助文档

应用实例

  1. 查看ls命令帮助文档:
1
man ls
  1. 查看命令所在的文件:
1
man -f ls
  1. 查找命令相关的关键词:
1
man -k ls
  1. 不使用缓存,强制重新生成帮助文档:
1
man -C ls

其他

推荐个有用的项目:https://github.com/chenjiandongx/how


help

命令概述

help命令是Linux操作系统中的一个内置命令,用于显示帮助信息。

基本语法

1
help [命令]

选项说明

help命令没有选项,只有一个参数,即需要查询帮助信息的命令。如果没有指定命令,则会显示所有可用的命令列表。

应用实例

  1. 查询特定命令的帮助信息:help ls

  2. 显示所有可用的命令列表: help

  3. 查看bash的帮助信息:help bash

特别说明

help命令只能查询内置命令和shell函数的帮助信息,无法查询外部命令的帮助信息。如果需要查询外部命令的帮助信息,可以使用man命令。
在 zsh 中,并没有内建的 help 命令,因此会提示找不到命令,可用man或者run-help(man的软链接)命令替代。


(9)文件目录类操作

pwd

命令概述

pwd命令是Linux操作系统中的一个常用命令,用于显示当前工作目录的路径。

基本语法

1
pwd

选项说明

pwd命令没有选项和参数。

应用实例

1
2
root@localhost:~# pwd
/root

ls

命令概述

ls命令是Linux操作系统中的一个常用命令,用于显示目录下的文件和子目录。

基本语法

1
ls [选项] [文件或目录]

选项说明

  • -a:显示所有文件,包括隐藏文件。
  • -l:以长格式显示文件信息。
  • -h:以人类可读的格式显示文件大小。
  • -t:按照修改时间排序。
  • -r:倒序显示文件列表。
  • -R:递归显示子目录下的文件和子目录。

应用实例

1
2
3
4
5
6
7
8
9
10
11
root@localhost:~/test# ls
1.xml 2.xml 3.xml
root@localhost:~/test# ls -l
总计 0
-rw-r--r-- 1 root root 0 May 5 16:56 1.xml
-rw-r--r-- 1 root root 0 May 5 16:56 2.xml
-rw-r--r-- 1 root root 0 May 5 16:56 3.xml
root@localhost:~/test# ls -a
. .. 1.xml 2.xml 3.xml .hide_file
root@localhost:~/test# ls -t
1.xml 2.xml 3.xml

其他

下一代 ls 命令:https://github.com/lsd-rs/lsd


cd

命令概述

cd命令是Linux操作系统中的一个常用命令,用于切换当前的工作目录。

基本语法

1
cd [目录]

选项说明

cd命令没有选项,只有一个参数,即需要切换到的目录。如果不指定目录,则会切换到用户的主目录。

应用实例

1
2
3
4
5
6
7
8
9
root@localhost:/# cd /root
root@localhost:~# pwd
/root
root@localhost:~# cd ..
root@localhost:/# pwd
/
root@localhost:/# cd ~
root@localhost:~# pwd
/root

mkdir

=命令概述

mkdir命令是Linux操作系统中的一个常用命令,用于创建一个新的目录。

基本语法

1
mkdir [选项] 目录

选项说明

  • -p:递归创建目录,即如果上级目录不存在,则同时创建上级目录。

应用实例

1
2
root@localhost:~# mkdir /test/
root@localhost:~# mkdir -p /test/1/2

rmdir

命令概述

rmdir命令是Linux操作系统中的一个常用命令,用于删除一个空目录

基本语法

1
rmdir 目录

选项说明

rmdir命令只有一个参数,即需要删除的目录。

应用实例

1
root@localhost:~# rmdir /test/1/2/

touch

命令概述

touch命令是Linux操作系统中的一个常用命令,用于创建一个空文件或者修改文件的时间为系统当前时间(数据不变)。

基本语法

1
touch [选项] 文件

选项说明

  • -a:只修改文件最后访问时间。
  • -m:只修改文件最后修改时间。
  • -c:如果文件不存在,则不创建文件。

应用实例

1
2
3
4
5
6
root@localhost:/test# touch 1.txt
root@localhost:/test# ls -l
-rw-r--r-- 1 root root 0 May 5 17:11 1.txt
root@localhost:/test# touch -m 1.txt
root@localhost:/test# ls -l
-rw-r--r-- 1 root root 0 May 5 17:13 1.txt

cp

命令概述

cp命令是Linux操作系统中的一个常用命令,用于复制文件或目录。

基本语法

1
cp [选项] 源文件 目标文件

选项说明

  • -r:递归复制目录及其子目录。
  • -p:保留文件属性,如拥有者、权限、时间戳等。
  • -f:强制复制,如果目标文件已存在,则覆盖目标文件。

应用实例

1
2
3
cp /home/user1/file1.txt /home/user1/newdir/
cp -r /home/user1/old/ /home/user1/new/
cp -p /home/user1/file1.txt /home/user1/newdir/

rm

命令概述

rm命令是Linux操作系统中的一个常用命令,用于删除文件或目录。

基本语法

1
rm [选项] 文件或目录

选项说明

  • -r:递归删除目录及其子目录。
  • -f:强制删除,不提示确认。

应用实例

1
2
3
rm /home/user1/file1.txt
rm -r /home/user1/old/
rm -f /home/user1/file1.txt

mv

命令概述

mv命令是Linux操作系统中的一个常用命令,用于移动文件或目录,或者重命名文件或目录。

基本语法

1
mv [选项] 源文件或目录 目标文件或目录

选项说明

  • -f:强制移动,如果目标文件已存在,则覆盖目标文件。
  • -i:交互式移动,如果目标文件已存在,则提示用户确认是否覆盖目标文件。
  • -u:更新移动,如果目标文件已存在且源文件比目标文件新,则移动源文件到目标文件。

应用实例

  1. 移动文件到目标目录:
1
mv file1.txt /home/user1/newdir/
  1. 重命名文件:
1
mv oldname.txt newname.txt
  1. 移动目录到目标目录:
1
mv /home/user1/olddir/ /home/user1/newdir/

特别说明

mv命令不仅可以移动文件和目录,还可以将文件或目录重命名,即将源文件或目录的名称修改为目标名称。


cat

命令概述

cat命令是Linux操作系统中的一个常用命令,用于查看文件的内容。

基本语法

1
cat 文件

选项说明

cat命令只有一个参数,即需要查看内容的文件。

应用实例

1
cat file1.txt

more

命令概述

more命令是Linux操作系统中的一个常用命令,用于分页显示文件的内容。

基本语法

1
more 文件

选项说明

more命令只有一个参数,即需要查看内容的文件。

应用实例

1
more file1.txt

less

命令概述

less命令是Linux操作系统中的一个常用命令,用于分页显示文件的内容,并且可以向前和向后翻页。

基本语法

1
less 文件

选项说明

less命令只有一个参数,即需要查看内容的文件。在less命令中,可以使用空格键向下翻页,使用b键向上翻页,使用q键退出。

应用实例

1
less file1.txt

echo

命令概述

echo命令是Linux操作系统中的一个常用命令,用于输出字符串或变量的值。

基本语法

1
echo 字符串或变量

选项说明

echo命令只有一个参数,即需要输出的字符串或变量的值。

应用实例

1
2
3
4
5
root@localhost:~# num=10
root@localhost:~# echo $num
10
root@localhost:~# echo "hello world"
hello world

命令概述

head命令是Linux操作系统中的一个常用命令,用于显示文件的前几行内容

基本语法

1
head [选项] 文件

选项说明

  • -n:指定显示的行数,默认为10行。

应用实例

1
2
head file1.txt
head -n 5 file1.txt

tail

命令概述

tail命令是Linux操作系统中的一个常用命令,用于显示文件的后几行内容

基本语法

1
tail [选项] 文件

选项说明

  • -n:指定显示的行数,默认为10行。
  • -f实时显示文件的内容,并不断更新。

应用实例

1
2
3
tail file1.txt
tail -n 5 file1.txt
tail -f file1.txt

特别说明

tail -f命令常用于实时监控日志文件的变化。


> and >>

覆盖重定向 >
追加重定向 >>

应用实例

  1. 将 /home 目录下的文件列表覆盖写入到 /home/info.txt 中:
1
`ls -l /home > /home/info.txt` [如果info.txt 没有,则会创建]  
  1. 将当前日历信息追加到 /home/mycal 文件中:
1
cal >> /home/mycal`

特别说明:

  1. 重定向符是操作符,不是可执行的命令。

  2. 如果待写入的对象需要root权限才能访问,那么给echo命令或者重定向操作符加sudo提权,是无意义的,比如sudo echo # >> /etc/fstab。正确做法是使用echo写入到一个管道,然后通过sudo提权tee命令将数据追加到对象:echo # | sudo tee -a /etc/fstab


ln

命令概述

用于给文件创建链接,链接类型分为硬链接和符号链接(软链接)两种,默认的链接类型是硬链接。如果要创建软链接必须使用”-s”选项。

基本语法:

1
ln [原文件或目录] [链接名]

选项说明:

  • -s: 对源文件创建软链接

应用实例:

  1. 在/home 目录下创建一个软链接myroot,连接到 /root 目录:
1
`ln -s /root /home/myroot ` 
  1. 删除软连接 myroot
1
`rm /home/myroot  `

特别说明

  1. 当我们使用pwd命令查看当前目录时,仍然看到的是软链接所在目录。
  2. 软链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给软链接文件设置权限实际上会作用于链接指向的目标,而软链接本身的权限永远是lrwxrwxrwx
  3. 硬链接文件的权限会始终和源文件相同,修改硬链接的权限也等于修改了源文件的权限。删除了源文件后,硬链接仍然可以访问到源文件的内容,因为他们只是同一个文件内容的两个不同名字。

history

命令概述

查看已经执行过历史命令, 也可以管理历史命令。

基本语法

1
history [选项] [n]

选项说明

  • -c: 清空历史命令列表
  • n: 列出最近的n条记录
  • -d: 删除指定顺序(正数正序,负数倒序)的记录

应用实例

  1. 显示执行过的全部命令记录:history
  2. 显示最近执行过的5条命令:history 5
    3 清空历史记录: history -c
  3. 删除倒数第5条命令:history -d -5

特别说明

关闭终端后,历史列表将被写入历史文件/.bash_history或/.zsh_history。


时间日期类

date

命令概述

显示或设置系统时间与日期。

基本语法

1
date [选项] [+时间日期格式]

选项说明

  • -s: 设置系统时间
  • -r: 读取文件最后修改时间
  • +%Y:年份
  • +%m:月份
  • +%d:一月中的一天
  • +"%Y-%m-%d %H:%M:%S":年月日时分秒

应用实例:

  1. 显示当前时间日期:datedate +"%Y-%m-%d %H:%M:%S"
  2. 显示当前日期:date +%Y-%m-%ddate +%D
  3. 显示当前时间:date +%H:%M:%Sdate +%T
  4. 读取文件最后修改时间:date -r 1.txt
  5. 修改系统时间:date -s "2020-11-03 20:02:10"

cal

命令概述

显示当前日历或指定显示日期的日历。

基本语法:

1
cal [选项] [月份] [年份]
  • -m:显示星期一作为一周的第一天(缺省为星期日)
  • -j:显示在某天是当年中的第几天(儒略日)
  • -y:显示本年的日历

应用实例

  1. 显示当前日历 cal
  2. 显示2020年日历: cal 2020
  3. 显示2020年8月日历: cal 8 2020

搜索查找类

find

命令概述

find 命令用于在指定目录下查找文件,并执行指定的操作。

基本语法

1
find [路径] [条件]

选项和参数说明

  • -name: 按文件名查找,可以使用通配符
  • -type: 按文件类型查找,文件类型可以是 f(普通文件)、d(目录)、l(符号链接)等
  • -mtime: 按文件最后修改时间查找
  • -size: 按文件大小查找,可以使用 k(千字节)或 M(兆字节)等单位
  • -exec command {} \;: 对查找到的文件执行指定的命令,{} 表示查找到的文件名,; 表示命令结束

应用实例

  1. 在当前目录下查找所有以 .txt 结尾的文件:
1
find . -name "*.txt"
  1. 在当前目录下查找所有目录:
1
find . -type d
  1. 在当前目录下查找 7 天之前修改的文件:
1
find . -mtime +7
  1. 在当前目录下查找大于 1M 的文件:
1
find . -size +1M
  1. 在当前目录下查找所有以 .txt 结尾的文件,并将它们复制到 /tmp 目录下:
1
find . -name "*.txt" -exec cp {} /tmp \;
  1. 统计代码行数(排除空行):
1
find . -name "*.py" | xargs cat | grep -v ^$ | wc -l

locate

命令概述

locate 命令用于在数据库中查找文件,它会快速地查找文件,因为它搜索的是一个已经建立的数据库,而不是实时查找文件系统。

基本语法

1
locate [选项] 文件名

应用实例

  1. 搜索 etc 目录下所有以 sh 开头的文件: locate /etc/sh

grep

命令概述

grep命令是一种文本搜索工具,可以在文本文件或者标准输入中查找指定的字符串。它可以根据用户提供的内容去匹配文本,并将匹配的行输出到标准输出。

基本语法

1
grep [选项] [字符串] [文件名]

选项说明

  • -i,表示忽略大小写;
  • -n,表示输出匹配行的行号;
  • -r,表示递归搜索子目录中的文件;

应用实例

  1. 从文件中查找指定字符串: grep 'hello' file.txt
  2. 递归搜索子目录中的文件: grep -r 'hello' /path/to/directory

特别说明

当使用正则表达式作为匹配内容时,需要使用单引号或双引号将其括起来,以防止shell解析特殊字符。


|

操作符概述

| 是一种管道符号,用于将一个命令的输出作为另一个命令的输入,实现两个或多个命令之间的协作。它可以将前一个命令的输出传递给后一个命令进行处理,从而实现更复杂的操作。

基本语法

1
command1 | command2

应用实例

  1. 将ls命令的输出传递给grep命令进行过滤:ls -la | grep 'txt'
  2. 将cat命令的输出传递给sed命令进行替换:cat file.txt | sed 's/hello/world/g'

文件压缩/解压缩

tar

命令概述

tar命令用于将多个文件或目录打包成一个文件,并可以进行压缩和解压缩操作。

基本语法

1
tar [选项] [归档文件名] [文件或目录]

选项说明

  • -z, --gzip:使用gzip进行压缩或解压缩
  • -j, --bzip2:使用bzip2进行压缩或解压缩
  • -c, --create:创建归档文件
  • -x, --extract:解压缩归档文件
  • -v, --verbose:显示处理过程
  • -f, --file=:指定归档文件名(必须且为最后一个选项)
  • -C, --directory: 指定解压缩路径
  • -r, --append:向归档文件中添加文件
  • -t, --list:列出归档文件中的文件列表

应用实例

  • 将文件file.txt打包为file.tar:tar -cf file.tar file.txt
  • 将文件file.tar解包到当前目录:tar -xf file.tar
  • 将目录dir打包为dir.tar,并使用gzip进行压缩:tar -zcf dir.tar.gz dir
  • 将文件file.tar.gz解压缩到父目录:tar -zxf file.tar.gz -C ../
  • 将文件file.txt打包为file.tar,并使用bzip2进行压缩:tar -jcf file.tar.bz2 file.txt
  • 将文件file.tar.bz2解压缩到当前目录:tar -jxf file.tar.bz2
  • 向归档文件file.tar中添加文件file2.txt:tar -rf file.tar file2.txt
  • 列出归档文件file.tar中的文件列表:tar -tf file.tar

特别说明:

  1. 只可以向归档(打包)文件中添加新文件,无法向压缩文件中添加新文件。
  2. 使用什么压缩算法进行压缩,就得用什么压缩算法解压缩,或者解压缩的时候不指定压缩算法,tar程序会自动选择相应的压缩算法来解压。
  3. tar 命令无法直接解压 .gz 格式的文件,因为 .gz 文件是 gzip 命令压缩的,未经过 tar 命令打包,正确做法是使用 gunzip 命令来解压。

gzip

命令概述

gzip命令用于将文件进行压缩和解压缩操作。

基本语法

1
gzip [选项] [文件]

选项说明

  • -d, --decompress:解压缩文件
  • -r, --recursive:递归压缩目录下的所有文件
  • -v, --verbose:显示压缩或解压缩的详细信息
  • -1 ~ -9:设置压缩级别,数字越大压缩比越高,但耗费的时间也越长, 默认6

应用实例

  • 将文件file.txt压缩为file.txt.gz:gzip file.txt
  • 将文件file.txt压缩为file.txt.gz,并显示详细信息:gzip -v file.txt
  • 将文件file.txt压缩为file.txt.gz,压缩级别设置为9:gzip -9 file.txt
  • 将文件file.txt.gz解压缩:gzip -d file.txt.gz
  • 将目录dir下的所有文件递归压缩为.gz格式:gzip -r dir

gunzip

命令概述

gunzip命令用于解压缩经过gzip压缩的文件。

基本语法

1
gunzip [选项] [文件]

选项说明

  • -f, -force:强制解压缩,覆盖已存在的文件
  • -r, --recursive:递归解压缩目录下的所有文件
  • -v, --verbose:显示解压缩过程
  • -l, --list: 显示压缩文件的相关信息
  • -k, --keep :解压缩后保留压缩文件

应用实例

  • 将文件file.txt.gz解压缩:gunzip file.txt.gz
  • 将文件file.txt.gz解压缩,并显示详细信息:gunzip -v file.txt.gz
  • 将文件file.txt.gz解压缩,强制覆盖已存在的文件:gunzip -f file.txt.gz
  • 将目录dir下的所有.gz文件递归解压缩为原始格式:gunzip -r dir

特别说明

  1. gunzip实际上是gzip的硬链接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。
  2. gzip –d等价于gunzip
  3. 使用 gunzip 命令时,默认情况下会将原始的 .gz 文件删除,只留下解压后的文件。建议使用 -k 选项保留原始的 .gz 文件。

zip and unzip

命令概述

zip和unzip命令用于将文件进行压缩和解压缩操作。

基本语法

1
2
zip [选项] 压缩文件名.zip [文件或目录]
unzip [选项] 压缩文件名.zip

选项说明

  • zip
    • -r:递归压缩目录下的所有文件。
    • -v:显示压缩的详细信息。
    • -q:静默模式,不显示任何信息。
    • -j:只压缩文件,不包含目录结构。
  • unzip
    • -l:列出压缩文件中的文件列表。
    • -v:显示解压缩的详细信息。
    • -q:静默模式,不显示任何信息。
    • -d:指定解压缩后的目录。

应用实例

  • 将文件file.txt压缩为file.zip:zip file.zip file.txt
  • 将目录dir下的所有文件递归压缩为dir.zip:zip -r dir.zip dir
  • 解压缩文件file.zip到当前目录:unzip file.zip
  • 解压缩文件file.zip到指定目录:unzip file.zip -d /home/user/
  • 列出压缩文件file.zip中的文件列表:unzip -l file.zip

参考课程

https://www.bilibili.com/video/BV1Sv411r7vd