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

Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)

文章目录

  • 前言
  • 1、Linux文件系统
    • 1.1 核心特点
    • 1.2 重要目录结构
    • 1.3 文件类型
    • 1.4 文件和目录的命名规则
    • 1.5 文件与目录的定位方式
  • 2、查看目录或文件的详细信息(ls)
    • 2.1 基本语法
    • 2.2 常用操作
    • 2.3 高级用法
  • 3、切换目录(cd)
    • 3.1 常用操作
    • 3.2 扩展:显示当前工作目录(pwd)
  • 4、查看、合并文件(cat)
  • 5、复制文件或目录(cp)
  • 6、移动或重命名文件/目录(mv)
  • 7、创建文件或目录
    • 7.1 创建文件(touch)
    • 7.2 创建目录(mkdir)
  • 8、删除文件或目录
    • 8.1 rm 命令的使用
    • 8.2 rmdir 命令的使用
  • 9、检测文件类型(file)

前言

本篇文章从底层出发,详细讲解了Linux文件系统的结构及特点,同时介绍了许多管理文件和目录的命令,包括ls、cd、cat、cp、touch、mkdir、file等命令,通过学习这些命令,大家可以更好的操作并管理linux文件系统,整篇文章超10000字,每个知识点都进行了详细的讲解并给出了操作实例,适合零基础学习者。

环境准备:

在开始学习Linux命令前,我们首先需要准备好运行命令所需的环境,也就是安装Linux操作系统。这里为了方便学习,我们将通过VMware Workstation 虚拟化软件模拟一台Centos 7操作系统的虚拟机,后续所有操作都将在该虚拟机上进行

安装教程推荐:
VMware Workstation:https://blog.csdn.net/weixin_74195551/article/details/127288338
Centos 7 操作系统:https://blog.csdn.net/m0_74950751/article/details/128773027

安装完成后,在桌面鼠标右键,打开终端,后续所有命令都是在终端运行的,若安装的命令行界面,则直接输入命令即可。
在这里插入图片描述
在这里插入图片描述

1、Linux文件系统

Linux 文件系统是操作系统中用于管理和组织存储设备(如硬盘、SSD、U盘等)数据的关键组件。它不仅定义了文件和目录的存储方式,还提供了一套逻辑规则和数据结构,确保用户和应用程序能够高效、安全地访问数据。

1.1 核心特点

  • 单根树形结构:所有文件和目录以单一的根目录(/)为起点,形成层次化的树状结构,所有文件和目录都在根目录(/)下

  • 统一命名空间:无论物理存储设备如何分布,所有文件和目录都在同一逻辑路径下访问,也就是通过路径符/来进行访问,如:访问 /data/int/log ,路径通过 /字符进行分隔

  • 区分大小写:文件名和路径对大小写敏感(例如 File.txt 和 file.txt 是两个不同的文件)。

  • 一切皆文件:Linux 将硬件设备、进程信息、网络接口等抽象为文件(如 /dev/sda、/proc/cpuinfo)。

  • 所有目录均可以是挂载点 :挂载点本质就是一个目录,只要目录存在,未被其它文件占用,就可以作为挂载点,包括根目录(/)都可以成为挂载点

Tips:

  1. 在Windows中所有文件和目录都是以盘符为起点,如:C:\data,D:\image ;而在Linux中则是以根目录(/)为起点,如:/data
  2. Linux中的目录相当于Windows中的文件夹
  3. 文件是操作系统中数据存放的最小单位

1.2 重要目录结构

  • /(根目录):所有目录和文件的起点。
  • /root:超级用户(root)的家目录。
  • /bin:存放系统基本命令(如 ls、cp)。
  • /etc:系统全局配置文件(如网络配置、用户账户)。
  • /home:存放普通用户的家目录(每个用户独立子目录)。
  • /var:存放动态数据(系统服务数据、日志文件、数据库文件、邮件等)。
  • /tmp:系统临时文件,重启后可能被清除。
  • /dev:设备文件(如硬盘 /dev/sda1、终端 /dev/tty)。
  • /proc和/sys:虚拟文件系统,提供内核和进程的实时信息,反映当前系统运行状态。
  • /usr:用户程序和数据(如应用程序、库文件)。
  • /boot:系统启动所需文件(内核、引导加载程序)。
  • /mnt 和 /media:临时挂载外部设备的目录(如U盘、光盘)。
  • /opt:第三方软件的可选安装位置。

1.3 文件类型


Linux 文件系统支持多种文件类型:

  1. 普通文件(Regular File):文本、二进制、图像等数据。

  2. 目录(Directory):包含其他文件或子目录的容器。

  3. 符号链接(Symbolic Link):指向另一个文件或目录的快捷方式。

  4. 设备文件(Device File)

    • 块设备(Block Device):按块访问的设备(如硬盘)。
    • 字符设备(Character Device):按字符流访问的设备(如键盘)。
  5. 管道(Pipe)和套接字(Socket):用于进程间通信。

  6. 命名管道(FIFO):类似管道,但有文件名。

1.4 文件和目录的命名规则


1、基本规则

  1. 区分大小写

    • 文件名和目录名对大小写敏感,例如 file.txt、File.txt 和 FILE.TXT 是三个不同的文件。
  2. 允许的字符

    • 可以使用字母(A-Z、a-z)、数字(0-9)、下划线(_)、点(.)、连字符(-)等。
    • 避免特殊字符:如!@#$%^&*(){}[]|\;:'"<>?等,因为它们可能在 Shell 中有特殊含义(需用引号或转义符)。
  3. 长度限制

    • 通常最大长度为 255 字节(UTF-8 编码下可能少于 255 个字符)。
    • 完整路径(含 /)的最大长度为 4096 字节(PATH_MAX 限制)。
  4. 不能以 / 命名

    • / 是路径分隔符,不能作为文件名的一部分。


