自定义 Linux 文件系统命令
Linux 终端的强大之处在于,您可以快速自定义环境,使其根据您的需要更好地工作。有很多不同的方法可以“破解”您的终端,其中一些方法本身几乎就是整个计算机科学领域,但对于初学者来说,有很多小技巧——尤其是在使用 Linux 文件系统时。请参阅我的文章使用 Linux 终端管理文件以了解基础知识。
自定义工作终端环境的最简单方法是编辑其配置文件,其中包含您的个人 shell 设置。Bash (Bourne Again Shell)是 Linux(包括Red Hat Enterprise Linux和Fedora )上最常见的 shell ,Bash 的配置文件是 ~/.bashrc
。
创建别名
自定义的第一步很简单,就是创建别名。别名允许您定义自己的简单命令或重新定义现有命令。要添加别名,请.bashrc
在文本编辑器中编辑文件,或使用命令直接从终端创建它们echo
。
例如,要重新定义ls
命令以使其始终使用--classify
(-F
)和--almost-all
(-a
)选项,请向添加别名规则.bashrc
,然后source
(重新读取并加载)更改后的配置文件。
$ echo "alias ls='ls --classify --almost-all'" >> ~/.bashrc
$ source .bashrc
$ ls
bin/
Desktop/
despacer.sh
documentation.zip*
Documents/
Music/
Pictures/
Public/
一旦创建并重新加载了别名,该ls
命令将始终使用选项,--classify
以便您可以区分文件和文件夹,以及--almost-all
排除点和双点符号的选项。该ls
命令还有更多选项。ls
输入以下内容查看手册了解更多信息:
$ man ls
您可以为各种重复的简单任务创建别名。复杂的操作可能需要比别名更强大的功能,例如 shell 脚本,但别名是让您的环境为您工作的好方法。
自定义你的垃圾
打开一系列窗口,找到要删除的文件。将文件移至桌面上的“废纸篓”或“垃圾桶”图标。当您收集了足够多的垃圾,并确信可以安全地从系统中删除所有垃圾时,请转到“废纸篓”菜单并选择“清空”。
默认情况下,您的终端中没有垃圾箱,但话又说回来,“垃圾箱”只是另一个文件夹,用于接收您最终想要删除的所有文件。数据仍会存在,直到您清空它。这样做很简单。通过本文中学到的经验教训,您可以为您的终端创建一个安全可靠的垃圾箱系统。
如果您的计算机恰好有桌面,例如Red Hat Enterprise Linux 和 Fedora 上的GNOME桌面,那么您已经在 中有一个系统垃圾箱~/.local/share/Trash/files
。您可以直接引用此文件夹,或者为了减少输入,您可以创建指向它的符号链接:
$ ln --symbolic ~/.local/share/Trash/files ~/.trash
如果您的计算机没有桌面,那么您可能没有垃圾文件夹,但您可以手动创建一个。垃圾桶实际上只是另一个文件夹。使用mkdir
带有--parents
( -p
) 选项的命令可以在一个命令中创建一系列文件夹:
$ mkdir --parents ~/.local/share/Trash/files
$ ln --symbolic ~/.local/share/Trash/files ~/.trash
当你想将文件或文件夹移动到垃圾箱时,请mv
照常使用以下命令:
$ mv oldfile.txt ~/.trash
制作更好的垃圾命令
使用垃圾文件夹的更顺畅的方法是编写您自己的新命令,名为trash
,它将文件移动到您的~/.trash
文件夹中。这是一个高级练习,并引入了一些新命令,但您可能会惊讶于创建自己的自定义命令是多么容易。只需两行 Bash 代码,您就可以设计自己的个人垃圾管理系统。
在创建自己的命令之前,您需要一个地方来存储自定义脚本。Linux 用户通常会维护一个~/bin
目录,用于保存个人实用程序和二进制可执行文件。默认情况下不存在该目录,但您可以创建它,然后将其添加到您的路径中:
$ mkdir ~/bin
$ echo "export PATH=$PATH:$HOME/bin" >> ~/.bashrc
$ source ~/.bashrc
现在您可以使用以下命令构建自己的垃圾命令echo
:
$ echo '#!/bin/sh' > ~/trash
$ echo 'mv "${@}" ~/.local/share/Trash/files' >> ~/trash
或者,您可以打开文本编辑器并将代码复制并粘贴到其中:
#!/bin/sh
mv "${@}" ~/.local/share/Trash/files
将文件另存为~/bin/trash。
此脚本的第一行声明了运行它所需的应用程序。在本例中,第一行指定需要sh
位于/bin
文件系统根目录中的 shell。毕竟,这是一个 shell 脚本:一系列按所需执行顺序排列的 Bash shell 命令。
第二行将mv
命令与特殊的 Bash 变量 结合使用,"${@}"
变量 表示在命令 后输入的任何内容。这使得单个命令可以作用于多个文件。您不必像这样对每个文件运行一次命令:
$ trash foo
$ trash bar
$ trash baz
相反,您正在对命令进行编程以同时识别多个参数:
$ trash foo bar baz
要确认你的 shell 脚本正确,请使用命令cat
将文件的内容连接到你的 shell 的输出中:
$ cat trash
#!/bin/sh
mv "${@}" ~/.local/share/Trash/files
为了让您自己可以使用此命令,请将mv
其移动到名为的目录中~/bin
(此目录默认不存在,因此请先创建它):
$ mkdir ~/bin
$ mv trash ~/bin
您的 shell 目前将您的 shell 脚本视为一个全是文本的文件。您尚未授权计算机将您的脚本视为可执行命令。这种区分很重要,因为如果您的 shell 能够在未经您明确许可的情况下将所有内容作为命令执行,那么您系统上的任何文件都有可能执行任意代码(想象一下,仅仅因为您或您的某个用户单击了错误的文件而删除重要数据库中的所有表)。
要授予文件作为可执行文件的权限,可以使用(更改模式)命令在其文件属性中设置可执行位:chmod
$ chmod +x ~/bin/trash
现在您可以将文件作为命令运行。通过创建一个文件然后将该文件移至废纸篓来测试这一点:
$ echo "This is rubbish." >> rubbish.file
$ cat rubbish.file
This is rubbish.
$ ~/bin/trash rubbish.file
如果您在计算机上运行桌面,请打开垃圾箱并确认它rubbish.file
现在位于系统垃圾箱中。如果您没有运行桌面,只需查看符号~/.trash
链接。作为临时过滤器,ls
通过管道( |
) 发送命令的输出,使用grep
命令搜索字符串rubbish:
$ ls ~/.trash | grep rubbish
rubbish.file
但请注意,trash
如果不提供完整路径,使用命令将无法按预期工作:
$ echo "This is more rubbish." >> rubbish2.file
$ trash rubbish2.file
bash: trash: command not found...
这是因为它尚未位于您的可执行路径中。
告诉你的 shell 在哪里查看
有些命令(例如cd
、pwd
和alias
)内置于您的 shell 中。其他命令(例如ls
、mv
和echo
)安装在您的 shell 指定为命令的有效搜索位置的位置。当您输入ls
、mv
或等命令时trash
,您的 shell 会搜索已告知包含可执行文件的目录列表。您可以通过查看变量来查看此搜索位置列表PATH
。该命令允许您通过在变量名称前echo
添加美元符号 ( ) 来查看变量:$
$ echo $PATH
/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin:/usr/local/sbin
为了能够像使用trash
系统上的其他命令一样使用它,您必须将个人~/bin
目录添加到 PATH 变量中。启动 shell 时会加载 Shell 环境变量,因此它们会在~/.bashrc
配置文件中设置。您可以使用文本编辑器将此目录添加到 PATH 中,或者只需使用echo
带有双重重定向的命令将规则附加到您的配置中:
$ echo 'export PATH=$PATH:/home/seth/bin' >> ~/.bashrc
将新配置加载到 shell 中:
$ source ~/.bashrc
然后再次尝试你的命令:
$ trash rubbish2.file
永久删除文件
最后,您的垃圾箱需要清空。该rm
命令会从您的文件系统中删除一个文件(永久删除,因此请谨慎使用)。
因为该rm
命令如果被误用可能会造成危害,所以最好限制与它的交互,并在使用它时限制其范围。在这种情况下,你只想rm
在垃圾箱内操作,因此你可以创建一个别名来降低输入错误命令的风险。调用的次数越少rm
,意外删除文件的可能性就越小。
empty
通过输入以下内容创建别名:
$ echo 'empty="rm --recursive --verbose --force ~/.local/share/Trash/files/*"' >> ~/.bashrc
trash
与您的命令不同,empty
它被视为内置命令,因为它是别名而不是外部脚本。这意味着您不必将任何内容放入目录中~/bin
或将任何内容添加到PATH
变量中。您只需重新加载您的 shell 配置,然后测试您的新内置命令:
$ source .bashrc
$ empty
removed '/home/seth/.trash/rubbish.file
removed '/home/seth/.trash/rubbish2.file
熟能生巧
现在,您已经编写了第一个 shell 脚本,并自定义了 shell 环境。像这样的小练习很重要,因为您在 shell 中工作得越多,您就会变得越熟练。尽量充分利用您在终端中工作的时间,以适应它。您不必一开始就做大任务。从小事做起,然后逐步提高。
现在正是最佳时机,去探索 Linux 终端吧!