【Linux】文件管理常用命令【超详细】

avatar
作者
筋斗云
阅读量:0

文章目录


预防rm事故-血的教训😢

详细内容见:预防rm误删文件的3种方法

1. 使用别名:

  • 创建别名来保护常用的删除命令。例如,可以将rm命令替换为一个交互式命令,提示用户确认删除操作:
alias rm='rm -i' 

这样,每次使用rm命令时,系统都会提示确认。

2. 启用回收站:

  • 可以使用trash-cli工具将删除的文件移动到回收站,而不是直接删除。安装trash-cli后,可以使用trash-put命令代替rm
sudo apt install trash-cli trash-put filename 

3. 只读文件系统:

  • 对于不需要频繁修改的目录或分区,可以将其设置为只读。修改/etc/fstab文件来挂载分区为只读:
/dev/sdX /mount/point ext4 ro,defaults 0 2 

一、文件管理

1.1 touch-文件创建

命令touch filename

tip1touch file.txt命令不会覆盖已存在的file.txt文件。它会更新该文件的最后修改时间。如果文件不存在,则会创建一个新的空文件。

在这里插入图片描述
在这里插入图片描述

1.2 rm-文件删除

命令rm filename

其英文全称为remove

常用参数

  • -i:交互模式,删除前询问。
    英文全称为interactive
  • -f:强制执行操作。这里指强制删除,忽略不存在的文件,不提示确认。
    英文全称为force
  • -r:递归删除目录及其内容。
    英文全称为recursive

容易踩缝纫机的命令rm -rf😋

在这里插入图片描述
在这里插入图片描述

1.3 mkdir-目录创建

命令mkdir Directory_name
在这里插入图片描述
在这里插入图片描述

1.4 rmdir-目录删除

命令rmdir Directory_namerm -r Directory_name

其英文全称为Remove Directory

区别
rmdir只能删除空目录,
rm -r可以删除非空目录(因为-r表示递归地对目录进行操作,其英文为recursive)

在这里插入图片描述

1.5 pwd-显示当前目录

命令pwd

其英文全称为Print Working Directory

在这里插入图片描述

1.6 cd-切换当前目录

命令cd

其英文全称为Change Directory

当前位于root目录,即root用户的家目录~,linux中用/表示根目录,
其中.表示的是当前目录,..表示的上级目录。

下面是进入share目录并返回根目录的事例:

在这里插入图片描述

1.7 ls-列出文件和目录

命令ls

其英文全称为List

常用参数及使用方法如下:

  • -a:显示所有文件和目录,包括隐藏文件(以.开头的文件或目录)。
    英文全称all
  • -l:以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。
    英文全称long
  • -h:与-l结合使用,以人类易读的格式显示文件大小(如KMG等)。
    英文全称human-readable
  • -R递归列出子目录的内容。
    英文全称recursive
  • -t:按文件修改时间排序显示。
    英文全称time

在这里插入图片描述

1.8 cat-显示文件内容

命令cat

其英文全称为Concatenate

cat命令可以查看文件里面的内容,更多的使用命令可以使用--help命令查看:

  • -a,–show-all等价于-vET

  • -b,–number-non空白数非空输出行,覆盖-n

  • -e, 等价于-vE

  • -E,–show-结束显示$在每一行的末尾

  • -n,–number编号所有输出行,即在输出时在前面加上编号
    英文全称:number

  • -s,–crick-空白抑制重复的空输出行

  • -t等价于-vT

  • -t,–show-tabs将制表符显示为^I

  • -v,–show非打印使用^和M-表示法,LFD和TAB除外

1.读取内容:

命令:cat filename

在这里插入图片描述

2.写入内容(默认覆盖):

命令:cat >filename,若文件名不存在,则会自动创建
退出编辑:CTRL+D

在这里插入图片描述

3.显示行数

命令:cat -n filename
在这里插入图片描述

4.将源文件的内容追加到目标文件中

使用:>>重定向运算符

命令:cat source_file >> target_file

在这里插入图片描述

1.9 mv-移动文件或者目录

命令mv

mv命令和rm命令的使用方式很相似,但是mv是用来移动文件或者目录的,同时还可以进行重命名。rm命令则是用来删除文件或者目录的。

常用参数:

  • -i:交互模式,覆盖前询问。

  • -f:强制执行操作。这里指强制覆盖。
    英文全称为force

  • -u:只在源文件比目标文件新时才进行移动,即仅更新较新的文件
    英文全称updata