2、特殊名称

  1. ...

    • . 表示当前目录,.. 表示父目录(是每个目录默认存在的硬链接)。
  2. 隐藏文件或目录

    • . 开头的文件或目录(如 .bashrc)默认隐藏,需用 ls -a 查看。
  3. 避免使用空格

    • 虽然允许(如 my file.txt),但空格在 Shell 中会被解析为参数分隔符,需用引号或转义符(\)处理,如下:
      touch "my file.txt"    # 正确(使用引号包裹)
      touch my\ file.txt     # 正确(使用反斜杠转义)
      

3、推荐写法

  1. 使用小写字母和下划线

    例如 project_notes.txt,避免大小写混用导致的混淆。

  2. 避免特殊字符和空格

    优先用 -_ 代替空格(如 backup-2023.tar.gz)。

  3. 扩展名非强制要求但有用

    Linux 不依赖扩展名识别文件类型(如 .txt、.sh 仅为约定),但推荐保留以便管理。

4、 禁止使用的名称

  • 系统保留名称:如 /dev/null、/proc 等路径下的特殊文件。

  • 设备文件:避免直接命名文件为 sda、tty 等,可能与系统设备冲突。

1.5 文件与目录的定位方式

在 Linux 中,绝对路径和相对路径是两种不同的文件或目录定位方式,它们的核心区别在于参照点不同。以下是详细解释和对比:

1、绝对路径(Absolute Path)

  • 定义:从文件系统的根目录(/)开始的完整路径,唯一指向目标文件或目录。

  • 特点

    • / 开头(例如 /home/user/file.txt)。
    • 无论当前工作目录在哪里,绝对路径始终指向同一目标。
  • 用途

    • 脚本或配置文件中需要明确指定文件位置时(如服务配置文件路径)
    • 跨目录操作时避免歧义。
  • 示例:

    cat /etc/passwd       # 直接访问根目录下的文件
    ls /usr/local/bin     # 列出绝对路径指向的目录内容
    

2、相对路径(Relative Path)

  • 定义:以当前工作目录(pwd)为参照点的路径,无需从根目录开始。

  • 特点

    • 不以 / 开头(例如 docs/report.txt)。
    • 路径的实际含义依赖当前所在目录。
  • 特殊符号
    . 表示当前目录(例如 ./script.sh)。
    .. 表示父目录(例如 ../project/file.c)。

  • 用途

    • 快速访问当前目录附近的文件。
    • 简化命令行操作(减少长路径输入)。

2、查看目录或文件的详细信息(ls)

2.1 基本语法

语法:ls [选项] [文件/目录]
ls 是 Linux 中最常用的命令之一,用于列出目录中的文件和子目录

注意:

  • 如果不指定目录,默认列出当前目录的内容。

  • 可以指定文件或目录名,查看特定路径下的内容。

常用选项

选项说明
-a显示所有文件(包括隐藏文件,以 . 开头的文件)
-l以长格式显示详细信息(权限、所有者、大小、修改时间等)
-h与 -l 一起使用,以人类可读的格式显示文件大小(如 KB、MB)
-t按修改时间排序(最新修改的在前)
-r反向排序
-S按文件大小排序(大的在前)
-R递归列出子目录内容
-i显示文件的 inode 编号
--color彩色输出(默认启用,目录、文件等类型显示不同颜色)

2.2 常用操作


1、列出当前目录内容

ls


2、显示所有文件(包括隐藏文件)

ls -a


3、以长格式显示详细信息

ls -l

输出示例:

-rw-r--r-- 1 user group  1024 Jan 10 10:00 file.txt   # 文件
drwxr-xr-x 2 user group  4096 Jan 11 11:00 dir   # 目录

信息说明:

  • 第一列:文件类型和权限(- 表示文件,d 表示目录)。

  • 第二列:硬链接数。

  • 第三列:所有者。

  • 第四列:所属组。

  • 第五列:文件大小(默认字节)。

  • 第六列:最后修改时间。

  • 第七列:文件名。

4、组合选项(如 -lh 显示易读的文件大小)

ls -lh

输出大小会显示为 1.0K、2.5M 等格式。

5、按时间排序(最新修改的在前)

ls -lt


6、递归列出子目录内容

ls -R


7、显示文件的 inode 编号

ls -i


8、列出指定目录的内容

ls /path/to/directory


9、反向排序

ls -lr


10、按文件大小排序(大的在前)

ls -lS

2.3 高级用法


1、过滤显示特定文件(结合通配符)

ls *.txt       # 列出所有 .txt 文件
ls file[1-3].* # 列出 file1.txt, file2.log 等


2、忽略某些文件(需搭配 --ignore)

ls --ignore='*.log'  # 不显示 .log 文件


3、自定义时间显示格式(需搭配 --time-style)

ls -l --time-style="+%Y-%m-%d %H:%M:%S"


注意事项:

  1. 如果文件名包含空格或特殊字符,需要用引号包裹:

    ls "my file.txt"
    
  2. 默认情况下,ls 输出的颜色可能因系统配置而异。如果颜色不显示,可以强制启用:

    ls --color=auto
    

通过灵活组合选项,ls 可以满足大部分文件列表需求。如需更多帮助,可以通过 man ls 查看完整手册。

3、切换目录(cd)

语法:cd [选项] [目录路径]
在Linux中,cd(Change Directory)命令用于切换当前工作目录。它是日常操作中最基础且频繁使用的命令之一。

3.1 常用操作


