Liunx:基本指令(二)
基本指令(二)
- 一.rmdir和rm指令
- 1.rmdir指令
- 2.rm指令
- 二.man指令
- 1.基本用法:
- 2.常用示例:
- 3.手册页的结构:
- 4.常用操作(在手册页内):
- 5.常用选项:
- 三.cp指令
- 1.基本语法:
- 2.常用示例:
- 3.常用选项:
- 4.注意事项:
- 四.echo指令与重定向
- 1.echo 基本用法
- 2.重定向符号
- 3.echo 与重定向结合示例
- 4.注意事项
- 五.mv指令
- 1.基本语法:
- 2.主要功能与示例:
- 2.1 重命名文件/目录
- 2.2 移动文件/目录到指定位置
- 2.3 移动并同时重命名
- 常用选项:
- 六.cat指令
- 1.基本语法:
- 2.主要功能与示例:
- 2.1 查看文件内容
- 2.2 创建新文件
- 2.3 拼接文件内容
- 2.4 向文件追加内容
- 3.常用选项:
- 4.注意事项:
- 七. more与less指令
- 1.more 指令(基础分页工具)
- 1.1 基本语法:
- 1.2 常用操作:
- 1.3 示例:
- 2.less 指令(重点掌握,功能强大)
- 2.1基本语法:
- 2.2 核心功能与操作:
- 1. 滚动控制
- 2. 搜索功能
- 3. 其他实用操作
- 4. 常用选项
- 3.more 与 less 的核心区别
- 八.head和tail指令
- 1.head 指令(查看文件开头)
- 1.1基本语法:
- 1.2常用示例:
- 2. tail 指令(查看文件结尾,重点掌握)
- 2.1基本语法:
- 2.2 常用示例:
- 3.常用选项对比
- 4.head,tail和管道一起使用
- 4.1核心用法:提取文件中间内容
- 语法结构:
- 示例:
- 4.2其他实用组合示例
- 1. 提取日志文件的中间时段记录
- 2. 结合 `grep` 过滤后再截取
- 3. 多层管道:先过滤再提取中间内容
- 4. 处理多个文件的组合内容
- 4.3 注意事项
- 九.date和cal指令
- 1. date 指令(查看/设置系统日期时间)
- 1.1 基本用法:查看当前时间
- 1.2 核心功能:自定义时间格式
- 1.3 其他实用功能
- 2. cal 指令(查看日历)
- 2.1 基本用法:查看当月日历
- 2.2 核心功能:查看指定日历
- 2.3 常用选项
- 3. 实用场景示例
- 十.find指令
- 1. 基本语法
- 2. 常用搜索条件及示例
- 2.1 按文件名搜索(最常用)
- 2.2 按文件类型搜索
- 2.3 按文件大小搜索
- 2.4 按修改时间搜索
- 2.5 按权限搜索
- 2.6 按所有者/所属组搜索
- 3. 组合条件搜索
- 4. 对搜索结果执行操作
- 5. 注意事项
一.rmdir和rm指令
以下是加入具体例子后,对 rmdir
和 rm
指令更为详细的介绍:
1.rmdir指令
rmdir
是 “remove directory” 的缩写,专门用于删除空目录。其基本语法格式为:
rmdir [选项] 目录名
常用选项:
-p
:递归删除目录。如果目录是嵌套的,比如/a/b/c
,使用rmdir -p /a/b/c
,它会先删除c
目录,若b
目录在c
目录删除后为空,接着删除b
目录,以此类推,直到a
目录(前提是每个父目录在子目录删除后都为空)。
示例:
- 删除单个空目录:
假设当前目录下有一个空目录test_dir
,你可以执行以下命令来删除它:
ls
# 输出类似:test_dir other_file.txt
rmdir test_dir
ls
# 输出类似:other_file.txt
执行 rmdir test_dir
后,再次使用 ls
命令查看,会发现 test_dir
目录已被成功删除。
- 递归删除空目录:
假如你创建了一个目录结构parent_dir/child_dir/grandchild_dir
,并且这几个目录都是空目录,你可以通过以下命令一次性删除这三个嵌套的空目录:
mkdir -p parent_dir/child_dir/grandchild_dir
ls parent_dir/child_dir/
# 输出为空,因为 grandchild_dir 也是空目录
rmdir -p parent_dir/child_dir/grandchild_dir
ls parent_dir/
# 输出为空,parent_dir 下的子目录都被删除,且 parent_dir 也为空被一并删除
这里先使用 mkdir -p
创建了嵌套的空目录结构,然后用 rmdir -p
递归删除,最后确认所有相关目录都被成功移除。
2.rm指令
rm
是 “remove” 的缩写,用于删除文件或目录,功能比 rmdir
更强大,所以更推荐使用rm,基本语法格式为:
rm [选项] 文件或目录名
常用选项:
-f
:强制删除,不询问确认。在需要批量删除且确定要删除的情况下比较方便,但也存在误删重要文件的风险。-r
或-R
:递归删除,用于删除目录及其目录下的所有内容。比如删除一个包含文件和子目录的my_dir
目录,就需要使用rm -r my_dir
。-i
:交互式删除,在删除每个文件或目录前都会询问用户是否确认删除,避免误删。
示例:
- 删除单个文件:
若当前目录下有一个文件example.txt
,执行以下命令:
ls
# 输出类似:example.txt another_file.csv
rm example.txt
ls
# 输出类似:another_file.csv
执行 rm example.txt
后,系统会提示是否删除(如果没有使用 -f
选项),输入 y
回车即可删除该文件。再次使用 ls
命令查看,example.txt
文件已不存在。
- 递归删除目录及其内容:
对于一个包含文件和子目录的非空目录my_project
,执行以下命令可以删除它及其里面的所有内容:
mkdir my_project
touch my_project/file1.txt
mkdir my_project/sub_dir
touch my_project/sub_dir/file2.txt
ls my_project/
# 输出类似:file1.txt sub_dir
rm -r my_project
ls
# 此时 my_project 目录已被删除,当前目录下不再显示相关内容
这里先创建了 my_project
目录,并在其中创建了文件和子目录,然后使用 rm -r my_project
递归删除,最后确认整个 my_project
目录及其内容都被移除。
- 强制递归删除目录及其内容:
如果要快速删除非空目录old_data
且不希望有确认提示,可以执行以下命令:
mkdir old_data
touch old_data/file3.txt
mkdir old_data/sub_old_dir
touch old_data/sub_old_dir/file4.txt
rm -rf old_data
ls
# old_data 目录及其内容已被强制删除,当前目录下不再显示相关内容
注意:!
但使用 rm -rf
指令时一定要非常谨慎,因为一旦误操作,删除的数据很难恢复。比如误删了系统关键目录,可能导致系统无法正常运行。
二.man指令
man
是 Linux/Unix 系统中最常用的帮助指令,用于查看命令、函数或配置文件的详细手册(manual)。
1.基本用法:
man [选项] 命令/函数/配置文件
2.常用示例:
-
查看
ls
命令的帮助:man ls
-
查看系统调用(如
open
)的手册:man open
-
查看配置文件(如
passwd
)的说明:man passwd
3.手册页的结构:
通常包含以下部分:
- NAME:命令名称和简要描述
- SYNOPSIS:语法格式(
[]
表示可选,|
表示多选一) - DESCRIPTION:详细功能说明
- OPTIONS:所有可用选项的解释
- EXAMPLES:使用示例(部分手册有)
- SEE ALSO:相关命令或手册
4.常用操作(在手册页内):
- 按
空格
或f
键:向下翻页 - 按
b
键:向上翻页 - 按
/关键词
:搜索关键词(按n
找下一个,N
找上一个) - 按
q
键:退出手册
5.常用选项:
-k 关键词
:搜索包含关键词的手册(相当于apropos
命令)man -k "list directory" # 搜索与列出目录相关的命令
-f 命令
:显示命令的简短描述(相当于whatis
命令)man -f ls
-数字
:指定手册章节(有些命令在多个章节有不同解释)man 2 open # 查看第2章(系统调用)的open手册
手册章节划分:
- 用户命令(如
ls
、cp
)(使用man指令时默认) - 系统调用(如
read
、write
) - 库函数(如
printf
、fopen
) - 特殊文件(如设备文件)
- 配置文件格式
- 游戏
- 杂项
- 系统管理命令(如
service
、iptables
)
三.cp指令
cp
是 Linux/Unix 系统中用于复制文件或目录的核心命令,其基本功能是将源文件/目录复制到目标位置。
1.基本语法:
cp [选项] 源文件/目录 目标文件/目录
2.常用示例:
-
复制文件到指定位置
# 将 file1.txt 复制到 /home/user/docs 目录下 cp file1.txt /home/user/docs/# 将 file1.txt 复制到当前目录并改名为 file2.txt cp file1.txt file2.txt
-
复制多个文件到目录
# 将 file1.txt、file2.txt 复制到 docs 目录 cp file1.txt file2.txt docs/
-
复制目录(需加
-r
选项)# 递归复制 dir1 及其内容到 dir2(若 dir2 不存在则创建) cp -r dir1 dir2# 将 dir1 复制到 /home/user 目录下 cp -r dir1 /home/user/
3.常用选项:
-r
或-R
:递归复制目录(必须用于复制目录时)-i
:交互式操作,若目标文件已存在则提示确认cp -i file1.txt /home/user/ # 若目标存在会询问是否覆盖
-f
:强制覆盖目标文件,不提示(与-i
相反)-v
:显示复制过程(verbose 模式)cp -v *.txt docs/ # 显示每个文件的复制信息
-a
:归档模式,相当于-dR --preserve=all
,保留文件属性、链接关系等,适合备份cp -a /data /backup/ # 完整复制目录结构及属性
-l
:创建硬链接而非复制文件本身-s
:创建符号链接(软链接)cp -s file1.txt link1 # 创建 file1.txt 的软链接 link1
4.注意事项:
- 复制目录时必须使用
-r
或-R
选项,否则会报错 - 若目标是已存在的目录,源文件/目录会被复制到该目录内
- 若目标是文件且已存在,默认会直接覆盖(除非设置了
-i
选项) - 可以使用通配符
*
批量复制符合条件的文件cp *.jpg images/ # 复制所有 jpg 文件到 images 目录
要查看完整用法,可执行 man cp
查看手册页。
四.echo指令与重定向
echo
指令用于在终端输出字符串,而重定向则可以将输出内容写入文件(而非显示在屏幕上),两者结合是 Shell 脚本中常用的文本处理方式。
1.echo 基本用法
# 输出普通字符串
echo "Hello World" # 输出:Hello World# 输出变量(需用$符号)
name="Alice"
echo "My name is $name" # 输出:My name is Alice# 输出特殊字符(需转义或用单引号)
echo "He said \"Hello\"" # 输出:He said "Hello"
echo 'He said "Hello"' # 单引号内无需转义,输出同上# 不换行输出(加-n选项)
echo -n "Enter your name: " # 输出后不自动换行
2.重定向符号
重定向通过特殊符号改变输出方向,常用符号:
符号 | 作用 | 示例 |
---|---|---|
> | 覆盖写入文件(文件不存在则创建) | echo "text" > file.txt |
>> | 追加写入文件(在文件末尾添加内容) | echo "new line" >> file.txt |
2> | 重定向错误输出(覆盖模式) | command 2> error.log |
2>> | 重定向错误输出(追加模式) | command 2>> error.log |
&> | 重定向所有输出(标准输出+错误输出) | command &> all.log |
3.echo 与重定向结合示例
-
创建新文件并写入内容
echo "第一行内容" > test.txt # 创建test.txt并写入内容
-
向文件追加内容
echo "第二行内容" >> test.txt # 在test.txt末尾添加一行
-
覆盖已有文件
echo "覆盖原有内容" > test.txt # 原有内容会被清除
-
输出变量到文件
today=$(date) echo "今天是:$today" > log.txt # 将日期写入日志文件
-
处理错误输出
# 尝试读取不存在的文件,错误信息写入error.log cat nofile.txt 2> error.log
4.注意事项
- 使用
>
时若目标文件已存在,原有内容会被彻底覆盖,需谨慎操作 - 普通用户对系统目录(如
/root
)可能没有写入权限,会导致重定向失败 - 若要同时重定向标准输出和错误输出到同一文件,可使用:
command > output.log 2>&1 # 等价于 &>
通过 man echo
可查看 echo
命令的完整手册,man bash
可了解更多重定向细节。
五.mv指令
mv
是 Linux/Unix 系统中用于移动或重命名文件/目录的命令,其核心功能是改变文件或目录的位置或名称。
1.基本语法:
mv [选项] 源文件/目录 目标文件/目录
2.主要功能与示例:
2.1 重命名文件/目录
当源和目标在同一目录时,mv
会执行重命名操作:
# 重命名文件
mv oldfile.txt newfile.txt# 重命名目录
mv olddir/ newdir/
2.2 移动文件/目录到指定位置
当目标是已存在的目录时,源会被移动到该目录下:
# 移动文件到 docs 目录
mv report.pdf /home/user/docs/# 移动多个文件到 images 目录
mv photo1.jpg photo2.png ~/images/# 移动目录到 backup 目录
mv project/ /data/backup/
2.3 移动并同时重命名
将文件/目录移动到新位置的同时修改名称:
# 把 file.txt 移动到 docs 目录并改名为 note.txt
mv file.txt /home/user/docs/note.txt# 把 dir 移动到 /opt 下并改名为 newdir
mv dir /opt/newdir
常用选项:
-
-i
:交互式操作,若目标文件已存在则提示确认mv -i file.txt docs/ # 若docs中已有file.txt,会询问是否覆盖
-
-f
:强制移动,覆盖已存在的目标文件而不提示(与-i
相反)mv -f old.txt new.txt # 直接覆盖,无提示
-
-v
:显示移动过程(verbose 模式)mv -v *.txt docs/ # 显示每个文件的移动信息
-
-n
:不覆盖已存在的文件(比-i
更安全,直接跳过不提示)mv -n important.txt backup/ # 若backup中已有该文件,则不执行操作
##c 注意事项:
- 移动目录时无需像
cp
那样加-r
选项,mv
天生支持目录操作 - 普通用户不能移动系统保护文件或其他用户的文件(除非有相应权限)
- 使用通配符
*
可批量移动文件:mv ~/downloads/*.zip ~/archives/ # 移动所有zip文件到archives目录
- 若目标路径不存在且源是单个文件/目录,
mv
会将源重命名为目标路径名称
六.cat指令
cat
是 Linux/Unix 系统中用于查看、创建或拼接文件内容的常用命令,名称来源于 “concatenate”(连接)的缩写。
1.基本语法:
cat [选项] [文件...]
2.主要功能与示例:
2.1 查看文件内容
最常用的功能是直接输出文件内容到终端:
# 查看单个文件
cat README.txt# 同时查看多个文件(内容会依次显示)
cat file1.txt file2.txt
2.2 创建新文件
通过重定向符号 >
可快速创建文件并写入内容:
# 创建文件并输入内容,按 Ctrl+D 结束输入
cat > newfile.txt
这是新文件的第一行
这是第二行
(按Ctrl+D保存退出)
2.3 拼接文件内容
将多个文件的内容合并到一个新文件:
# 将 file1.txt 和 file2.txt 的内容合并到 combined.txt
cat file1.txt file2.txt > combined.txt
2.4 向文件追加内容
使用 >>
向已有文件末尾添加内容:
# 向 notes.txt 追加一行内容
cat >> notes.txt
这是追加的新内容
(按Ctrl+D结束)
3.常用选项:
-
-n
:显示行号(包括空行)cat -n script.sh # 显示文件内容并在每行前加上行号
-
-b
:显示行号但忽略空行cat -b document.txt # 只对非空行编号
-
-s
:压缩连续的空行为一个空行cat -s messy.txt # 使输出更整洁
-
-T
:显示制表符(Tab键)为^I
cat -T data.csv # 清晰查看表格分隔符
4.注意事项:
cat
适合查看小型文件,对于大型文件(如日志),更适合用less
或more
命令分页查看- 若不指定文件,
cat
会从标准输入(键盘)读取内容,直到按Ctrl+D
结束 - 可以配合管道符
|
实现更复杂的操作,例如:# 查看文件并同时统计行数 cat report.txt | wc -l
七. more与less指令
more
和 less
都是 Linux/Unix 中用于分页查看文件内容的命令,解决了 cat
命令查看大文件时内容瞬间刷屏的问题。其中 less
功能更强大,是日常使用的首选。
1.more 指令(基础分页工具)
more
是简单的分页查看工具,只能向前滚动,功能有限,了解基本用法即可。
1.1 基本语法:
more [选项] 文件名
1.2 常用操作:
- 按 空格:向下翻一页
- 按 Enter:向下翻一行
- 按 b:向上翻一页(部分系统支持)
- 按 /关键词:向下搜索关键词
- 按 q:退出查看
1.3 示例:
more large_file.log # 分页查看日志文件
2.less 指令(重点掌握,功能强大)
less
是 more
的增强版,支持向前/向后滚动、快速定位、实时更新等功能,尤其适合查看大型文件(如日志、代码)。
2.1基本语法:
less [选项] 文件名
2.2 核心功能与操作:
1. 滚动控制
- 向下滚动:
- 按
j
或 向下箭头:向下翻一行 - 按
d
:向下翻半页 - 按 空格 或
f
:向下翻一页
- 按
- 向上滚动:
- 按
k
或 向上箭头:向上翻一行 - 按
u
:向上翻半页 - 按
b
:向上翻一页
- 按
- 快速定位:
- 按
g
:跳转到文件开头 - 按
G
:跳转到文件末尾 - 按
数字+g
:跳转到指定行(如50g
跳转到第50行)
- 按
2. 搜索功能
- 向下搜索:
/关键词 # 输入后按Enter,查找下一个匹配项 n # 跳转到下一个匹配项 N # 跳转到上一个匹配项
- 向上搜索:
?关键词 # 从当前位置向上搜索 n # 跳转到上一个匹配项(与/搜索方向相反) N # 跳转到下一个匹配项
3. 其他实用操作
- 按
p
:显示当前文件名和百分比(已阅读比例) - 按
v
:调用系统默认编辑器编辑当前文件(需提前设置EDITOR
变量) - 按
Ctrl+F
:刷新文件内容(适合实时查看日志更新) - 按
q
:退出less
4. 常用选项
-N
:显示行号less -N code.py # 查看代码并显示行号
-i
:搜索时忽略大小写less -i log.txt # 搜索关键词时不区分大小写
-S
:超出屏幕宽度的内容不换行(按左右箭头滚动查看)less -S wide_table.txt # 适合查看宽表格数据
3.more 与 less 的核心区别
特性 | more | less |
---|---|---|
滚动方向 | 只能向前滚动 | 支持前后自由滚动 |
内存占用 | 加载整个文件到内存 | 按需加载,适合超大文件 |
搜索功能 | 仅支持向下搜索 | 支持前后双向搜索 |
实时更新 | 不支持 | 支持(按Ctrl+F刷新) |
退出后行为 | 内容会保留在终端 | 退出后终端恢复原状 |
日常使用中,less
基本可以完全替代 more
,尤其是处理大型日志文件或代码时,less
的高效性和灵活性更为突出。
查看完整用法可执行:
man more # 查看more手册
man less # 查看less手册(内容较详细)
八.head和tail指令
head
和 tail
是 Linux/Unix 中用于查看文件开头和结尾内容的命令,特别适合快速浏览大型文件的关键部分(如日志文件的最新记录)。
1.head 指令(查看文件开头)
head
用于显示文件的前几行内容,默认显示前10行。
1.1基本语法:
head [选项] 文件名
1.2常用示例:
-
默认显示前10行
head log.txt # 显示log.txt的前10行
-
指定显示前N行(用
-n
选项)head -n 5 report.txt # 显示report.txt的前5行 head -5 report.txt # 简化写法,效果同上
-
显示除最后N行外的所有内容(用
-n -N
)head -n -100 data.csv # 显示data.csv中除最后100行外的所有内容
-
同时查看多个文件
head -n 3 file1.txt file2.txt # 分别显示两个文件的前3行
2. tail 指令(查看文件结尾,重点掌握)
tail
用于显示文件的后几行内容,默认显示最后10行,其 实时跟踪文件更新 的功能尤为实用(如监控日志)。
2.1基本语法:
tail [选项] 文件名
2.2 常用示例:
-
默认显示最后10行
tail messages.log # 显示messages.log的最后10行
-
指定显示最后N行(用
-n
选项)tail -n 20 access.log # 显示access.log的最后20行 tail -20 access.log # 简化写法,效果同上
-
实时跟踪文件更新(核心功能,用
-f
选项)tail -f server.log # 实时显示server.log的新增内容(按Ctrl+C退出)
- 适合监控正在写入的日志文件,新内容会自动显示在终端。
-
跟踪多个文件的更新
tail -f app.log error.log # 同时监控两个日志文件的更新
-
从第N行开始显示到文件结尾(用
-n +N
)tail -n +100 config.ini # 从config.ini的第100行开始显示到结尾
-
结合
-f
和-n
跟踪并显示更多历史内容tail -n 50 -f debug.log # 先显示最后50行,再实时跟踪新内容
3.常用选项对比
命令 | 选项 | 功能描述 |
---|---|---|
head | -n N | 显示前N行(N为正整数) |
head | -n -N | 显示除最后N行外的所有内容 |
tail | -n N | 显示最后N行(N为正整数) |
tail | -n +N | 从第N行开始显示到结尾 |
tail | -f | 实时跟踪文件新增内容(follow) |
tail | -F | 类似 -f ,但文件被删除重建后仍能继续跟踪 |
4.head,tail和管道一起使用
head
和 tail
与管道符 |
结合使用时,可以实现更灵活的内容筛选,例如提取文件中间某段内容、多层过滤等。管道符的作用是将前一个命令的输出作为后一个命令的输入,非常适合组合文本处理命令。
4.1核心用法:提取文件中间内容
最常见的场景是先用 tail
定位到起始行,再用 head
截取需要的行数,从而提取文件中间的某一段内容。
语法结构:
tail -n +起始行 文件名 | head -n 需提取的行数
示例:
假设 data.txt
有 100 行内容,要提取 第 20 到 30 行:
tail -n +20 data.txt | head -n 11
# 解释:
# 1. tail -n +20:从第20行开始显示到文件结尾
# 2. |:将上述输出传递给head
# 3. head -n 11:从传递的内容中取前11行(即20-30行)
4.2其他实用组合示例
1. 提取日志文件的中间时段记录
假设日志按时间顺序排列,先看前50行找到目标起始位置,再提取中间10行:
cat app.log | tail -n +30 | head -n 10
# 从第30行开始,取10行内容(30-39行)
2. 结合 grep
过滤后再截取
先筛选包含关键词的行,再取其中的前5行和后5行:
# 查找包含"error"的行,再取这些行中的前5行
grep "error" server.log | head -n 5# 查找包含"warning"的行,再取这些行中的后3行
grep "warning" server.log | tail -n 3
3. 多层管道:先过滤再提取中间内容
例如:从日志中筛选出2023-10-01的记录,再提取其中第10到20行:
grep "2023-10-01" access.log | tail -n +10 | head -n 11
4. 处理多个文件的组合内容
例如:查看多个配置文件的前3行和后2行(常用于快速对比文件结构):
cat *.conf | head -n 3 # 所有conf文件合并后的前3行
cat *.conf | tail -n 2 # 所有conf文件合并后的最后2行
4.3 注意事项
- 管道传递的是 前一个命令的标准输出,不包含错误信息(除非重定向错误输出)。
- 处理超大文件时,尽量先通过
tail
缩小范围,再用head
截取,效率更高。 - 若需精确行数,可先用
cat -n 文件名
查看行号,再确定tail
和head
的参数。
通过这种组合,能灵活应对各种文本提取需求,尤其在处理日志、数据文件时非常高效。
九.date和cal指令
你可能是希望将之前指令说明中的编号统一改为纯数字格式。以下是调整后的 date
和 cal
指令说明(采用编号已改为纯数字):
1. date 指令(查看/设置系统日期时间)
date
指令主要功能是显示当前系统时间,也可用于自定义时间格式输出或修改系统时间(需管理员权限)。
1.1 基本用法:查看当前时间
直接执行 date
命令,默认以系统预设格式显示当前日期和时间:
date
# 示例输出:Wed Oct 7 14:35:22 CST 2025
# 格式说明:星期 月份 日期 时:分:秒 时区 年份
1.2 核心功能:自定义时间格式
通过格式占位符控制输出内容,满足不同场景需求(如日志命名、脚本时间戳)。常用占位符及示例如下:
占位符 | 含义 | 示例输出 |
---|---|---|
%Y | 4位年份 | 2025 |
%m | 2位月份(01-12) | 10 |
%d | 2位日期(01-31) | 07 |
%H | 24小时制小时(00-23) | 14 |
%M | 分钟(00-59) | 35 |
%S | 秒(00-59) | 22 |
%w | 星期(0=周日,1=周一) | 3 |
%F | 标准日期格式(Y-m-d) | 2025-10-07 |
%T | 标准时间格式(H:M:S) | 14:35:22 |
示例:自定义格式输出
# 输出格式:2025-10-07 14:35:22(常用于日志时间戳)
date +"%Y-%m-%d %H:%M:%S"# 输出格式:10/07 周%w 14:35(简洁显示)
date +"%m/%d 周%w %H:%M"# 仅输出当前年份和月份
date +"%Y-%m"
1.3 其他实用功能
-
查看指定时间:通过
-d
选项查看过去或未来的时间(无需修改系统时间)date -d "1 day ago" # 查看昨天此时的时间 date -d "next week" # 查看下周此时的时间 date -d "2025-12-31" # 查看指定日期的星期和时间
-
修改系统时间(需
root
权限):格式为date -s "日期时间"
sudo date -s "2025-10-07 15:00:00" # 将系统时间设为2025年10月7日15:00
-
同步硬件时间:修改系统时间后,需同步到硬件时钟(防止重启后失效)
sudo hwclock --systohc # 将系统时间写入硬件时钟
2. cal 指令(查看日历)
cal
指令用于显示日历,支持查看当月、指定月份或全年日历,默认显示当前月份日历。
2.1 基本用法:查看当月日历
直接执行 cal
,默认以“星期一行首”的格式显示当前月份日历:
cal
# 示例输出(2025年10月):
# October 2025
# Su Mo Tu We Th Fr Sa
# 1
# 2 3 4 5 6 7 8
# 9 10 11 12 13 14 15
# 16 17 18 19 20 21 22
# 23 24 25 26 27 28 29
# 30 31
2.2 核心功能:查看指定日历
通过参数指定查看“特定月份”或“全年”日历,满足不同查询需求。
命令格式 | 功能描述 | 示例 |
---|---|---|
cal 月份 年份 | 查看指定年份的指定月份 | cal 12 2025 (查看2025年12月) |
cal 年份 | 查看指定年份的全年日历 | cal 2025 (查看2025年全年) |
cal -y 年份 | 同 cal 年份 ,显全年日历 | cal -y 2024 |
2.3 常用选项
-
-j
:显示“儒略日”(一年中的第几天,1-365/366)cal -j 10 2025 # 10月1日显示为“277”(2025年1-9月共276天)
-
-m
:将“周日”设为每周的第一天(默认是周一)cal -m # 当月日历以周日为第一列
-
-3
:显示“上一个月、当前月、下一个月”的日历(三栏布局)cal -3 # 同时查看9月、10月、11月日历
3. 实用场景示例
-
生成带时间戳的文件名(脚本中常用):
# 创建以“20251007_1435”为后缀的日志文件 touch app_log_$(date +"%Y%m%d_%H%M").log
-
查看某一年的特定月份日历(如查询2024年春节所在月):
cal 2 2024 # 查看2024年2月日历(春节为2月10日)
-
计算两个日期之间的天数(结合
date
的时间戳功能):# 计算2025-10-07到2025-12-31的天数 echo $(( ($(date -d "2025-12-31" +%s) - $(date -d "2025-10-07" +%s)) / 86400 ))
查看完整用法可执行:
man date # 查看date指令详细手册
man cal # 查看cal指令详细手册
十.find指令
find
是 Linux/Unix 系统中功能强大的文件搜索工具,可根据文件名、大小、类型、修改时间等多种条件查找文件或目录,是系统管理和日常操作的重要命令。
1. 基本语法
find [搜索路径] [搜索条件] [操作动作]
- 搜索路径:指定要搜索的目录(默认为当前目录)
- 搜索条件:定义搜索的过滤规则(如文件名、大小等)
- 操作动作:对找到的文件执行的操作(如删除、复制等,默认是显示路径)
2. 常用搜索条件及示例
2.1 按文件名搜索(最常用)
-name "文件名"
:精确匹配文件名(区分大小写)-iname "文件名"
:精确匹配文件名(不区分大小写)- 支持通配符
*
(任意字符)、?
(单个字符)
# 在当前目录及子目录中查找名为 "README.txt" 的文件
find . -name "README.txt"# 在 /etc 目录中查找以 ".conf" 结尾的文件(不区分大小写)
find /etc -iname "*.conf"# 在 /home 目录中查找文件名包含 "note" 的文件
find /home -name "*note*"
2.2 按文件类型搜索
-type f
:普通文件-type d
:目录-type l
:符号链接-type b
:块设备文件-type c
:字符设备文件
# 在 /usr/bin 中查找所有可执行文件(普通文件类型)
find /usr/bin -type f# 在当前目录查找所有子目录
find . -type d# 查找系统中的所有符号链接
find / -type l
2.3 按文件大小搜索
-size [+/-]大小
:+
表示大于,-
表示小于,无符号表示等于- 单位:
b
(字节)、k
(KB)、M
(MB)、G
(GB)(默认单位是 512字节块)
# 查找当前目录中大于100MB的文件
find . -size +100M# 查找 /var/log 中小于10KB的日志文件
find /var/log -name "*.log" -size -10k# 查找正好1GB的文件
find / -size 1G
2.4 按修改时间搜索
-mtime [+/-]天数
:按内容修改时间搜索(+
表示超过,-
表示以内)-atime [+/-]天数
:按访问时间搜索-ctime [+/-]天数
:按元数据(权限等)修改时间搜索
# 查找最近3天内修改过的文件
find . -mtime -3# 查找超过7天未访问的文件
find /tmp -atime +7# 查找正好5天前修改过的配置文件
find /etc -name "*.conf" -mtime 5
2.5 按权限搜索
-perm 权限值
:精确匹配权限(如0644
)-perm -权限值
:文件权限包含指定权限(如-0600
表示至少有所有者读写权限)
# 查找权限为 755 的可执行文件
find /usr/local -type f -perm 0755# 查找所有具有 SUID 权限的文件(危险权限,需注意)
find / -perm -4000
2.6 按所有者/所属组搜索
-user 用户名
:查找指定用户拥有的文件-group 组名
:查找指定组拥有的文件
# 查找属于 user1 的所有文件
find /home -user user1# 查找属于 admin 组的目录
find / -type d -group admin
3. 组合条件搜索
使用逻辑运算符组合多个条件:
-a
:逻辑与(默认,可省略)-o
:逻辑或!
:逻辑非
# 查找当前目录中,3天内修改且大于1MB的普通文件
find . -type f -mtime -3 -size +1M# 查找 /etc 中,名称以 .conf 结尾或 .ini 结尾的文件
find /etc -name "*.conf" -o -name "*.ini"# 查找当前目录中,不是以 .txt 结尾的文件
find . ! -name "*.txt"
4. 对搜索结果执行操作
-exec 命令 {} \;
:对找到的每个文件执行指定命令({}
代表文件名,\;
是结束符)-delete
:删除找到的文件(危险操作,建议先不加此参数确认结果)
# 查找并显示所有 .log 文件的详细信息
find /var/log -name "*.log" -exec ls -l {} \;# 查找30天前的临时文件并删除(先执行不带 -delete 的命令确认)
find /tmp -type f -mtime +30 -delete# 查找并复制所有 .pdf 文件到 ~/pdfs 目录
find . -name "*.pdf" -exec cp {} ~/pdfs/ \;
5. 注意事项
- 搜索系统目录(如
/
)时可能需要sudo
权限,否则会出现大量“权限不足”错误 - 可用
-prune
选项排除某些目录(如排除proc
目录:find / -path /proc -prune -o -name "*.log"
) - 搜索大型目录时耗时较长,可配合
-maxdepth N
限制搜索深度(N
为最大深度,1表示不进入子目录)
查看完整用法可执行:
man find