1.10 vi or vim-文件编辑

命令:vim filename

末行模式

  • :w - write (保存文件)
  • :q - quit (退出 Vim)
  • :q! - quit! (强制退出 Vim,不保存修改)
  • :wq - write quit (保存并退出 Vim)
  • :wq! - write quit (保存并强制退出 Vim)

在这里插入图片描述

命令模式

  • dd - delete (删除当前行)
  • yy - yank (复制当前行)
  • p - paste (粘贴)
  • u - undo (撤销上一步操作)
  • G - goto (跳转到文件末尾)
  • gg - goto (跳转到文件开头)
  • ZZ - 代表“保存并退出”,相当于 :wq
  • w - word (跳转到下一个单词的开头)
  • b - backup (跳转到上一个单词的开头)
  • 0 - beginning (跳转到行的开头)

进入编辑模式

  • i - insert (插入,即在光标前插入文本)
  • a - append (追加,即在光标后插入文本)
  • o - open (在当前行之下新开一行,并进入插入模式)

1.11 cp-复制文件

命令:

  1. 复制文件:cp [选项] 源文件 目标文件or目标目录
  2. 复制目录:cp -r 源目录 目标目录

注意:cp命令复制到目标文件时,默认覆盖 目标文件中的数据

常用选项

  • -r-R:递归复制目录及其内容。
  • -i:在覆盖文件之前提示确认。
  • -v:显示正在复制的文件。
  • -u:只在源文件比目标文件新,或目标文件不存在时复制。
  • -n(no-clobber),cp 命令不会覆盖已存在的目标文件,等于说不执行cp命令(没啥用)
  1. 讲test.txt文件的内容复制到demo.txt中
    在这里插入图片描述

  2. cp命令覆盖目标文件内容
    在这里插入图片描述

1.12 ln-创建链接(重点)

命令: ln

ln 可用于创建硬链接或符号链接(软链接)
ln 命令也可用于在文件系统中创建硬链接或符号链接(软链接)。

以下是详细说明:

硬链接(Hard Link)

硬链接是文件系统中的多个文件名指向同一个物理文件数据块。删除任何一个硬链接,文件数据不会被删除,直到所有指向该数据块的链接都被删除。

注意:硬链接就是给一个数据块起了很多个别名。故修改源文件,硬链接文件内容也会改变

  • 命令格式

    ln 源文件 目标文件 
  • 示例

    在这里插入图片描述

    这将在当前目录中创建一个名为 woidemo.txt 的硬链接,指向 hdemo.txt。两者共享相同的数据块。

符号链接(Symbolic Link)

符号链接是一个指向另一个文件或目录的路径名的文件。删除符号链接不会影响目标文件,但删除目标文件会导致符号链接失效。

注意:修改符号链接文件内容,源文件也会改变

  • 命令格式
    ln -s 源文件 目标文件 

在这里插入图片描述

这将在当前目录中创建一个名为 nm.txt 的符号链接,指向 hdemo.txtnm.txt 只是指向 hdemo.txt 的路径。

常用选项:

  • -s:创建符号链接。
  • -f:强制创建链接,覆盖已有文件。
  • -v:详细模式,显示创建的链接信息。
  • -i:交互模式,文件存在则提示用户是否覆盖。
  • -n:把符号链接视为一般目录。

总结

  • 硬链接:多个文件名指向同一个数据块,所有硬链接文件内容一致。
  • 符号链接:文件名指向另一个文件的路径,删除目标文件后,符号链接失效。

1.13 find-查找

注意
如果不指定 /path/to/directoryfind 命令将默认在当前工作目录及其所有子目录中进行搜索。

当你需要在Linux系统中查找特定的文件或目录时,find 命令是一个非常有用的工具。它能够根据多种条件精确地定位文件,以下是它的一些主要用法:

  1. 按文件名查找

    使用 -name 选项可以根据文件名查找文件。例如,如果你想找到名为 file.txt 的文件,可以执行类似这样的命令:

    find /path/to/directory -name "file.txt" 

    这将在指定目录及其子目录中查找名为 file.txt 的文件。

在这里插入图片描述

  1. 按文件类型查找

    使用 -type 选项可以根据文件类型查找文件。常见的文件类型包括普通文件 (f) 和目录 (d)。例如,要查找所有普通文件,可以执行以下命令:

    find /path/to/directory -type f 

    这将列出指定目录及其子目录中的所有普通文件。

