你值得了解的 10 个有趣的 Linux 命令行小技巧

两味真火
 两味真火
发布于 2017年01月16日
收藏 122

我非常喜欢使用命令,因为它们比 GUI(图形用户界面)应用程序对 Linux 系统提供更多的控制,因此,我一直在寻找一些有趣的方法让 Linux 的操作变得简单好玩,主要是基于终端操作。

当我们发现使用 Linux 的新技巧时,尤其是像我这样的命令行极客,我们总会感到非常来劲。

而且我们也会很想与数百万 Linux 用户分享新学到的实践或命令,特别是那些还在使用自己的方式操作这个令人兴奋的操作系统的新手们。

在这篇文章中,我们将回顾一系列有用的命令行小技巧,它们可以显著地提高你的 Linux 使用技能。

1、 在 Linux 中锁定或隐藏文件或目录

锁定文件或目录最简单的方法是使用 Linux 文件权限。如果你是文件或目录的所有者,你可以阻止其他用户和组访问(删除、读取、写入、执行)它,如下所示:

$ chmod 700 tecmint.info或$ chmod go-rwx tecmint.info

想要了解更多有关 Linux 文件权限的内容,请阅读这篇文章在 Linux 中管理用户和组,文件权限和属性[5]

为了实现对系统中的其他用户隐藏文件或目录,可以通过在文件或目录开头添加 . 的方式重命名:

$ mv filename .tecmint.info

2、 在 Linux 中将 rwx 权限转为八进制格式

默认情况下,当你运行 ls 命令[6]之后,它会使用 rwx 格式显示文件权限,为了了解 rwx 格式和八进制格式的等同性,你可以学习如何在 Linux 中将 rwx 权限转为八进制格式[7]

3、 当 sudo 命令执行失败时怎么使用 su 命令

虽然 sudo 命令[8]被用来以超级用户权限执行命令,但是在某些情况下它也会执行失败,如下所示。

在这里,我想清空一个大文件的内容[9],其文件名为 uptime.log,但是即便我是使用 sudo 命令也执行失败了。

$ cat /dev/null >/var/log/uptime.log$ sudo cat /dev/null >/var/log/uptime.log

在 Linux 中清空大文件的内容

遇到这种情况,你需要使用 su 命令切换到 root 用户,然后像下面这样去执行清空操作:

$ su$ sudo cat /dev/null >/var/log/uptime.log$ cat /var/log/uptime.log

切换到超级用户

尝试理解 su 和 sudo 之间的区别[10],另外,通过阅读它们的手册页以了解更多的使用指南:

$ man sudo$ man su

4、 在 Linux 中结束一个进程

有些时候,当你想使用 kill、killall、pkill 命令结束一个进程[11]时,它们有可能无法生效,你可能会看到该进程仍然还在系统上运行。

如果要强制结束一个进程,可以发送 -KILL 信号给该进程。

首先获取指定进程 ID[12],然后像下面这样结束该进程:

$ pidof vlc$ sudo kill -KILL 10279

在 Linux 中查找和结束进程

查看 kill 命令[13]以获取更多的使用选项和信息。

5、 在 Linux 中永久删除文件

一般情况下,我们通过使用 rm 命令将文件从 Linux 系统中删除。然而,这些文件并没有被真正的删除,它们仍被存储在那里并隐藏在你的硬盘中,其他用户仍然可以在 Linux 中恢复删除的文件[14]并查看。

为了防止这种情况发生,我们可以使用 shred 命令来覆写文件内容,并在覆盖完成后选择删除文件。

$ shred -zvu tecmint.pdf

上述命令中所使用的选项说明:

  1. -z – 最后一次使用 0 进行覆盖以隐藏覆写动作。

  2. -u – 覆写后截断并移除文件。

  3. -v – 显示详细过程。

在 Linux 中永久删除文件

阅读 shred 手册以获取更多的使用信息。

$ man shred

6、 在 Linux 中重命名多个文件

你可以通过使用 rename 命令随时在 Linux 中重命名多个文件[15]

rename 命令会根据第一个参数中的规则重命名指定文件。

以下命令会将所有 .pdf 文件重命名为 .doc 文件,使用的规则为 's/\.pdf$/\.doc/'

$ rename -v 's/\.pdf$/\.doc/' *.pdf

在 Linux 中重命名多个文件

在接下来的例子中,我们将通过重命名所有匹配 "*.bak" 的文件来移除其拓展名,使用的规则是 's/\e.bak$//'

$ rename -v 's/\e.bak$//' *.bak

7、 在 Linux 中检查单词拼写

look 命令用于显示文件中以指定字符串为前缀的任意行,同时它也可以帮你检查命令行中给定单词的拼写。尽管它并不是那么有效和可靠,但它仍然算得上是其他强大的拼写检查工具的有用替代品。

$ look linu$ look docum

在 Linux 中检查单词拼写

8、 按关键字搜索手册页

man 命令用于显示命令的手册页,当使用 -k 选项时,它会将关键字 printf(或者如下命令中的关键字 adjustapachephp )作为正则表达式,来搜索所有匹配该名称手册页,并显示其简介。

$ man -k adjust$ man -k apache$ man -k php

按关键字搜索手册页

9、 在 Linux 中实时监测日志

watch 命令可以定期执行另一个 Linux 命令[16]并全屏显示该命令的执行结果。当 watch 命令与 tail 命令[17](用于查看文件结尾的 Linux 命令)配合使用时,可以监测到日志文件的日志记录情况。

