Linux学习笔记
Linux学习笔记
lololowe(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 | shutdown -h now "System is going down" |
- 在5分钟后重启系统:
1 | shutdown -r +5 "System is going down" |
- 在指定时间关闭系统:
1 | shutdown -h 22:00 "System is going down" |
- 取消之前的关机或重启命令:
1 | shutdown -c |
特别说明:
在执行shutdown命令之前,建议先执行sync命令将内存中的数据同步到磁盘中,避免数据丢失。
重启命令 reboot
命令概述
reboot
命令用于重新启动Linux系统。
基本语法
reboot
命令的基本语法如下:
1 | reboot [选项] |
选项说明
常用选项如下:
-f
:强制进行重新启动操作,不提示任何信息。-n
:不要向init进程发送SIGTERM信号,直接进行重新启动操作。-w
:不要进行实际的重新启动操作,仅向系统记录日志信息。
应用实例
- 重新启动系统:
1 | reboot |
- 强制重新启动系统:
1 | reboot -f |
- 不向init进程发送SIGTERM信号,直接进行重新启动操作:
1 | reboot -n |
- 仅记录日志信息,不进行实际的重新启动操作:
1 | reboot -w |
登录命令 login
命令概述
login
命令用于登录到Linux系统,并启动一个新的会话。
基本语法
login
命令的基本语法如下:
1 | login [OPTION] [USER] |
选项说明
login
命令的常用选项如下:
USER
:要登录的用户名。如果省略该参数,则默认使用当前用户的用户名。-f
:强制登录,即使已经登录了该用户。-p
:提示输入密码,即使当前用户已经有密码。
应用实例
- 使用当前用户登录系统:
1 | login |
- 使用指定用户登录系统:
1 | login username |
- 强制使用指定用户登录系统:
1 | login -f username |
- 提示输入密码登录系统:
1 | login -p |
特别说明:
使用login
命令需要提供正确的用户名和密码,才能成功登录到Linux系统。在输入密码时,密码输入是不可见的,不会显示在屏幕上。如果需要退出当前会话,可以使用exit
命令或者按下Ctrl+d
键。
注销命令 logout
命令概述
logout
命令用于退出当前的登录会话。
基本语法
logout
命令的基本语法如下:
1 | logout |
选项和参数说明
logout
命令没有任何选项和参数。
应用实例
- 退出当前的登录会话:
1 | logout |
特别说明:
使用logout
命令会结束当前的登录会话,并返回到登录界面或者终端。在退出会话前,请确保已经保存了所有的数据,并关闭了所有的程序。
(3)vi和vim编辑器
vi 和 vim 的基本介绍
Linux 系统会内置 vi 文本编辑器,Vim具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
vi 和 vim 常用的三种模式
- 正常模式
以 vim 打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中,可以使用『上下左右』按键来移动光标,可以使用『删除字符』或『删除整行』来处理文件内容,也可以使用『复制、粘贴』来处理文件数据。
- 插入模式
按下i, I, o, O, a, A中的任一个字母之后才会进入编辑模式, 一般来说按i即可。
- 命令行模式
按下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.txt
或vim 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
- 移动到指定行:
:
输入行号,回车
编辑
- 进入插入模式:
i
、I
、a
、A
、o
、O
- 进入替换模式:
r
、R
其他
- 设置行号:
:set nu
- 取消行号:
:set nonu
- 显示当前光标所在的行号和列号:
:set cul
- 切换输入法:
Ctrl+Shift+i
- 帮助:
:help
更多资源
- Vim 官方文档:https://www.vim.org/docs.php
- Vim 中文教程:https://www.runoob.com/linux/linux-vim.html
(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:显示密码状态
应用实例:
- 设置用户密码:
passwd alice
- 锁定用户密码:
passwd -l alice
- 解锁用户密码:
passwd -u alice
删除用户 userdel
命令概述:
userdel
是Linux系统中用于删除用户的命令。
基本语法:
1 | userdel [选项] 用户名 |
选项说明:
-r:同时删除用户的家目录
应用实例:
删除用户:
userdel alice
删除用户及其家目录:
userdel -r bob
(5)查看和切换用户
查看用户用户标识符和组标识符 id
命令概述:
id是Linux系统中用于查看用户uid和gid的命令。
基本语法:
1 | id 用户名 |
应用实例:
查看当前用户的uid和gid:
id
查看指定用户的uid和gid:
id mkbk
切换用户 su
命令概述:
su
是Linux系统中用于切换用户的命令。
基本语法:
1 | su [选项] 用户名 |
选项和参数说明:
- -c:指定要执行的命令
应用实例:
切换到其他用户:
su mkbk
切换到其他用户并执行命令:
su -c "ls -l" mkbk
查看用户名 whoami
命令概述:
whoami
是Linux系统中用于查看当前用户的用户名的命令。
基本语法:
1 | whoami |
应用实例:
- 查看当前用户的用户名:
whoami
(6)组管理
groupadd
命令
命令概述:
groupadd是Linux系统中用于添加新组的命令。
基本语法:
1 | groupadd [选项] 组名 |
选项和参数说明:
- -g:指定新组的gid
- -r:创建系统组
应用实例:
- 创建新组:
groupadd newgroup
- 创建新组并指定gid:
groupadd -g 1001 newgroup
groupdel
命令
命令概述:
groupdel是Linux系统中用于删除组的命令。
基本语法:
1 | groupdel [选项] 组名 |
选项说明:
- -r:同时删除组内的所有用户
应用实例:
- 删除组:
groupdel newgroup
- 删除组及其所有用户:
groupdel -r newgroup
usermod
命令
命令概述:
usermod是Linux系统中用于修改用户信息的命令。
基本语法:
1 | usermod [选项] 用户名 |
选项说明:
- -d:修改用户的家目录
- -s:修改用户的默认shell
- -g:修改用户的主组
- -G:修改用户的附加组
- -l:修改用户的登录名
应用实例:
修改用户的家目录:
usermod -d /home/alice_new alice
修改用户的默认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:不使用缓存,强制重新生成帮助文档
应用实例:
- 查看ls命令帮助文档:
1 | man ls |
- 查看命令所在的文件:
1 | man -f ls |
- 查找命令相关的关键词:
1 | man -k ls |
- 不使用缓存,强制重新生成帮助文档:
1 | man -C ls |
其他:
推荐个有用的项目:https://github.com/chenjiandongx/how
help
命令概述:
help
命令是Linux操作系统中的一个内置命令,用于显示帮助信息。
基本语法:
1 | help [命令] |
选项说明:
help
命令没有选项,只有一个参数,即需要查询帮助信息的命令。如果没有指定命令,则会显示所有可用的命令列表。
应用实例:
查询特定命令的帮助信息:
help ls
显示所有可用的命令列表:
help
查看
bash
的帮助信息:help bash
特别说明:
help
命令只能查询内置命令和shell函数的帮助信息,无法查询外部命令的帮助信息。如果需要查询外部命令的帮助信息,可以使用man
命令。
在 zsh 中,并没有内建的 help
命令,因此会提示找不到命令,可用man
或者run-help
(man的软链接)命令替代。
(9)文件目录类操作
pwd
命令概述:
pwd
命令是Linux操作系统中的一个常用命令,用于显示当前工作目录的路径。
基本语法:
1 | pwd |
选项说明:
pwd
命令没有选项和参数。
应用实例:
1 | root@localhost:~# pwd |
ls
命令概述:
ls
命令是Linux操作系统中的一个常用命令,用于显示目录下的文件和子目录。
基本语法:
1 | ls [选项] [文件或目录] |
选项说明:
-a
:显示所有文件,包括隐藏文件。-l
:以长格式显示文件信息。-h
:以人类可读的格式显示文件大小。-t
:按照修改时间排序。-r
:倒序显示文件列表。-R
:递归显示子目录下的文件和子目录。
应用实例:
1 | root@localhost:~/test# ls |
其他:
下一代 ls 命令:https://github.com/lsd-rs/lsd
cd
命令概述:
cd
命令是Linux操作系统中的一个常用命令,用于切换当前的工作目录。
基本语法:
1 | cd [目录] |
选项说明:
cd
命令没有选项,只有一个参数,即需要切换到的目录。如果不指定目录,则会切换到用户的主目录。
应用实例:
1 | root@localhost:/# cd /root |
mkdir
=命令概述:
mkdir
命令是Linux操作系统中的一个常用命令,用于创建一个新的目录。
基本语法:
1 | mkdir [选项] 目录 |
选项说明:
-p
:递归创建目录,即如果上级目录不存在,则同时创建上级目录。
应用实例:
1 | root@localhost:~# mkdir /test/ |
rmdir
命令概述:
rmdir
命令是Linux操作系统中的一个常用命令,用于删除一个空目录。
基本语法:
1 | rmdir 目录 |
选项说明:
rmdir
命令只有一个参数,即需要删除的目录。
应用实例:
1 | root@localhost:~# rmdir /test/1/2/ |
touch
命令概述:
touch
命令是Linux操作系统中的一个常用命令,用于创建一个空文件或者修改文件的时间为系统当前时间(数据不变)。
基本语法:
1 | touch [选项] 文件 |
选项说明:
-a
:只修改文件最后访问时间。-m
:只修改文件最后修改时间。-c
:如果文件不存在,则不创建文件。
应用实例:
1 | root@localhost:/test# touch 1.txt |
cp
命令概述:
cp
命令是Linux操作系统中的一个常用命令,用于复制文件或目录。
基本语法:
1 | cp [选项] 源文件 目标文件 |
选项说明:
-r
:递归复制目录及其子目录。-p
:保留文件属性,如拥有者、权限、时间戳等。-f
:强制复制,如果目标文件已存在,则覆盖目标文件。
应用实例:
1 | cp /home/user1/file1.txt /home/user1/newdir/ |
rm
命令概述:
rm
命令是Linux操作系统中的一个常用命令,用于删除文件或目录。
基本语法:
1 | rm [选项] 文件或目录 |
选项说明:
-r
:递归删除目录及其子目录。-f
:强制删除,不提示确认。
应用实例:
1 | rm /home/user1/file1.txt |
mv
命令概述:
mv
命令是Linux操作系统中的一个常用命令,用于移动文件或目录,或者重命名文件或目录。
基本语法:
1 | mv [选项] 源文件或目录 目标文件或目录 |
选项说明:
-f
:强制移动,如果目标文件已存在,则覆盖目标文件。-i
:交互式移动,如果目标文件已存在,则提示用户确认是否覆盖目标文件。-u
:更新移动,如果目标文件已存在且源文件比目标文件新,则移动源文件到目标文件。
应用实例:
- 移动文件到目标目录:
1 | mv file1.txt /home/user1/newdir/ |
- 重命名文件:
1 | mv oldname.txt newname.txt |
- 移动目录到目标目录:
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 | root@localhost:~# num=10 |
head
命令概述:
head
命令是Linux操作系统中的一个常用命令,用于显示文件的前几行内容。
基本语法:
1 | head [选项] 文件 |
选项说明:
-n
:指定显示的行数,默认为10行。
应用实例:
1 | head file1.txt |
tail
命令概述:
tail
命令是Linux操作系统中的一个常用命令,用于显示文件的后几行内容。
基本语法:
1 | tail [选项] 文件 |
选项说明:
-n
:指定显示的行数,默认为10行。-f
:实时显示文件的内容,并不断更新。
应用实例:
1 | tail file1.txt |
特别说明:
tail -f
命令常用于实时监控日志文件的变化。
>
and >>
覆盖重定向 >
追加重定向 >>
应用实例
- 将 /home 目录下的文件列表覆盖写入到 /home/info.txt 中:
1 | `ls -l /home > /home/info.txt` [如果info.txt 没有,则会创建] |
- 将当前日历信息追加到 /home/mycal 文件中:
1 | cal >> /home/mycal` |
特别说明:
重定向符是操作符,不是可执行的命令。
如果待写入的对象需要root权限才能访问,那么给echo命令或者重定向操作符加sudo提权,是无意义的,比如
sudo echo # >> /etc/fstab
。正确做法是使用echo写入到一个管道,然后通过sudo提权tee命令将数据追加到对象:echo # | sudo tee -a /etc/fstab
ln
命令概述:
用于给文件创建链接,链接类型分为硬链接和符号链接(软链接)两种,默认的链接类型是硬链接。如果要创建软链接必须使用”-s”选项。
基本语法:
1 | ln [原文件或目录] [链接名] |
选项说明:
-s
: 对源文件创建软链接
应用实例:
- 在/home 目录下创建一个软链接myroot,连接到 /root 目录:
1 | `ln -s /root /home/myroot ` |
- 删除软连接 myroot
1 | `rm /home/myroot ` |
特别说明:
- 当我们使用pwd命令查看当前目录时,仍然看到的是软链接所在目录。
- 软链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给软链接文件设置权限实际上会作用于链接指向的目标,而软链接本身的权限永远是
lrwxrwxrwx
。 - 硬链接文件的权限会始终和源文件相同,修改硬链接的权限也等于修改了源文件的权限。删除了源文件后,硬链接仍然可以访问到源文件的内容,因为他们只是同一个文件内容的两个不同名字。
history
命令概述:
查看已经执行过历史命令, 也可以管理历史命令。
基本语法:
1 | history [选项] [n] |
选项说明:
-c
: 清空历史命令列表n
: 列出最近的n条记录-d
: 删除指定顺序(正数正序,负数倒序)的记录
应用实例:
- 显示执行过的全部命令记录:
history
- 显示最近执行过的5条命令:
history 5
3 清空历史记录:history -c
- 删除倒数第5条命令:
history -d -5
特别说明:
关闭终端后,历史列表将被写入历史文件/.bash_history或/.zsh_history。
时间日期类
date
命令概述:
显示或设置系统时间与日期。
基本语法:
1 | date [选项] [+时间日期格式] |
选项说明:
-s
: 设置系统时间-r
: 读取文件最后修改时间+%Y
:年份+%m
:月份+%d
:一月中的一天+"%Y-%m-%d %H:%M:%S"
:年月日时分秒
应用实例:
- 显示当前时间日期:
date
或date +"%Y-%m-%d %H:%M:%S"
- 显示当前日期:
date +%Y-%m-%d
或date +%D
- 显示当前时间:
date +%H:%M:%S
或date +%T
- 读取文件最后修改时间:
date -r 1.txt
- 修改系统时间:
date -s "2020-11-03 20:02:10"
cal
命令概述:
显示当前日历或指定显示日期的日历。
基本语法:
1 | cal [选项] [月份] [年份] |
-m
:显示星期一作为一周的第一天(缺省为星期日)-j
:显示在某天是当年中的第几天(儒略日)-y
:显示本年的日历
应用实例:
- 显示当前日历
cal
- 显示2020年日历:
cal 2020
- 显示2020年8月日历:
cal 8 2020
搜索查找类
find
命令概述:
find
命令用于在指定目录下查找文件,并执行指定的操作。
基本语法:
1 | find [路径] [条件] |
选项和参数说明:
-name
: 按文件名查找,可以使用通配符-type
: 按文件类型查找,文件类型可以是 f(普通文件)、d(目录)、l(符号链接)等-mtime
: 按文件最后修改时间查找-size
: 按文件大小查找,可以使用 k(千字节)或 M(兆字节)等单位-exec command {} \;
: 对查找到的文件执行指定的命令,{} 表示查找到的文件名,; 表示命令结束
应用实例:
- 在当前目录下查找所有以 .txt 结尾的文件:
1 | find . -name "*.txt" |
- 在当前目录下查找所有目录:
1 | find . -type d |
- 在当前目录下查找 7 天之前修改的文件:
1 | find . -mtime +7 |
- 在当前目录下查找大于 1M 的文件:
1 | find . -size +1M |
- 在当前目录下查找所有以 .txt 结尾的文件,并将它们复制到 /tmp 目录下:
1 | find . -name "*.txt" -exec cp {} /tmp \; |
- 统计代码行数(排除空行):
1 | find . -name "*.py" | xargs cat | grep -v ^$ | wc -l |
locate
命令概述:
locate 命令用于在数据库中查找文件,它会快速地查找文件,因为它搜索的是一个已经建立的数据库,而不是实时查找文件系统。
基本语法:
1 | locate [选项] 文件名 |
应用实例:
- 搜索 etc 目录下所有以 sh 开头的文件:
locate /etc/sh
grep
命令概述:
grep命令是一种文本搜索工具,可以在文本文件或者标准输入中查找指定的字符串。它可以根据用户提供的内容去匹配文本,并将匹配的行输出到标准输出。
基本语法:
1 | grep [选项] [字符串] [文件名] |
选项说明:
-i
,表示忽略大小写;-n
,表示输出匹配行的行号;-r
,表示递归搜索子目录中的文件;
应用实例:
- 从文件中查找指定字符串:
grep 'hello' file.txt
- 递归搜索子目录中的文件:
grep -r 'hello' /path/to/directory
特别说明:
当使用正则表达式作为匹配内容时,需要使用单引号或双引号将其括起来,以防止shell解析特殊字符。
|
操作符概述:
| 是一种管道符号,用于将一个命令的输出作为另一个命令的输入,实现两个或多个命令之间的协作。它可以将前一个命令的输出传递给后一个命令进行处理,从而实现更复杂的操作。
基本语法:
1 | command1 | command2 |
应用实例:
- 将ls命令的输出传递给grep命令进行过滤:
ls -la | grep 'txt'
- 将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
特别说明:
- 只可以向归档(打包)文件中添加新文件,无法向压缩文件中添加新文件。
- 使用什么压缩算法进行压缩,就得用什么压缩算法解压缩,或者解压缩的时候不指定压缩算法,tar程序会自动选择相应的压缩算法来解压。
- 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
特别说明:
- gunzip实际上是gzip的硬链接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。
gzip –d
等价于gunzip
。- 使用 gunzip 命令时,默认情况下会将原始的 .gz 文件删除,只留下解压后的文件。建议使用
-k
选项保留原始的 .gz 文件。
zip
and unzip
命令概述:
zip和unzip命令用于将文件进行压缩和解压缩操作。
基本语法:
1 | zip [选项] 压缩文件名.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
参考课程