文章目录
预防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
tip1:touch 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_name
或rm -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
结合使用,以人类易读的格式显示文件大小(如K
、M
、G
等)。
英文全称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-复制文件
命令:
- 复制文件:
cp [选项] 源文件 目标文件or目标目录
- 复制目录:
cp -r 源目录 目标目录
注意:cp命令复制到目标文件时,默认覆盖 目标文件中的数据
常用选项:
-r
或-R
:递归复制目录及其内容。-i
:在覆盖文件之前提示确认。-v
:显示正在复制的文件。-u
:只在源文件比目标文件新,或目标文件不存在时复制。-n
(no-clobber),cp
命令不会覆盖已存在的目标文件,等于说不执行cp命令(没啥用)
-
讲test.txt文件的内容复制到demo.txt中
-
cp命令覆盖目标文件内容
1.12 ln-创建链接(重点)
命令: ln
ln
可用于创建硬链接或符号链接(软链接)
ln
命令也可用于在文件系统中创建硬链接或符号链接(软链接)。
以下是详细说明:
硬链接(Hard Link)
硬链接是文件系统中的多个文件名指向同一个物理文件数据块。删除任何一个硬链接,文件数据不会被删除,直到所有指向该数据块的链接都被删除。
注意:硬链接就是给一个数据块起了很多个别名。故修改源文件,硬链接文件内容也会改变
-
命令格式:
ln 源文件 目标文件
-
示例:
这将在当前目录中创建一个名为
woidemo.txt
的硬链接,指向hdemo.txt
。两者共享相同的数据块。
符号链接(Symbolic Link)
符号链接是一个指向另一个文件或目录的路径名的文件。删除符号链接不会影响目标文件,但删除目标文件会导致符号链接失效。
注意:修改符号链接文件内容,源文件也会改变
- 命令格式:
ln -s 源文件 目标文件
这将在当前目录中创建一个名为 nm.txt
的符号链接,指向 hdemo.txt
。nm.txt
只是指向 hdemo.txt
的路径。
常用选项:
-s
:创建符号链接。-f
:强制创建链接,覆盖已有文件。-v
:详细模式,显示创建的链接信息。-i
:交互模式,文件存在则提示用户是否覆盖。-n
:把符号链接视为一般目录。
总结
- 硬链接:多个文件名指向同一个数据块,所有硬链接文件内容一致。
- 符号链接:文件名指向另一个文件的路径,删除目标文件后,符号链接失效。
1.13 find-查找
注意:
如果不指定 /path/to/directory
,find
命令将默认在当前工作目录及其所有子目录中进行搜索。
当你需要在Linux系统中查找特定的文件或目录时,find
命令是一个非常有用的工具。它能够根据多种条件精确地定位文件,以下是它的一些主要用法:
-
按文件名查找:
使用
-name
选项可以根据文件名查找文件。例如,如果你想找到名为file.txt
的文件,可以执行类似这样的命令:find /path/to/directory -name "file.txt"
这将在指定目录及其子目录中查找名为
file.txt
的文件。
-
按文件类型查找:
使用
-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
。
-
按文件大小查找:
使用
-size
选项可以按照文件的大小查找文件。可以指定大小的单位(如M
表示兆字节)。例如,要查找大于100MB的文件,可以执行以下命令:find /path/to/directory -size +100M
这将列出指定目录及其子目录中大于100MB的文件。
-
按修改时间查找:
使用
-mtime
、-atime
或-ctime
选项可以按照文件的修改时间、访问时间或状态更改时间查找文件。例如,要查找最近7天内修改过的文件,可以执行以下命令:find /path/to/directory -mtime -7
这将列出指定目录及其子目录中在最近7天内修改过的文件。
-
按文件权限查找:
使用
-perm
选项可以按照文件权限查找文件。例如,要查找权限为755的文件,可以执行以下命令:find /path/to/directory -perm 755
这将列出指定目录及其子目录中权限为755的文件。
-
按用户或组查找:
使用
-user
或-group
选项可以按照文件的所有者或所属组查找文件。例如,要查找属于用户username
的文件,可以执行以下命令:find /path/to/directory -user username
这将列出指定目录及其子目录中属于用户
username
的文件。 -
执行操作:
使用
-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
这会只打印匹配的行。
-i
,in-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 [选项] [字符串...]
示例:
-
基本输出:
echo "Hello, World!"
输出:
Hello, World!
-
输出变量值:
NAME="Alice" echo "Hello, $NAME!"
输出:
Hello, Alice!
-
输出包含特殊字符的字符串:
echo "Hello, \$NAME!"
输出:
Hello, $NAME!
-
输出多行文本:
echo -e "Line1\nLine2\nLine3"
选项
-e
使echo
解释转义字符(如\n
表示换行)。输出:Line1 Line2 Line3
常用选项:
-
-e
:启用解释反斜杠转义字符。echo -e "Line1\nLine2\nLine3"
-
-n
:输出文本后不换行。echo -n "Hello, World!"
-
--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-文本搜索
常用参数:
-
-i
:忽略大小写进行搜索。- 解释:搜索时忽略大小写,即不区分大写和小写字母。
- 示例:
这会查找grep -i "pattern" filename
filename
文件中与 “pattern”(忽略大小写)匹配的所有行。
-
-v
:反转匹配,即显示不匹配的行。- 解释:只显示不匹配指定模式的行。
- 示例:
这会查找grep -v "pattern" filename
filename
文件中不包含 “pattern” 的所有行。
-
-n
:显示行号。- 解释:在输出的每一行前加上行号,表示匹配的行在文件中的位置。
- 示例:
这会查找grep -n "pattern" filename
filename
文件中与 “pattern” 匹配的所有行,并在每一行前显示行号。
-
-c
:统计匹配的行数。- 解释:只输出匹配行的数量,而不是具体的行内容。
- 示例:
这会输出grep -c "pattern" filename
filename
文件中与 “pattern” 匹配的行数。
示例总结:
grep -i "pattern" filename # 忽略大小写搜索
grep -v "pattern" filename # 反转匹配,显示不匹配的行
grep -n "pattern" filename # 显示匹配行的行号
grep -c "pattern" filename # 统计匹配行的数量
这些参数使 grep
命令在文本搜索时更加灵活和强大,适用于各种不同的搜索需求。