示例:
如果你想查找所有以 .py 结尾的文件,可以使用 find 命令结合 -name 选项来实现。这样可以过滤出所有符合条件的文件路径。

假设你希望在 /home/user 目录及其所有子目录中查找所有以 .py 结尾的文件,可以执行以下命令:

find /home/user -type f -name "*.py" 

在这里插入图片描述

这条命令的含义是:

  • find /home/user:从 /home/user 目录开始搜索。
  • -type f:限定查找对象为普通文件。
  • -name "*.py":指定文件名模式为 *.py,即以 .py 结尾的文件。

输出示例:
如果 /home/user 目录下有文件 script.py 和子目录 code,子目录中有文件 utils.py,那么上述命令的输出可能是:

/home/user/script.py /home/user/code/utils.py 

注意事项:

  • 使用 -name "*.py" 来指定文件名模式时,通配符 * 表示零个或多个字符,而 .py 则确保文件以 .py 结尾。
  • 如果需要进一步操作这些找到的文件,可以结合 -exec 选项执行其他命令,例如复制、移动或删除文件。

通过这种方式,你可以非常方便地查找并操作指定类型的文件,如 Python 脚本文件 .py

  1. 按文件大小查找

    使用 -size 选项可以按照文件的大小查找文件。可以指定大小的单位(如 M 表示兆字节)。例如,要查找大于100MB的文件,可以执行以下命令:

    find /path/to/directory -size +100M 

    这将列出指定目录及其子目录中大于100MB的文件。

  2. 按修改时间查找

    使用 -mtime-atime-ctime 选项可以按照文件的修改时间、访问时间或状态更改时间查找文件。例如,要查找最近7天内修改过的文件,可以执行以下命令:

    find /path/to/directory -mtime -7 

    这将列出指定目录及其子目录中在最近7天内修改过的文件。

在这里插入图片描述

  1. 按文件权限查找

    使用 -perm 选项可以按照文件权限查找文件。例如,要查找权限为755的文件,可以执行以下命令:

    find /path/to/directory -perm 755 

    这将列出指定目录及其子目录中权限为755的文件。

  2. 按用户或组查找

    使用 -user-group 选项可以按照文件的所有者或所属组查找文件。例如,要查找属于用户 username 的文件,可以执行以下命令:

    find /path/to/directory -user username 

    这将列出指定目录及其子目录中属于用户 username 的文件。

  3. 执行操作

    使用 -exec 选项可以对找到的文件执行特定的操作。例如,要删除所有以 .txt 结尾的文件,可以执行以下命令:

    find /path/to/directory -name "*.txt" -exec rm {} \; 

    这将删除找到的所有 .txt 文件。

echo 命令用于在终端中显示一段文字或变量的值。它是一个非常常用的命令行工具,尤其在 shell 脚本中,用于输出文本到标准输出。以下是 echo 命令的详细介绍和一些常见的用法示例:

1.14 sed-文本流编辑

sed 是一个强大的文本流编辑工具,常用于在 Linux 和 Unix 系统中处理和转换文本数据。

它的名字来源于其英文全称 stream editor(流编辑器)。

sed 主要用于从输入流(例如文件或管道)中读取数据,对数据进行编辑处理,然后将结果输出到标准输出或文件中。

注意:在默认情况下,sed 命令不会改变源文件的数据。具体来说,当你在使用 sed 命令时,它会按照指定的编辑命令处理输入的文本,并将结果输出到标准输出(通常是终端)。这意味着 sed 命令会显示处理后的文本内容,但不会修改原始文件。

以下是对 sed 命令中参数和动作的说明:

参数说明:

  • -e <script>--expression=<script>:在命令行中直接指定脚本进行文本处理。例如:

    sed -e 's/old/new/' filename 

    这会将文件 filename 中的 “old” 替换为 “new”。

注意:源文件实际内容未发生改变

在这里插入图片描述

  • -f <script文件>--file=<script文件>:从指定的脚本文件中读取脚本进行文本处理。例如:

    sed -f script.sed filename 

    这会执行 script.sed 中定义的脚本处理文件 filename

  • -n--quiet--silent:仅打印经过脚本处理后的输出结果,不打印未匹配的行。例如:

    sed -n 'p' filename 

    这会只打印匹配的行。

在这里插入图片描述

  • -iin-place 操作

