📝前言
该文章j将介绍Linux中的常用系统工具和命令,如用于分页显示文本的more
和less
、显示时间的date
、管理日历的cal
、文件搜索的find
和grep
、以及压缩/解压缩的zip/unzip
和tar
。文中详细解释了每个命令的语法、功能和常用选项,并提供了示例。
🌠 more
more
命令是一个分页显示文本文件内容的工具,它可以让用户逐页查看文件的内容。
基本语法:
more [选项] [文件名]
功能:more命令,功能类似 cat
常用选项:
-d
: 显示页尾提示信息-s
: 合并连续的空白行为一个空白行-c
: 清屏后再显示内容-p
: 不滚屏,而是跳页显示- -n 对输出的所有行编号
- q 退出more
例子:
我们要列出根目录 /
下的所有文件和目录的详细信息。
ls -l / | more
当我们用more打开我们log.txt的10000行hello时,查看文档数据,但是他没有上下(前后)翻动功能,打印显示篇幅就没有了,因此less就具有更加方便查看功能:
🌉less指令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
less 的用法比起 more 更加的有弹性。在 more
的时候,我们并没有办法向前面翻, 只能往后面看
但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用
来查看一个文件的内容!
除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less [参数] 文件
功能:
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前
不会加载整个文件。
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
底部输入 -N+Enter
显示左边的行号
输入/+想查找的字符串+Enter
显示向下查找
其他选项类同
🌠时间相关的指令
date显示
date 指定格式显示时间: date +%Y:%m:%d
date 用法:date [OPTION]… [+FORMAT]
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%H : 小时(00…23)
%M : 分钟(00…59)
%S : 秒(00…61)
%X : 相当于 %H:%M:%S
%d : 日 (01…31)
%m : 月份 (01…12)
%Y : 完整年份 (0000…9999)
%F : 相当于 %Y-%m-%d
为什么要在 %H:%M:%S 前加上一个空格 \ ? 加\
可以输出间有空格,可以执行后一条指令。
2.在设定时间方面
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间
3.时间戳
时间->时间戳:date +%s +%s
时间戳->时间:date -d@1508749502
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
解释:为什么是8时0分0秒?
-d @0 指定了Unix时间戳 0。Unix时间戳 0 表示1970年1月1日00:00:00 UTC。默认情况下,date 命令使用本地时区来显示时间。你看到的 1970-01-01 08:00:00 是因为你的系统时区设置在东八区(UTC+8),因此在UTC时间的基础上加上了8小时。这个时间显示是基于你当前时区的转换结果。
🌉cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳
历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:
-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
举例:
cal -y 2024
🌠find指令
find指令:-name
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很
多,其中大部分选项都值得我们花时间来了解一下。
即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系
统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
语法: find pathname -options
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项:
find -name 按照文件名查找文件。
find
命令是一个非常强大的文件搜索工具,它可以在指定的目录及其子目录中搜索满足指定条件的文件或目录。以下是一些常见的 find
命令用法:
- 在当前目录及其子目录中搜索指定名称的文件或目录:
find . -name "filename.txt"
例如:
输入:
find -name "log.txt"
即可找到log.txt
文件路径。
-
在指定目录中搜索指定名称的文件或目录:
find /path/to/directory -name "filename.txt"
-
搜索指定类型的文件(如普通文件、目录、符号链接等):
find /path/to/directory -type f # 搜索普通文件 find /path/to/directory -type d # 搜索目录 find /path/to/directory -type l # 搜索符号链接
-
根据文件大小搜索:
find /path/to/directory -size +10M # 搜索大于 10MB 的文件 find /path/to/directory -size -1k # 搜索小于 1KB 的文件
-
根据文件访问或修改时间搜索:
find /path/to/directory -atime +7 # 搜索 7 天前访问过的文件 find /path/to/directory -mtime -1 # 搜索 1 天内修改过的文件
-
根据文件所有者和权限搜索:
find /path/to/directory -user username # 搜索指定用户拥有的文件 find /path/to/directory -perm 644 # 搜索权限为 644 的文件
-
组合多个条件进行搜索:
find /path/to/directory -name "*.txt" -size +10M -mtime -7
例如:我们要搜索 /var/log 目录下所有 1 天内修改过的日志文件:
find /var/log -type f -mtime -1
这将列出 /var/log 目录及其子目录中,所有类型为普通文件 -type f 且最近 1 天内有修改 -mtime -1
的文件。
再举一个例子,搜索当前目录及其子目录中,所有大小超过 100b 的文件:
🌉grep
grep
命令是用于在文件中搜索指定的字符串或正则表达式模式的强大工具。
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
基本语法:
grep [options] pattern [files]
grep [选项] 搜寻字符串 文件
[options]
是可选的命令行选项,用于控制grep
的行为。pattern
是要搜索的模式,可以是字符串或正则表达式。[files]
是要搜索的文件列表,如果不指定则默认搜索标准输入。
常用的 grep
命令示例:
-
简单文本搜索:
grep "hello" file.txt
在file.txt
文件中搜索包含 “hello” 的行。grep -i "HELLO" file.txt
在file.txt
文件中搜索包含 “hello” 或 “HELLO” 的行(忽略大小写)。
-
使用正则表达式搜索:
grep -E "[0-9]{3}-[0-9]{3}-[0-9]{4}" file.txt
在file.txt
文件中搜索符合美国电话号码格式的行。grep -o "[0-9]*" file.txt
在file.txt
文件中搜索所有数字,并只显示匹配到的部分。
-
搜索多个文件:
grep "error" *.log
在当前目录下所有.log
扩展名的文件中搜索包含 “error” 的行。grep -r "TODO" .
在当前目录及其所有子目录中递归搜索包含 “TODO” 的行。
-
显示行号和上下文:
grep -n "warning" file.txt
在file.txt
文件中搜索包含 “warning” 的行,并显示行号。grep -C 2 "error" file.txt
在file.txt
文件中搜索包含 “error” 的行,并显示包含该行在内的前后 2 行。
-
反向搜索:
grep -v "success" file.txt
在file.txt
文件中搜索不包含 “success” 的行。grep -L "error" *.log
列出所有不包含 “error” 的.log
文件。
例如:查找字符串“llo”,并顺便输出型号:
grep -n "llo" log.txt
在 Linux 中使用 grep
命令来查找未来的进程是。
以下是一些常用的方法:
-
监视
/proc
目录:/proc
目录包含了系统中所有进程的信息,可以使用grep
命令搜索该目录来监视未来的进程。例如:watch -n 1 'ls -l /proc | grep -E "^d" | grep -v "self|thread-self"'
这个命令会每隔 1 秒刷新并显示
/proc
目录下的所有进程目录。
🌠zip/unzip指令:
语法: zip
压缩文件.zip
目录或文件
功能: 将目录或文件压缩成zip格式
常用选项:
-r 递 归处理,将指定目录下的所有文件和子目录一并处理
举例:
将目录dir1
压缩,并解压到dir2
目录中。
首先我创建了dir1
和dir2
[root@hcss-ecs-ab43 ~]# zip dir1.zip dir1
adding: dir1/ (stored 0%)
[root@hcss-ecs-ab43 ~]# tree
.
├── dir1
│ ├── test
│ │ └── test2
│ │ └── log.txt
│ └── test1
│ └── test2
├── dir1.zip
└── dir2
6 directories, 2 files
[root@hcss-ecs-ab43 ~]# unzip dir1.zip -d dir2/
Archive: dir1.zip
creating: dir2/dir1/
解压结果:
发现的确解压出了dir1到dir2中,但是dir1里的内容并没有解压过来,与其说没有没有解压过来,其实在zip压缩时就没有压缩进去。
我们知道,文件是有文件属性和文件内容构成的,我们zip压缩压过去的是文件dir1的文件属性,而文件里的内容数据没有压缩,因此,我们需要使用-r 递 归处理,将指定目录下的所有文件和子目录一并处理
我们重新来,还原:
将dir1
目录压缩:
zip dir1.zip -r dir1/
解压到dir2
目录::
unzip dir1.zip -d dir2/
🌉 tar指令
tar 命令是一个非常重要的 Linux 命令,用于打包和解压缩文件。
tar [-cxtzjvf
] 文件与目录 … 参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
下面是 tar 命令的常用参数:
-
操作模式:
- c: 创建新的 tar 包
- x: 解压缩 tar 包
- t: 列出 tar 包中的内容
-
压缩/解压缩模式:
- z: 使用 gzip 进行压缩/解压缩
- j: 使用 bzip2 进行压缩/解压缩
-
其他参数:
- v: 显示详细信息
- f: 指定 tar 包的文件名
使用示例:
-
创建 tar 包:
tar -cvf archive.tar file1.txt file2.txt directory/
这条命令将 file1.txt、file2.txt 和 directory/ 目录打包成 archive.tar 文件。
-
解压缩 tar 包:
tar -xvf archive.tar
这条命令将 archive.tar 文件解压缩到当前目录。
-
列出 tar 包的内容:
tar -tvf archive.tar
这条命令列出 archive.tar 文件中的所有文件和目录。
-
使用 gzip 压缩/解压缩:
tar -czvf archive.tar.gz file1.txt file2.txt directory/ tar -xzvf archive.tar.gz
第一条命令使用 gzip 压缩 file1.txt、file2.txt 和 directory/ 目录,并将其打包成 archive.tar.gz 文件。第二条命令将 archive.tar.gz 文件解压缩。
-
使用 bzip2 压缩/解压缩:
tar -cjvf archive.tar.bz2 file1.txt file2.txt directory/ tar -xjvf archive.tar.bz2
第一条命令使用 bzip2 压缩 file1.txt、file2.txt 和 directory/ 目录,并将其打包成 archive.tar.bz2 文件。第二条命令将 archive.tar.bz2 文件解压缩。
范例一:将整个 /etc 目录下的文件全部打包成为
/tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
上述指令在执行的时候,会显示一个警告讯息:
『`tar: Removing leading `/" from member names`』那是关於绝对路径的特殊设定。
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要的!
范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!
范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N “2005/06/01” -zcvf home.tar.gz /home
范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
这分别代表 standard output, standard input 与管线命令啦!
🚩总结
more
和less
命令可用于分页显示文本文件内容,less
比more
功能更强大。date
命令可用于显示和设置系统时间,支持多种时间格式和时间戳转换。
[root@hcss-ecs-ab43 ~]# date +%Y-%m-%d%H:%M:%S
2024-08-1019:56:52cal
命令可显示公历日历,包括当前月、前后月和整个年份。
cal -y 2024find
命令可在目录结构中搜索文件,支持多种条件组合,如文件名、文件类型、大小和时间等。grep
命令用于在文件中搜索指定的字符串或正则表达式,支持多种选项。
grep -n “llo” log.txtzip/unzip
和tar
命令分别用于创建和解压缩 ZIP 和 TAR 格式的文件,支持各种压缩算法。
zip dir1.zip -r dir1/
unzip dir1.zip -d dir2/