1、切换到指定目录

  • 使用绝对路径进行切换:

    cd /usr/local  # 进入/usr/local目录
    
  • 使用相对路径进行切换,假设当前目录是/home/user:

    cd Downloads      # 进入/home/user/Downloads
    cd ./Documents    # ./表示当前目录(可省略)
    

2、返回家目录

cd          # 直接输入cd,不加参数,默认切换为家目录
cd ~        # ~代表用户的家目录
cd $HOME    # 使用环境变量$HOME


3、返回上一级目录

cd ..       # 两个点表示上一级目录


4、返回上两级目录

cd ../..    # 每多一个..就再往上一级


5、切换到上一个工作目录

cd -        # 在最近使用的两个目录之间快速切换


6、切换到带有空格或特殊字符的目录

  • 用引号包裹路径或使用转义符:

    cd "My Documents"   # 路径包含空格
    cd My\ Documents    # 使用反斜杠转义空格
    

7、常见问题解决

  1. 目录不存在时
    如果路径错误或目录不存在,会提示:

    bash: cd: no such file or directory 	# 检查路径拼写或先用ls确认目录是否存在。
    
  2. 权限不足
    若目录无执行权限(x),会提示:

    bash: cd: permission denied   # 用ls -l查看权限,并通过chmod或sudo解决。
    

3.2 扩展:显示当前工作目录(pwd)


假如当前工作目录为: /path/data

pwd    # 输入命令后显示: /path/data

4、查看、合并文件(cat)

cat 是 Linux 中一个常用的命令,用于查看、合并或创建文件。它的名称来源于 concatenate(连接),但它的功能不仅限于文件连接。

1、常用方法使用示例:

  1. 查看文件内容

    cat filename
    
    • 这会显示 filename文件 的全部内容到终端。
    • 示例:
      cat /etc/os-release  # 查看系统信息文件
      
  2. 查看多个文件

    cat file1 file2
    
    • 依次显示 file1file2 的内容。
    • 示例:
      cat notes.txt backup.txt
      
  3. 合并文件内容并输出到新文件

    cat file1 file2 > merged_file
    
    • file1file2 的内容合并后写入 merged_file(会覆盖目标文件)。
    • 示例:
      cat part1.txt part2.txt > complete.txt
      
  4. 追加内容到文件

    cat file1 >> file2
    
    • file1 的内容追加到 file2 的末尾(不会覆盖 file2)。
    • 示例:
      cat log.txt >> archive.log
      
  5. 创建新文件(或编辑小文件)

    cat > newfile.txt
    
    • 从键盘输入内容,按 Ctrl+d 保存到 newfile.txt(会覆盖已有文件)。

    • 示例:

      cat > greeting.txt
      Hello World!  # 输入内容
      Ctrl+d        # 保存并退出
      
  6. 显示行号

    cat -n filename
    
    • 显示文件内容并加上行号(包括空行)。
    • 示例:
      cat -n /etc/hosts
      
  7. 显示非空行的行号

    cat -b filename
    
    • 只对非空行编号(类似 -n,但忽略空行)。
    • 示例:
      cat -b script.sh
      
  8. 显示特殊字符(如制表符、换行符等)

    cat -A filename
    
    • ^I 表示制表符(Tab),$ 表示行尾。
    • 示例:
      cat -A /etc/profile
      
  9. 避免输出中的多行空行

    cat -s filename
    
    • 将连续的空行压缩为一行。
    • 示例:
      cat -s logfile.txt
      
  10. 与其他命令结合使用

    • 通过管道(|)cat 输出传递给其他命令:
      cat file.txt | grep "keyword"  # 搜索文件中的关键词
      cat file.txt | less           # 分页查看内容
      

2、注意事项

  1. 大文件警告: cat 会一次性输出整个文件,如果文件很大(如日志文件),建议用 lessmore 分页查看:

    less hugefile.log
    
  2. 文件覆盖风险: > 会覆盖目标文件,使用前请确认。

总结:
cat 的核心功能是快速查看、合并或创建小文件。对于复杂操作(如编辑、分页),建议结合其他工具(如 less、vim 或 grep)。

5、复制文件或目录(cp)


1、基础语法

cp 是 Linux 中用于复制文件或目录的基本命令,语法如下:

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


2、基本用法

  • 复制文件到目标文件(重命名):

    cp file1.txt file2.txt  # 将 file1.txt 复制为 file2.txt
    
  • 复制文件到目录:

    cp file1.txt /path/to/directory/  # 将 file1.txt 复制到指定目录
    
  • 复制多个文件到目录:

    cp file1.txt file2.txt /path/to/directory/  # 复制多个文件到目录
    

2、常用选项

选项说明
-r 或 -R递归复制目录(用于复制文件夹)
-i覆盖前提示确认(交互模式)
-f强制覆盖,不提示(慎用)
-v显示复制过程的详细信息
-u仅当源文件比目标文件新时复制(更新)
-p保留原文件的属性(权限、时间戳等)
-a归档模式(相当于 -rp,保留所有属性)


3、常用方法使用示例

  • 递归复制目录:

    cp -r dir1/ dir2/  # 将 dir1 目录及其内容复制到 dir2
    
  • 交互式复制(覆盖前询问):

    cp -i file1.txt /path/to/directory/
    
  • 保留文件属性:

    cp -p file1.txt /backup/  # 保留权限、时间戳等
    
  • 仅更新新文件:

    cp -u *.txt /backup/  # 仅将目标目录中没有的文件复制进去
    

4、注意事项

  • 如果目标文件已存在,cp 会默认覆盖(除非使用 -i 选项)。

  • 复制目录时必须加 -r-a

  • 使用 -a 可以完整保留文件属性(适合备份)。

