当前位置: 首页 > news >正文

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指令

以下是加入具体例子后,对 rmdirrm 指令更为详细的介绍:

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.常用示例:

  1. 查看 ls 命令的帮助:

    man ls
    
  2. 查看系统调用(如 open)的手册:

    man open
    
  3. 查看配置文件(如 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手册
    

手册章节划分:

  1. 用户命令(如 lscp)(使用man指令时默认)
  2. 系统调用(如 readwrite
  3. 库函数(如 printffopen
  4. 特殊文件(如设备文件)
  5. 配置文件格式
  6. 游戏
  7. 杂项
  8. 系统管理命令(如 serviceiptables

三.cp指令

cp 是 Linux/Unix 系统中用于复制文件或目录的核心命令,其基本功能是将源文件/目录复制到目标位置。

1.基本语法:

cp [选项] 源文件/目录 目标文件/目录

2.常用示例:

  1. 复制文件到指定位置

    # 将 file1.txt 复制到 /home/user/docs 目录下
    cp file1.txt /home/user/docs/# 将 file1.txt 复制到当前目录并改名为 file2.txt
    cp file1.txt file2.txt
    
  2. 复制多个文件到目录

    # 将 file1.txt、file2.txt 复制到 docs 目录
    cp file1.txt file2.txt docs/
    
  3. 复制目录(需加 -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 与重定向结合示例

  1. 创建新文件并写入内容

    echo "第一行内容" > test.txt  # 创建test.txt并写入内容
    
  2. 向文件追加内容

    echo "第二行内容" >> test.txt  # 在test.txt末尾添加一行
    
  3. 覆盖已有文件

    echo "覆盖原有内容" > test.txt  # 原有内容会被清除
    
  4. 输出变量到文件

    today=$(date)
    echo "今天是:$today" > log.txt  # 将日期写入日志文件
    
  5. 处理错误输出

    # 尝试读取不存在的文件,错误信息写入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 适合查看小型文件,对于大型文件(如日志),更适合用 lessmore 命令分页查看
  • 若不指定文件,cat 会从标准输入(键盘)读取内容,直到按 Ctrl+D 结束
  • 可以配合管道符 | 实现更复杂的操作,例如:
    # 查看文件并同时统计行数
    cat report.txt | wc -l
    

七. more与less指令

moreless 都是 Linux/Unix 中用于分页查看文件内容的命令,解决了 cat 命令查看大文件时内容瞬间刷屏的问题。其中 less 功能更强大,是日常使用的首选。

1.more 指令(基础分页工具)

more 是简单的分页查看工具,只能向前滚动,功能有限,了解基本用法即可。

1.1 基本语法:

more [选项] 文件名

1.2 常用操作:

  • 空格:向下翻一页
  • Enter:向下翻一行
  • b:向上翻一页(部分系统支持)
  • /关键词:向下搜索关键词
  • q:退出查看

1.3 示例:

more large_file.log  # 分页查看日志文件

2.less 指令(重点掌握,功能强大)

lessmore 的增强版,支持向前/向后滚动、快速定位、实时更新等功能,尤其适合查看大型文件(如日志、代码)。

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 的核心区别

特性moreless
滚动方向只能向前滚动支持前后自由滚动
内存占用加载整个文件到内存按需加载,适合超大文件
搜索功能仅支持向下搜索支持前后双向搜索
实时更新不支持支持(按Ctrl+F刷新)
退出后行为内容会保留在终端退出后终端恢复原状

日常使用中,less 基本可以完全替代 more,尤其是处理大型日志文件或代码时,less 的高效性和灵活性更为突出。

查看完整用法可执行:

man more  # 查看more手册
man less  # 查看less手册(内容较详细)

八.head和tail指令

headtail 是 Linux/Unix 中用于查看文件开头和结尾内容的命令,特别适合快速浏览大型文件的关键部分(如日志文件的最新记录)。

1.head 指令(查看文件开头)

head 用于显示文件的前几行内容,默认显示前10行。

1.1基本语法:

head [选项] 文件名

1.2常用示例:

  1. 默认显示前10行

    head log.txt  # 显示log.txt的前10行
    
  2. 指定显示前N行(用 -n 选项)

    head -n 5 report.txt  # 显示report.txt的前5行
    head -5 report.txt    # 简化写法,效果同上
    
  3. 显示除最后N行外的所有内容(用 -n -N

    head -n -100 data.csv  # 显示data.csv中除最后100行外的所有内容
    
  4. 同时查看多个文件

    head -n 3 file1.txt file2.txt  # 分别显示两个文件的前3行
    

2. tail 指令(查看文件结尾,重点掌握)

tail 用于显示文件的后几行内容,默认显示最后10行,其 实时跟踪文件更新 的功能尤为实用(如监控日志)。

2.1基本语法:

tail [选项] 文件名

2.2 常用示例:

  1. 默认显示最后10行

    tail messages.log  # 显示messages.log的最后10行
    
  2. 指定显示最后N行(用 -n 选项)

    tail -n 20 access.log  # 显示access.log的最后20行
    tail -20 access.log    # 简化写法,效果同上
    
  3. 实时跟踪文件更新(核心功能,用 -f 选项)

    tail -f server.log  # 实时显示server.log的新增内容(按Ctrl+C退出)
    
    • 适合监控正在写入的日志文件,新内容会自动显示在终端。
  4. 跟踪多个文件的更新

    tail -f app.log error.log  # 同时监控两个日志文件的更新
    
  5. 从第N行开始显示到文件结尾(用 -n +N

    tail -n +100 config.ini  # 从config.ini的第100行开始显示到结尾
    
  6. 结合 -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和管道一起使用

headtail 与管道符 | 结合使用时,可以实现更灵活的内容筛选,例如提取文件中间某段内容、多层过滤等。管道符的作用是将前一个命令的输出作为后一个命令的输入,非常适合组合文本处理命令。

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 注意事项

  1. 管道传递的是 前一个命令的标准输出,不包含错误信息(除非重定向错误输出)。
  2. 处理超大文件时,尽量先通过 tail 缩小范围,再用 head 截取,效率更高。
  3. 若需精确行数,可先用 cat -n 文件名 查看行号,再确定 tailhead 的参数。

通过这种组合,能灵活应对各种文本提取需求,尤其在处理日志、数据文件时非常高效。

九.date和cal指令

你可能是希望将之前指令说明中的编号统一改为纯数字格式。以下是调整后的 datecal 指令说明(采用编号已改为纯数字):

1. date 指令(查看/设置系统日期时间)

date 指令主要功能是显示当前系统时间,也可用于自定义时间格式输出或修改系统时间(需管理员权限)。

1.1 基本用法:查看当前时间

直接执行 date 命令,默认以系统预设格式显示当前日期和时间:

date
# 示例输出:Wed Oct  7 14:35:22 CST 2025
# 格式说明:星期 月份 日期 时:分:秒 时区 年份

1.2 核心功能:自定义时间格式

通过格式占位符控制输出内容,满足不同场景需求(如日志命名、脚本时间戳)。常用占位符及示例如下:

占位符含义示例输出
%Y4位年份2025
%m2位月份(01-12)10
%d2位日期(01-31)07
%H24小时制小时(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. 实用场景示例

  1. 生成带时间戳的文件名(脚本中常用):

    # 创建以“20251007_1435”为后缀的日志文件
    touch app_log_$(date +"%Y%m%d_%H%M").log
    
  2. 查看某一年的特定月份日历(如查询2024年春节所在月):

    cal 2 2024  # 查看2024年2月日历(春节为2月10日)
    
  3. 计算两个日期之间的天数(结合 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
http://www.dtcms.com/a/452978.html

相关文章:

  • BitTorrent 技术简介
  • 二、二选一多路器的设计流程
  • 建设一个电商网站的流程个人网站的前途
  • 老题新解|病人排队
  • 个人养老保险怎么买合适wordpress自带数据库优化
  • 水墨风鼠标效果实现
  • AI时代:IT从业者会被取代吗?
  • Python跨端Django+Vue3全栈开发:智慧社区小程序构建
  • 池州网站网站建设如何介绍自己的设计方案
  • Vue内置组件KeepAlive——缓存组件实例
  • 品牌网站建设小h蝌蚪机械电子工程网
  • 【高并发服务器】三、正则表达式的使用
  • 网站建设好公司好深圳好的品牌策划公司
  • Java的`volatile`关键字 笔记251007
  • 【文件读写】图片木马
  • 如何避免消息丢失
  • 设备管理平台项目部署
  • 最小二乘法(Least Squares Method):原理、应用与扩展
  • 13. Pandas 透视表与交叉表分析
  • Edu161 D、E 模拟+位运算构造
  • 临床研究三千问——如何选择合适的研究类型(12)
  • 电销做网站的话术响应式网站是
  • Channel 的核心特点 (Channel vs SharedFlow 选择对比)
  • 什么网站权重高wordpress置顶代码
  • 厦门app网站设计青岛队建网站
  • 【Linux】Linux进程信号(下)
  • C++基础:(九)string类的使用与模拟实现
  • C++网络编程(二)字节序与IP地址转换
  • 从零开始XR开发:Three.js实现交互式3D积木搭建器
  • 如何解决网站只收录首页的一些办法wordpress多站点内容聚合