在以下示例中,你将实时监测系统认证日志文件。打开两个终端窗口,在第一个窗口中实时监测该日志文件,如下:

$ sudo watch tail /var/log/auth.log

你也可以使用 tail 命令[18](显示文件结尾的 Linux 命令)的 -f 选项实时监测文件变化。这样,我们就可以在日志文件中看到日志的生成情况。

$ sudo tail -f /var/log/auth.log

接着,在第二个终端窗口中运行以下命令,之后,你就可以在第一个终端窗口中观察日志文件内容:

$ sudo mkdir -p /etc/test$ sudo rm -rf /etc/test

10、 列出所有 Shell 内置命令

shell 内置命令是一个命令或者函数,从内部调用并直接在 shell 里执行,而不是从硬盘加载外部的可执行程序来执行。

列出所有 shell 内置命令及其语法,执行如下命令:

$ help

作为结束语,命令行小技巧[19]不仅能派得上用场,而且让学习和使用 Linux 变得更加简单有趣,尤其是对新手来讲。

稿源:Linux 中国

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:你值得了解的 10 个有趣的 Linux 命令行小技巧
加载中

精彩评论

月影南溪
月影南溪
“此图片来自微信公众平台” 好吧,我只关心是不是原创的?如果是,那么为什么图片是来自微信公众平台。如果不是,为什么不标明是转载并附加出处?
两味真火
两味真火

引用来自“月影南溪”的评论

“此图片来自微信公众平台” 好吧,我只关心是不是原创的?如果是,那么为什么图片是来自微信公众平台。如果不是,为什么不标明是转载并附加出处?
图片已处理好,文章稿源为 Linux 中国,已在文末标明,并附有原文链接。
守望辰峰
守望辰峰
排版乱七八糟,内容穿插。
```
接着,在第二个终端窗口中运行以下命令,之后,你就可以在第一个终端窗口中观察日志文件内容:
$ sudo mkdir -p /etc/test$ sudo rm -rf /etc/test
```
我就说这 rm -rf 和上面的有什么关系?

最新评论(10

eechen
eechen
GNU/Linux命令确实很强大,如果能配上可视化操作,对普通用户会更友好.
比如我们可以在mysql-client这种命令行终端里管理MySQL,
也可以在phpMyAdmin这种基于浏览器的可视化环境里管理MySQL.
我们在phpMyAdmin里的每一个可视化操作,
phpMyAdmin都会在下方显示出操作对应的SQL语句,
我们暂且称之为"SQL操作回显".
同理,我们同样可以用PHP开发一个基于浏览器的phpLinuxAdmin来管理Linux和使用其上的命令.
相比"SQL操作回显",实现"shell回显",也就是在可视化操作后,把PHP调用的"命令和参数"显示出来.
SQL我们要防御SQL注入,shell我们也有防御shell注入.
shell参数转义可以用escapeshellarg,命令转义可以用escapeshellcmd,exec可以接收命令的输出和返回值.
下面以列出/root目录下的内容为例(需要传递sudo用户密码):
<?php
header('Content-Type: text/plain; charset=utf-8');
// php -S 127.0.0.1:8080 -t ./
// http://127.0.0.1:8080/index.php?arg=/root&pass=xxx
$cmd = 'echo '.escapeshellarg($_GET['pass']).' | sudo -S ls -lha '.escapeshellarg($_GET['arg']);
exec($cmd, $output, $return_var); //output是数组
if($return_var === 0) var_export($output);
else echo 'fail';
为了方便测试,用HTTP+GET方式传递密码,真实环境应该用HTTPS+POST方式.
因为浏览器历史记录和服务器日志都会记录GET请求.
Linux上的sudo和gksu,相当于Windows上"以管理员身份运行".
sudo --help 可见 -S, --stdin 表示从标准输入读取密码,所以编程时可以这样传递密码:
echo mypassword | sudo -S command
phpLinuxAdmin,你准备好了么?
晓风拂柳
晓风拂柳
很普通的命令,有啥B可以装的。
左蓝
左蓝

引用来自“Skiychan”的评论

排版乱七八糟,内容穿插。
```
接着,在第二个终端窗口中运行以下命令,之后,你就可以在第一个终端窗口中观察日志文件内容:
$ sudo mkdir -p /etc/test$ sudo rm -rf /etc/test
```
我就说这 rm -rf 和上面的有什么关系?
会在/var/log/auth.log中记录这两句的操作,你自己试试就知道了,rm -rf 只是随便一个例子而已。
两味真火
两味真火

引用来自“月影南溪”的评论

“此图片来自微信公众平台” 好吧,我只关心是不是原创的?如果是,那么为什么图片是来自微信公众平台。如果不是,为什么不标明是转载并附加出处?
图片已处理好,文章稿源为 Linux 中国,已在文末标明,并附有原文链接。
调皮的XD
调皮的XD
这特么坑,小编都不审核一下???微信图片都打不开
守望辰峰
守望辰峰
排版乱七八糟,内容穿插。
```
接着,在第二个终端窗口中运行以下命令,之后,你就可以在第一个终端窗口中观察日志文件内容:
$ sudo mkdir -p /etc/test$ sudo rm -rf /etc/test
```
我就说这 rm -rf 和上面的有什么关系?
月影南溪
月影南溪
“此图片来自微信公众平台” 好吧,我只关心是不是原创的?如果是,那么为什么图片是来自微信公众平台。如果不是,为什么不标明是转载并附加出处?
smalike
smalike
无图无真相
mia0x75
mia0x75
第一句话就很扯。
返回顶部
顶部