5、高级用法

  • 通配符复制:

    cp *.jpg /path/to/images/  # 复制所有 .jpg 文件
    
  • 复制到当前目录:

    cp /path/to/file1.txt .  # 目标 `.` 表示当前目录
    

示例完整命令:

cp -av source_dir/ backup_dir/  # 递归复制并保留所有属性,显示详细信息

通过灵活组合选项,可以满足不同场景的复制需求。

6、移动或重命名文件/目录(mv)


1、基本语法

mv 命令是 Linux 中用于移动或重命名文件/目录的基本命令,其名称来源于 “move”。语法如下:

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

常用选项:

选项作用
-i覆盖前提示确认
-n禁止覆盖已存在文件
-f强制覆盖,不提示
-v显示操作详情
-u仅在源文件比目标新时移动


2、常用方法使用实例

  1. 移动文件/目录

    mv file.txt /path/to/destination/  # 将文件移动到目标目录
    mv dir1 /path/to/destination/     # 将目录移动到目标目录
    
  2. 重命名文件/目录

    mv oldname.txt newname.txt       # 重命名文件
    mv olddir newdir                 # 重命名目录
    
  3. 移动多个文件到目录

    mv file1.txt file2.txt /target/dir/  # 移动多个文件到目标目录
    
  4. 覆盖文件时的提示

    • 默认情况下,mv 会直接覆盖已存在的目标文件。

    • 使用 -i(交互模式)会在覆盖前提示确认:

      mv -i file.txt existing_file.txt
      
  5. 禁止覆盖(安全模式)

    mv -n file.txt existing_file.txt  # 如果目标存在,则不移动
    
  6. 强制覆盖(忽略提示)

    mv -f file.txt /target/  # 强制覆盖,不询问
    
  7. 显示详细操作(调试)

    mv -v file.txt /target/  # 显示移动的详细信息
    

3、注意事项

  1. 权限问题:需要有对源文件的读取权限和目标目录的写入权限。

  2. 跨设备移动:如果目标在另一设备(如U盘),mv 实际是复制+删除,速度较慢。

  3. 符号链接:移动符号链接时,默认移动链接本身(而非指向的文件)。

通过灵活组合选项和参数,mv 可以高效管理文件位置和名称。使用前建议用 ls 确认路径,避免误操作。

7、创建文件或目录

7.1 创建文件(touch)


1、基本语法

在 Linux 中,touch 命令主要用于创建空文件或更新文件的时间戳(访问时间和修改时间)。语法格式如下:

touch [选项] 文件名...

常用选项:

选项说明
-a仅更新访问时间(atime)
-m仅更新修改时间(mtime)
-c不创建新文件(若文件不存在)
-t指定时间戳(格式:[[CC]YY]MMDDhhmm[.ss])
-r使用参考文件的时间戳
-d使用字符串描述时间(如 touch -d “2024-01-01” file.txt)


2、常用方法使用示例

  1. 创建一个空文件

    touch file.txt
    

    如果 file.txt 不存在,则会创建一个空文件;如果已存在,则会更新其时间戳(默认为当前时间)。

  2. 同时创建多个文件

    touch file1.txt file2.txt file3.txt
    
  3. 强制不创建新文件(仅更新时间戳)

    touch -c non_existent_file.txt
    

    如果文件不存在,-c(或 --no-create)选项会避免创建新文件。

  4. 指定时间戳(而非当前时间)

    touch -t 202401011200 file.txt
    

    -t 后接时间格式:[[CC]YY]MMDDhhmm[.ss](例如:202401011200 表示 2024 年 1 月 1 日 12:00:00)。

  5. 使用参考文件的时间戳

    touch -r reference_file.txt target_file.txt
    

    -r(或 --reference)将 target_file.txt 的时间戳设置为与 reference_file.txt 相同。

  6. 仅更新访问时间(atime)或修改时间(mtime)

    touch -a file.txt      # 只更新访问时间
    touch -m file.txt      # 只更新修改时间
    

3、注意事项

  • 如果文件名包含空格或特殊字符,需用引号包裹:

    touch "my file.txt"
    
  • 需要权限:对目标目录有写入权限才能创建文件。

通过灵活组合选项,touch 可以高效管理文件的时间戳或快速创建空文件。

7.2 创建目录(mkdir)


1、基本语法

mkdir 是 Linux 中用于创建目录(文件夹)的命令,语法格式如下:

mkdir [选项] 目录名

常用选项:

选项作用
-p递归创建多级目录
-m设置权限(如 755、644)
-v显示操作详情

2、常用方法使用示例

  1. 创建单个目录

    mkdir dir1
    

    会在当前目录下创建名为 dir1 的文件夹。

  2. 同时创建多个目录

    mkdir dir1 dir2 dir3
    

    一次性创建多个同级目录。

  3. 创建嵌套目录(递归创建)

    mkdir -p parent/child/grandchild
    

    -p 选项会自动创建路径中所有不存在的父目录。

  4. 设置目录权限(创建时指定权限)

    mkdir -m 755 mydir
    

    -m 选项直接设置目录权限(此处 755 表示所有者可读/写/执行,其他用户可读/执行)。

  5. 显示创建过程(verbose 模式)

    mkdir -v dir1 dir2
    

    -v 选项会输出每个目录的创建信息。

3、常见问题解决

  • 目录已存在时报错:
    使用 -p 选项可忽略此错误(不会覆盖原有目录)。

  • 权限不足:
    确保对目标路径有写入权限,或用 sudo 提权:

    sudo mkdir /protected_path/newdir
    

8、删除文件或目录

8.1 rm 命令的使用

rm 是 Linux 中用于删除文件或目录的命令,使用时需谨慎,因为删除后通常无法恢复。


1、基本语法