作用:使 sed 命令直接修改指定的源文件,而不是将修改后的结果输出到标准输出设备(通常是终端)。
在这里插入图片描述

动作说明:

  • a:在当前行的下一行添加指定的文本字符串。例如:

    sed '/pattern/a\This is a new line' filename 

    这会在匹配 pattern 的行之后添加 “This is a new line”。

在这里插入图片描述

  • c:用指定的文本字符串替换指定范围内的行。例如:

    sed '1,3c\This is the replacement line' filename 

    这会用 “This is the replacement line” 替换文件 filename 中的第 1 到第 3 行。

  • d:删除指定的行。例如:

    sed '/pattern/d' filename 

    这会删除文件 filename 中所有包含 pattern 的行。

在这里插入图片描述

  • i:在当前行的上一行添加指定的文本字符串。例如:

    sed '/pattern/i\This is a new line' filename 

    这会在匹配 pattern 的行之前添加 “This is a new line”。

在这里插入图片描述

  • p:打印经过选择的行。通常与 -n 参数一起使用,只打印匹配的行。例如:

    sed -n '/pattern/p' filename 

    这会只打印文件 filename 中匹配 pattern 的行。

在这里插入图片描述

  • s:使用正则表达式进行文本替换。例如:

    sed 's/hate/love/' filename 

    这会将文件 filename 中所有 “hate” 替换为 “love”。

注意:源文件实际内容未发生改变

在这里插入图片描述

1.15 echo-输出

基本用法:

echo [选项] [字符串...] 

示例:

  1. 基本输出

    echo "Hello, World!" 

    输出:Hello, World!

  2. 输出变量值

    NAME="Alice" echo "Hello, $NAME!" 

    输出:Hello, Alice!

  3. 输出包含特殊字符的字符串

    echo "Hello, \$NAME!" 

    输出:Hello, $NAME!

  4. 输出多行文本

    echo -e "Line1\nLine2\nLine3" 

    选项 -e 使 echo 解释转义字符(如 \n 表示换行)。输出:

    Line1 Line2 Line3 

常用选项:

  1. -e:启用解释反斜杠转义字符。

    echo -e "Line1\nLine2\nLine3" 
  2. -n:输出文本后不换行。

    echo -n "Hello, World!" 
  3. --help:显示 echo 命令的帮助信息。

    echo --help 

常见的转义字符:

  • \n:换行
  • \t:水平制表符(tab)
  • \\:反斜杠
  • \":双引号
  • \':单引号

示例总结:

echo "Hello, World!"             # 输出:Hello, World! echo -n "Hello, World!"          # 输出:Hello, World!(无换行) echo -e "Line1\nLine2\nLine3"    # 输出多行文本 NAME="Alice" echo "Hello, $NAME!"             # 输出变量值:Hello, Alice! 

echo 命令非常简单但功能强大,适用于各种文本输出场景,无论是直接输出文本,还是在脚本中输出变量值或格式化文本。

1.16 grep-文本搜索

常用参数:

  1. -i:忽略大小写进行搜索。

    • 解释:搜索时忽略大小写,即不区分大写和小写字母。
    • 示例:
      grep -i "pattern" filename 
      这会查找 filename 文件中与 “pattern”(忽略大小写)匹配的所有行。
  2. -v:反转匹配,即显示不匹配的行。

    • 解释:只显示不匹配指定模式的行。
    • 示例:
      grep -v "pattern" filename 
      这会查找 filename 文件中不包含 “pattern” 的所有行。
  3. -n:显示行号。

    • 解释:在输出的每一行前加上行号,表示匹配的行在文件中的位置。
    • 示例:
      grep -n "pattern" filename 
      这会查找 filename 文件中与 “pattern” 匹配的所有行,并在每一行前显示行号。
  4. -c:统计匹配的行数。

    • 解释:只输出匹配行的数量,而不是具体的行内容。
    • 示例:
      grep -c "pattern" filename 
      这会输出 filename 文件中与 “pattern” 匹配的行数。

示例总结:

grep -i "pattern" filename    # 忽略大小写搜索 grep -v "pattern" filename    # 反转匹配,显示不匹配的行 grep -n "pattern" filename    # 显示匹配行的行号 grep -c "pattern" filename    # 统计匹配行的数量 

这些参数使 grep 命令在文本搜索时更加灵活和强大,适用于各种不同的搜索需求。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!