rm [选项] 文件或目录名

常用选项:

选项作用
-f强制删除(忽略不存在的文件,不提示确认)
-i删除前逐一询问确认(交互式)
-r 或 -R递归删除目录及其内容(用于删除目录)
-v显示删除的详细过程
--help查看帮助信息
--version显示版本信息


2、常用方法使用示例

  1. 删除单个文件

    rm file.txt
    
  2. 强制删除文件(无警告)

    rm -f file.txt
    
  3. 交互式删除(逐个确认)

    rm -i file1.txt file2.txt
    
  4. 删除目录(递归删除)

    rm -r mydir/
    
  5. 强制递归删除目录(慎用!)

    rm -rf mydir/
    
  6. *删除多个文件(通配符

    rm *.log   # 删除所有 .log 文件
    
  7. 显示删除过程(verbose)

    rm -v old_*
    

3、危险操作警告

  • rm -rf /rm -rf /*
    这会强制删除根目录下的所有文件(系统毁灭性操作!),现代系统通常会有保护机制,但仍需绝对避免。

  • 无备份删除重要数据
    建议先使用 mv 命令将文件移到临时目录,确认无影响后再彻底删除。

4、注意事项

  1. 权限问题: 删除文件需对所在目录有写权限。

  2. 隐藏文件: 通配符 * 不匹配以 . 开头的隐藏文件,需显式指定(如 rm -r .* 需谨慎)。

建议在使用 rm -r 前先用 ls 确认目标文件/目录,避免误删。

8.2 rmdir 命令的使用

rmdir 是 Linux 中用于删除空目录的命令

1、基本语法

rmdir [选项] 目录名

常用选项:

选项描述
-p递归删除父目录(如果它们为空)。
--ignore-fail-on-non-empty忽略因目录非空导致的错误(不报错,但仍不会删除)。
-v显示操作详情(verbose 模式)。


2、常用方法使用示例:

  1. 删除单个空目录

    rmdir mydir
    

    仅当 mydir 为空时才会删除。

  2. 递归删除空目录
    若目录结构为 parent/child,且两者均为空:

    rmdir -p parent/child
    

    会先删除 child,再删除 parent(如果父目录也变为空)。

  3. 忽略非空目录的错误

    rmdir --ignore-fail-on-non-empty mydir
    

    如果 mydir 非空,命令会静默退出,不会报错。

  4. 显示操作详情

    rmdir -v mydir
    

    输出:rmdir: removing directory 'mydir'

3、注意事项

  1. 仅能删除空目录
    如果目录中有文件或其他子目录,rmdir 会报错:

    rmdir: failed to remove 'mydir': Directory not empty
    

    此时需用 rm -r 目录名 强制递归删除(谨慎使用!)。

  2. 路径中的父目录必须存在
    例如 rmdir a/b/c 要求 a/b 存在,否则会报错。

  3. rm -r 的区别

    • rmdir:安全,只删空目录。

    • rm -r:危险,递归删除目录及所有内容(无确认提示!)。

4、适用场景

  • 在脚本中安全删除空目录(避免误删数据)。

  • 清理空的日志或临时目录结构。

如果需要删除非空目录,请改用:

rm -r 目录名  # 谨慎操作!数据不可恢复!

9、检测文件类型(file)

file命令是 Linux 中用于检测文件类型的实用工具,它会根据文件内容(而非文件扩展名)判断文件类型。

1、基本语法

file [选项] 文件名

常用选项:

选项作用
-b简洁输出(不显示文件名)
-i输出 MIME 类型
-L跟随软链接
-f <文件>从文件中读取待检测的文件名列表
-k不停止在第一个匹配结果(继续检测更多可能类型)
-z尝试检测压缩文件内部内容


2、常用方法使用示例

  1. 检测单个文件类型

    file /bin/ls
    

    输出示例:

    /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped
    
  2. 检测多个文件类型

    file file1.txt file2.jpg
    
  3. 检测目录下所有文件类型

    file *
    
  4. 显示更详细的输出(-i 选项)

    输出文件的 MIME 类型:

    file -i filename
    

    示例输出:

    filename: text/plain; charset=utf-8
    
  5. 不压缩软链接(-L 选项)
    直接检测链接指向的文件类型:

    file -L /path/to/symlink
    
  6. 从标准输入读取文件(-f 选项)
    通过列表文件批量检测:

    file -f file_list.txt  # file_list.txt文件中存放着要检测的文件名,一行一个文件名
    

3、高级用法

  • 检测压缩文件内容:

    file -z backup.tar.gz
    
  • 仅输出匹配的文本描述(结合 grep):

    file * | grep "text"
    

4、原理说明

file 命令通过以下步骤判断文件类型:

  1. 检查文件的 magic number(如 ELF 头PNG 头等)。

  2. 若无特殊标识,则分析文件内容(如文本编码、可读字符比例等)。

  3. 结合 /usr/share/misc/magic/etc/magic 中的规则库进行匹配。

通过灵活使用 file 命令,你可以快速识别未知文件的类型,尤其在处理无扩展名文件时非常有用。

相关文章:

Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)

文章目录 前言1、Linux文件系统1.1 核心特点1.2 重要目录结构1.3 文件类型1.4 文件和目录的命名规则1.5 文件与目录的定位方式 2、查看目录或文件的详细信息&#xff08;ls&#xff09;2.1 基本语法2.2 常用操作2.3 高级用法 3、切换目录&#xff08;cd&#xff09;3.1 常用操作…...

中国黄土高原中部XF剖面磁化率和粒度数据

时间分辨率&#xff1a;1000年 < x空间分辨率为&#xff1a;空共享方式&#xff1a;申请获取数据大小&#xff1b;35.75 KB数据时间范围&#xff1a;743-0 ka元数据更新时间&#xff1a;2023-08-15 数据集摘要 该数据集包括中国黄土高原中部XF剖面磁化率和粒度数据。将所有…...

tabs切换#

1、html <el-tabs v-model"tabValue" tab-change"handleTabClick"><el-tab-pane label"集群" name"1"></el-tab-pane><el-tab-pane label"节点" name"2"></el-tab-pane></el-ta…...

免费Office图片音频高效提取利器

软件介绍 今天要给大家介绍一款非常好用的Office文档图片及音频提取工具&#xff0c;它不仅好用&#xff0c;而且完全免费&#xff0c;没有任何广告。 软件概况 这款名为Office File Picture Extractor&#xff08;PPT图片提取&#xff09;的软件&#xff0c;大小仅有4MB。打…...

迁移 Visual Studio Code 设置和扩展到 VSCodium

本文同步发布在个人博客 迁移 Visual Studio Code 设置和扩展到 VSCodium - 萑澈的寒舍https://hs.cnies.org/archives/vscodium-migrateVisual Studio Code&#xff08;以下简称 VS Code&#xff09;无疑是当下最常用的代码编辑器。尽管微软的 VS Code 源代码采用 MIT 协议开…...

1.7 方向导数

&#xff08;底层逻辑演进脉络&#xff09;从"单车道"到"全路网"的导数进化史&#xff1a; 一、偏导数奠基&#xff08;1.6核心&#xff09; 诞生背景&#xff1a;多元函数分析需求 当变量间存在耦合关系时&#xff08;如房价面积单价装修成本&#xff09…...

深入理解目标检测中的关键指标及其计算方法

深入理解目标检测中的关键指标及其计算方法 在目标检测领域&#xff0c;评估模型性能时&#xff0c;我们通常会关注几个关键指标&#xff0c;这些指标帮助我们量化模型的准确性和有效性。本文将详细介绍这些常见指标及其计算方法&#xff0c;帮助你更好地理解和评估目标检测模…...

Ollama+OpenWebUI+docker完整版部署,附带软件下载链接,配置+中文汉化+docker源,适合内网部署,可以局域网使用

前言&#xff1a; 因为想到有些环境可能没法使用外网的大模型&#xff0c;所以可能需要内网部署&#xff0c;看了一下ollama适合小型的部署&#xff0c;所以就尝试了一下&#xff0c;觉得docker稍微简单一点&#xff0c;就做这个教程的&#xff0c;本文中重要的内容都会给下载…...

【Redis实战篇】分布式锁-Redisson

1. 分布式锁-redisson功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a; 重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;他的方法都…...

构造二叉树

一、由中序和后序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …...

vue3: pdf.js 3.4.120 using javascript

npm install pdfjs-dist3.4.120 项目结构&#xff1a; pdfjsViewer.vue <template><div><div v-if"loading" class"flex justify-center items-center py-8"><div class"animate-spin rounded-full h-12 w-12 border-b-2 borde…...

编译原理AST以Babel为例进行解读、Webpack中自定义loader与plugin

AST树详解 编译原理 主要研究如何将高级编程语言的源代码转换为机器能理解的目标代码&#xff08;通常是二进制代码或中间代码&#xff09;。编译器的底层实现通常包含多个阶段&#xff0c;包括词法分析、语法分析、语义分析和代码生成。 一、AST的核心概念与作用 AST&#…...

牛客周赛 Round 92

目录 A-小红的签到题 代码 B-小红的模拟 代码 C-小红的方神题 代码 D-小红的数学题 代码 无注释版 有注释版 E-小红的ds题 代码 无注释版 有注释版 A-小红的签到题 代码 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;cha…...

面试题:C++虚函数可以是内联函数吗?

目录 1.引言 2.示例 3.总结 1.引言 为什么C的虚函数和内联函数这两个看似矛盾的特性能否共存&#xff1f;这个问题实际上触及了C编译期优化与运行时多态性之间的微妙平衡。我发现这个问题不仅是面试中的常见陷阱&#xff0c;更是理解C深层机制很好的一个点。 虚函数可以被声…...

蚁群算法赋能生鲜配送:MATLAB 实现多约束路径优化

在生鲜农产品配送中&#xff0c;如何平衡运输效率与成本控制始终是行业难题。本文聚焦多目标路径优化&#xff0c;通过 MATLAB 实现蚁群算法&#xff0c;解决包含载重限制、时间窗约束、冷藏货损成本的复杂配送问题。代码完整复现了从数据生成到路径优化的全流程&#xff0c;助…...

前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》

手把手教你用 Kubernetes 部署高可用 WordPress 博客 本实验通过 Kubernetes 容器编排平台&#xff0c;完整部署了一个高可用的 WordPress 网站架构&#xff0c;包含 MariaDB 数据库、WordPress 应用和 Nginx 反向代理三大核心组件。实验涵盖了从基础环境准备到最终服务暴露的…...

文件上传总结

攻击与绕过方式 一、条件竞争 攻击原理&#xff1a;在上传文件的同时利用代码逻辑中的时序问题&#xff08;如 unlink() 删除操作&#xff09;触发条件竞争&#xff0c;从而实现上传恶意文件并绕过限制。 示例测试源码&#xff1a; 以下为测试文件上传功能的 PHP 源码&#xff…...

在文档里如何引用在线SVG甘特图

在文档里如何引用在线SVG甘特图 介绍 本文将详细介绍如何快速创建一个功能强大的在线甘特图&#xff0c;并将其嵌入到其他文档&#xff08;如 Notion、Wiki、Qiita、GitHub、Obsidian、Email 等&#xff09;中。只要目标工具支持引用网络图片&#xff0c;你就可以轻松实现这一…...

Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验

Spring AI 与 Groq 的深度集成&#xff1a;解锁高效 AI 推理新体验 前言 在人工智能飞速发展的当下&#xff0c;AI 推理的效率和性能成为开发者关注的焦点。Groq 作为一款基于 LPU™ 的超快速 AI 推理引擎&#xff0c;凭借其强大的性能&#xff0c;能够支持各类 AI 模型&…...

101alpha---第10

rank(((0 < ts_arg_min(ts_delta(close, 1), 4)) ? ts_delta(close, 1) : ((ts_arg_max(ts_delta(close, 1), 4) < 0) ? ts_delta(close, 1) : (-1 * ts_delta(close, 1))))) alpha 那么我们来看具体含义 吧 rank(((0 < ts_arg_min(ts_delta(close, 1), 4)) ? …...

vim中的查找

在 Vim 中&#xff0c;使用 n 键可以按正向&#xff08;向下&#xff09;继续查找下一个匹配项。若要反向&#xff08;向上&#xff09;查找&#xff0c;可以使用以下方法&#xff1a; 1. 使用 N 键反向查找 在查找命令&#xff08;如 /keyword&#xff09;后&#xff0c;按下…...

什么是IP专线?企业数字化转型的关键网络基础设施

为什么企业需要IP专线&#xff1f; 在当今数字化浪潮席卷全球的背景下&#xff0c;企业网络需求正经历着前所未有的变革。传统网络架构已难以满足现代企业对高效、安全、灵活网络服务的需求&#xff0c;IP专线正是在这一背景下应运而生的关键网络解决方案。 专线服务本质上是…...

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

目录 Linux软件包管理器 - yum Linux下载软件的方式 认识yum 查找软件包 安装软件包 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 Linux编译器 - gcc/g …...

5.11 - 5.12 JDBC+Mybatis+StringBoot项目配置文件

JDBC&#xff1a; 预编译SQL优点&#xff1a;安全&#xff0c;性能更高。 在cmd里面输入java-jar就可以运行jar包。 Mybatis&#xff1a; 持久层框架。用于简化JDBC的开发。 数据库连接池里面放置的是一个一个Connection连接对象。&#xff08;连接池中的连接可以复用&#…...

判断一个数组有没有重复值

要判断一个数组是否包含重复值&#xff0c;你可以使用多种方法。以下是一些常用的方法&#xff1a; 方法 1&#xff1a;使用 Set Set 是一种集合数据结构&#xff0c;它只存储唯一的值。因此&#xff0c;你可以将数组转换为 Set&#xff0c;然后比较 Set 的大小与数组的长度。…...

51c大模型~合集127

我自己的原文哦~ https://blog.51cto.com/whaosoft/13905076 #Executor-Workers架构 图解Vllm V1系列2 本文详细介绍了vllm v1的Executor-Workers架构&#xff0c;包括Executor的四种类型&#xff08;mp、ray、uni、external_launcher&#xff09;及其适用场景&#xff…...

Spring急速入门

Spring 是 企业级开发的一站式框架&#xff0c;核心是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09; 一、Spring 核心&#xff1a;IOC 理论 1. 什么是 IOC&#xff1f; IOC&#xff08;Inversion of Control&#xff0c;控制反转&…...

#在 CentOS 7 中手动编译安装软件操作及原理

在 CentOS 7 中&#xff0c;手动编译安装软件&#xff08;即从源代码编译安装&#xff09;是一种高度灵活的方式&#xff0c;适用于需要定制化软件功能、优化性能或安装官方仓库未提供的软件版本的场景。以下是针对手动编译安装的详细说明&#xff0c;包括原理、步骤、注意事项…...

【Kubernetes】初识基础理论(第一篇)

前言 单机容器编排&#xff1a; docker-compose 容器集群编排&#xff1a; docker swarm、mesosmarathon、kubernetes 应用编排&#xff1a; ansible 一、Kubernetes概述 Kubernetes 是一个可移植的、可扩展的开源平台&#xff0c;用于管理容器化的…...

配置集群(yarn)

在配置 YARN 集群前&#xff0c;要先完成以下准备工作&#xff1a; 集群环境规划&#xff1a;明确各节点的角色&#xff0c;如 ResourceManager、NodeManager 等。网络环境搭建&#xff1a;保证各个节点之间能够通过网络互通。时间同步设置&#xff1a;安装 NTP 服务&#xff0…...

按钮导航组件 | 纯血鸿蒙组件库AUI

摘要&#xff1a; 按钮导航组件(A_ButtonNav)&#xff1a;可设置导航数据(含文本及路由)&#xff0c;可设置按钮颜色、导航标题及导航子标题。 一、组件调用方式 1.1.极简调用&#xff1a; 用 A_ButtonNav 调用“按钮导航组件”&#xff0c;只需要给属性 data &#xff08;导…...

自适应主从复制模拟器的构建与研究

自适应主从复制模拟器的构建与研究 摘要: 本文旨在构建一个自适应主从复制模拟器,深入研究主从复制原理及优化方法。从研究者视角出发,详细阐述模拟器的设计、实现与实验过程,通过表格、图表及代码等辅助手段,逐步探讨如何在不同网络条件和负载下,自动调整主从复制参数和…...

015枚举之滑动窗口——算法备赛

滑动窗口 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 原题链接 思路分析 见代码注解 代码 int maxSubArray(vector<int>& num…...

【Dv3Admin】工具视图配置文件解析

在开发后台管理系统时,处理复杂的 CRUD 操作是常见的需求。Django Rest Framework(DRF)通过 ModelViewSet 提供了基础的增删改查功能,但在实际应用中,往往需要扩展更多的功能,如批量操作、权限控制、查询优化等。dvadmin/utils/viewset.py 模块通过继承并扩展 ModelViewS…...

在MyBatis Plus里处理LocalDateTime类型

在MyBatis Plus里处理LocalDateTime类型 在MyBatis Plus里处理LocalDateTime类型时&#xff0c;你要确保数据库字段和Java实体类属性之间的类型映射是正确的。下面为你介绍处理这种情况的方法&#xff1a; 1. 数据库字段类型对应设置 要保证数据库字段类型和LocalDateTime相…...

编程技能:字符串函数03,strncpy

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数02&#xff0c;strcpy 回到目录…...

edge设置位IE模式打开网页

打开Edge浏览器->在浏览器工具栏右键->自定义工具栏->外观->选择要在工具栏上显示的按钮->找到“Internet Explorer 模式”按钮->开启,将其添加到工具栏中...

代码随想录训练营第二十二天| 101.对称二叉树 100.相同的树

101.对称二叉树&#xff1a; 文档讲解&#xff1a;代码随想录|101.对称二叉树 视频讲解&#xff1a;新学期要从学习二叉树开始&#xff01; | LeetCode&#xff1a;101. 对称二叉树_哔哩哔哩_bilibili 状态&#xff1a;已做出 思路&#xff1a; 这道题目我初始做的时候想着使用…...

nvm管理node版本

To manage Node.js versions on Windows, I recommend using nvm-windows (Node Version Manager for Windows). Here’s how we can handle this: First, let’s install nvm-windows. I’ll propose a command to check if it’s already installed: nvm versionGreat! I s…...

智能手表测试计划文档(软/硬件)

&#x1f4c4; 智能手表测试计划文档&#xff08;软/硬件&#xff09; 项目名称&#xff1a;Aurora Watch S1 文档编号&#xff1a;AW-S1-QA-TP-001 编制日期&#xff1a;2025-xx-xx 版本&#xff1a;V1.0 编写人&#xff1a;xxx&#xff08;测试主管&#xff09; 一、测试目标…...

基于大模型的原发性醛固酮增多症全流程预测与诊疗方案研究

目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与方法 二、原发性醛固酮增多症概述 2.1 疾病定义与发病机制 2.2 临床表现与诊断标准 2.3 流行病学特征 三、大模型预测原理与技术 3.1 大模型简介 3.2 预测原理与算法 3.3 数据收集与预处理 四…...

spring中的@Lazy注解详解

一、核心功能与作用 Lazy 注解是 Spring 框架中用于延迟 Bean 初始化的核心工具&#xff0c;通过将 Bean 的创建推迟到首次使用时&#xff0c;优化资源利用和启动性能。其核心功能包括&#xff1a; 延迟初始化 默认情况下&#xff0c;Spring 在容器启动时立即初始化所有单例 …...

Docker快速入门与应用

1. 什么是 Docker&#xff1f; Docker 就像一个“魔法箱子”&#xff0c;可以把你开发的应用&#xff08;代码、环境、配置&#xff09;‌打包成一个标准化的容器‌&#xff0c;这个容器可以在任何支持 Docker 的系统上运行&#xff0c;无需担心环境差异导致的问题。 ‌类比‌…...

判断一个数是不是素数的最高效的算法

判断一个数是否是素数&#xff0c;有从简单到复杂多种方法。最高效的算法取决于输入规模&#xff08;是几个亿以内的数&#xff0c;还是上百位的大整数&#xff09;&#xff0c;我会按实用场景分类讲解&#xff1a; ✅ 常规范围内&#xff08;比如 ≤ 1e12&#xff09;判断素数…...

《Head First 设计模式》第一章 - 笔记

本书是本人写的设计模式的笔记&#xff0c;写下核心要点&#xff0c;如果你掌握过设计模式&#xff0c;想快速阅读本书内容&#xff0c;这个笔记适合你阅读。如果你是新手&#xff0c;有 java 基础和 oo 设计原则基础&#xff0c;你适合跟我一样从零阅读本书。 第一章 策略模式…...

GPT系列:自然语言处理的演进与多模态的探索

GPT系列&#xff1a;自然语言处理的演进与多模态的探索 GPT系列的发展一、GPT-1 &#xff1a;通过生成式的预训练改进自然语言GPT-1的动机做一个预训练模型的难点GPT-1的微调模式GPT-1的训练数据Bert 二、GPT-2语言模型是非监督的GPT-2的动机引入promptGPT-2模型架构的改变GPT-…...

Linux驱动:驱动编译流程了解

要求 1、开发板中的linux的zImage必须是自己编译的 2、内核源码树,其实就是一个经过了配置编译之后的内核源码。 3、nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。 内核源码树 解压 tar -jxvf x210kernel.tar.bz2 编译 make x210ii_qt_defconfigmakeCan’t use ‘…...

【MySQL】数据库基础

目录 1.什么是数据库2.见一见数据库3.服务器、表、库之间的关系4.MySQL架构5.sql语句分类6.查看MySQL存储引擎6.1 查看存储引擎6.2 常见存储引擎对比 1.什么是数据库 概念&#xff1a;数据库一般是指&#xff0c;在磁盘或者内存中存储的特定结构组织的数据 – 将来在磁盘上存储…...

1.1 文章简介

前因后果链 行业需求 → 技能断层 → 课程设计响应 (高薪岗位要求数学基础) → (符号/公式理解困难) → (聚焦原理与应用) 行业驱动因素 • 前因&#xff1a;机器学习/AI等领域的高薪岗位激增&#xff0c;但数学能力成为主要门槛 • 关键矛盾&#xff1a;算法论文中的数学…...