Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务。Linux命令和它们的转换对于Linux用户、Shell脚本程序员和管理员来说是最有价值的宝藏。有些Linux命令很少人知道,但不管你是新手还是高级用户,它们都非常方便有用。 少有人知道的Linux命令 这篇文章的目的是介绍一些少有人知的Linux命令,它们一定会高效地帮你管理你的桌面/服务器。 |
Ley
|
1. sudo !!命令没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不需要重写整个命令,仅仅输入'!!'就可以抓取最后的命令。
2. python命令下面的命令生产一个通过HTTP显示文件夹结构树的简单网页,可以通过浏览器在端口8000访问,直到发出中断信号。
|
Ley
|
3. mtr命令我们大多数都熟悉ping和traceroute。那对于把两个命令的功能合二为一的mtr命令呢。如果mtr没在你的机子上安装,apt或者yum需要的包。
mtr命令 |
Ley
|
4. Ctrl+x+e命令这个命令对于管理员和开发者非常有用。为了使每天的任务自动化,管理员需要通过输入vi、vim、nano等打开编辑器。 仅仅从命令行快速的敲击“Ctrl-x-e”,就可以在编辑器中开始工作了。 5. nl命令“nl命令”添加文件的行数。一个叫做'one.txt'的文件,其每行的内容是(Fedora、Debian、Arch、Slack和Suse),给每行添加行号。首先使用cat命令显示“one.txt”的文件内容。
|
Ley
|
6. shuf命令“Shut”命令随机从一个文件或文件夹中选择行/文件/文件夹。首先使用ls命令来显示文件夹的内容。
7. ss命令“ss”表示socket统计。这个命令调查socket,显示类似netstat命令的信息。它可以比其他工具显示更多的TCP和状态信息。
|
Ley
|
8. last命令“last”命令显示的是上次登录用户的历史信息。这个命令通过搜索文件“/var/log/wtmp”,显示logged-in和logged-out及其tty‘s的用户列表。
9. curl ifconfig.me那么如何得到你的外部IP地址呢?使用google?那么这个命令就在你的终端输出你的外部IP地址。
10. tree命令 以树式的格式得到当前文件夹的结构。
|
Ley
|
11. pstree
这个命令显示当前运行的所有进程及其相关的子进程,输出的是类似‘tree’命令的树状格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# pstree init─┬─NetworkManager───{NetworkManager} ├─accounts-daemon───{accounts-daemon} ├─acpi_fakekeyd ├─acpid ├─apache2───10*[apache2] ├─at-spi-bus-laun───2*[{at-spi-bus-laun}] ├─atd ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─colord───{colord} ├─colord-sane───2*[{colord-sane}] ├─console-kit-dae───64*[{console-kit-dae}] ├─ cron ├─cupsd ├─2*[dbus-daemon] ├─dbus-launch ├─dconf-service───2*[{dconf-service}] ├─dovecot─┬─anvil │ ├─config │ └─log ├─exim4 ├─gconfd-2 ├─gdm3─┬─gdm-simple-slav─┬─Xorg │ │ ├─gdm-session-wor─┬─x-session-manag─┬─evolution-a+ │ │ │ │ ├─gdu-notific+ │ │ │ │ ├─gnome-scree+ │ │ │ │ ├─gnome-setti+ │ │ │ │ ├─gnome-shell+++ │ │ │ │ ├─nm-applet──+++ │ │ │ │ ├─ ssh -agent │ │ │ │ ├─tracker-min+ │ │ │ │ ├─tracker-sto+ │ │ │ │ └─3*[{x-sessi+ │ │ │ └─2*[{gdm-session-wor}] │ │ └─{gdm-simple-slav} │ └─{gdm3} ├─6*[getty] ├─gnome-keyring-d───9*[{gnome-keyring-d}] ├─gnome-shell- cal ───2*[{gnome-shell- cal }] ├─goa-daemon───{goa-daemon} ├─gsd-printer───{gsd-printer} ├─gvfs-afc-volume───{gvfs-afc-volume} |
如下的快捷方式非常有用,能够极大的提升你的工作效率:
· CTRL + U - 剪切光标前的内容
· CTRL + K - 剪切光标至行末的内容
· CTRL + Y - 粘贴
· CTRL + E - 移动光标到行末
· CTRL + A - 移动光标到行首
· ALT + F - 跳向下一个空格
· ALT + B - 跳回上一个空格
· ALT + Backspace - 删除前一个单词
· CTRL + W - 剪切光标后一个单词
· Shift + Insert - 向终端内粘贴文本
那么为了让上述内容更易理解来看下面的这行命令。
1. sudo apt-get intall programname
如你所见,命令中存在拼写错误,为了正常执行需要把“intall”替换成“install”。
想象现在光标正在行末,我们有很多的方法将她退回单词install并替换它。
我可以按两次ALT+B这样光标就会在如下的位置(这里用指代光标的位置)。
1. sudo apt-get^intall programname
现在你可以按两下方向键并将“s”插入到install中去了。
如果你想将浏览器中的文本复制到终端,可以使用快捷键"shift + insert"。
2. SUDO !!
如果你还不知道这个命令,我觉得你应该好好感谢我,因为如果你不知道的话,那每次你在输入长串命令后看到“permission denied”后一定会痛苦不堪。
· sudo !!
如何使用sudo !!?很简单。试想你刚输入了如下命令:
1. apt-get install ranger
一定会出现“Permission denied”,除非你已经登录了足够高权限的账户。
sudo !! 就会用 sudo 的形式运行上一条命令。所以上一条命令就变成了这样:
1. sudo apt-get install ranger
如果你不知道什么是sudo,戳这里。
3. 暂停并在后台运行命令
我曾经写过一篇如何在终端后台运行命令的指南。
· CTRL + Z - 暂停应用程序
· fg - 重新将程序唤到前台
如何使用这个技巧呢?
试想你正用nano编辑一个文件:
1. sudo nano abc.txt
文件编辑到一半你意识到你需要马上在终端输入些命令,但是nano在前台运行让你不能输入。
你可能觉得唯一的方法就是保存文件,退出 nano,运行命令以后在重新打开nano。
其实你只要按CTRL + Z,前台的命令就会暂停,画面就切回到命令行了。然后你就能运行你想要运行命令,等命令运行完后在终端窗口输入“fg”就可以回到先前暂停的任务。
有一个尝试非常有趣就是用nano打开文件,输入一些东西然后暂停会话。再用nano打开另一个文件,输入一些什么后再暂停会话。如果你输入“fg”你将回到第二个用nano打开的文件。只有退出nano再输入“fg”,你才会回到第一个用nano打开的文件。
4. 使用nohup在登出SSH会话后仍运行命令
如果你用ssh登录别的机器时,nohup命令真的非常有用。
那么怎么使用nohup呢?
想象一下你使用ssh远程登录到另一台电脑上,你运行了一条非常耗时的命令然后退出了ssh会话,不过命令仍在执行。而nohup可以将这一场景变成现实。
举个例子,因为测试的需要,我用我的树莓派来下载发行版。我绝对不会给我的树莓派外接显示器、键盘或鼠标。
一般我总是用SSH从笔记本电脑连接到树莓派。如果我在不用nohup的情况下使用树莓派下载大型文件,那我就必须等待到下载完成后,才能登出ssh会话关掉笔记本。可如果是这样,那我为什么要使用树莓派下文件呢?
使用nohup的方法也很简单,只需如下例中在nohup后输入要执行的命令即可:
1. nohup wget http://mirror.is.co.za/mirrors/linuxmint.com/iso//stable/17.1/linuxmint-17.1-cinnamon-64bit.iso &
5. ‘在’特定的时间运行Linux命令
‘nohup’命令在你用SSH连接到服务器,并在上面保持执行SSH登出前任务的时候十分有用。
想一下如果你需要在特定的时间执行相同的命令,这种情况该怎么办呢?
命令‘at’就能妥善解决这一情况。以下是‘at’使用示例。黑客攻击防范于未然,定时自动备份wordpress 的N种方法。
1. at 10:38 PM Fri
2. at> cowsay 'hello'
3. at> CTRL + D
上面的命令能在周五下午10时38分运行程序cowsay。
使用的语法就是‘at’后追加日期时间。当at>提示符出现后就可以输入你想在那个时间运行的命令了。营销型网站建设应该从哪几点着手。
CTRL + D 返回终端。
还有许多日期和时间的格式,都需要你好好翻一翻‘at’的man手册来找到更多的使用方式。
6. Man手册
Man手册会为你列出命令和参数的使用大纲,教你如何使用她们。Man手册看起来沉闷呆板。(我思忖她们也不是被设计来娱乐我们的)。
不过这不代表你不能做些什么来使她们变得漂亮些。
1. export PAGER=most
你需要安装 ‘most’;她会使你的你的man手册的色彩更加绚丽。怎么进Blos设置usb启动项顺利进行装机。
你可以用以下命令给man手册设定指定的行长:
1. export MANWIDTH=80
最后,如果你有一个可用的浏览器,你可以使用-H在默认浏览器中打开任意的man页。
1. man -H <command>
注意啦,以上的命令只有在你将默认的浏览器设置到环境变量$BROWSER中了之后才效果哟。
7. 使用htop查看和管理进程
你用哪个命令找出电脑上正在运行的进程的呢?我敢打赌是‘ps’并在其后加不同的参数来得到你所想要的不同输出。
安装‘htop’吧!绝对让你相见恨晚。
htop在终端中将进程以列表的方式呈现,有点类似于Windows中的任务管理器。你可以使用功能键的组合来切换排列的方式和展示出来的项。你也可以在htop中直接杀死进程。
在终端中简单的输入htop即可运行。
1. htop
8. 使用ranger浏览文件系统
如果说htop是命令行进程控制的好帮手,那么ranger就是命令行浏览文件系统的好帮手。
你在用之前可能需要先安装,不过一旦安装了以后就可以在命令行输入以下命令启动她:
1. ranger
在命令行窗口中ranger和一些别的文件管理器很像,但是相比上下结构布局,她是左右结构的,这意味着你按左方向键你将前进到上一个文件夹,而右方向键则会切换到下一个。
在使用前ranger的man手册还是值得一读的,这样你就可以用快捷键操作ranger了。
9. 取消关机
无论是在命令行还是图形用户界面关机后,才发现自己不是真的想要关机。
1. shutdown -c
需要注意的是,如果关机已经开始则有可能来不及停止关机。
以下是另一个可以尝试命令:
· pkill shutdown
10. 杀死挂起进程的简单方法
想象一下,你正在运行的应用程序不明原因的僵死了。
你可以使用‘ps -ef’来找到该进程后杀掉或者使用‘htop’。
有一个更快、更容易的命令叫做xkill。
简单的在终端中输入以下命令并在窗口中点击你想杀死的应用程序。
1. xkill
那如果整个系统挂掉了怎么办呢?
按住键盘上的‘alt’和‘sysrq’不放,然后慢慢输入以下键:
· REISUB
这样不按电源键你的计算机也能重启了。
11. 下载Youtube视频
一般来说我们大多数人都喜欢看Youtube的视频,也会通过钟爱的播放器播放Youtube的流媒体。
如果你需要离线一段时间(比如:从苏格兰南部坐飞机到英格兰南部旅游的这段时间)那么你可能希望下载一些视频到存储设备中,到闲暇时观看。
你所要做的就是从包管理器中安装youtube-dl。
你可以用以下命令使用youtube-dl:
1. youtube-dl url-to-video
你可以在Youtubu视频页面点击分享链接得到视频的url。只要简单的复制链接在粘帖到命令行就行了(要用shift + insert快捷键哟)。
使用 tmux 复用控制台窗口
高效使用命令行的首要原则就是要尽量避免非命令行的干扰,什么意思呢?就是说一但开启了一个控制台窗口,就尽量不要再在桌面上切换来切换去了,不要一会儿 被别的窗口挡住控制台,一会儿又让别的窗口破坏了控制台的背景,最好是把控制台最大化或全屏,最好连鼠标都不要用。只有这样,才能达到比较高的效率。但是 在实际工作中,我们又经常需要同时在多个控制台中进行工作,例如:在一个控制台中运行录制屏幕的命令,在另外一个控制台中工作,或者在一个控制台中工作, 在另外一个控制台中阅读文档。如果既想在多个控制台中工作,又不想一大堆窗口挡来挡去、换来换去的话,就可以考虑试试 tmux 了。如下图:
tmux 的功能很多,什么 Session 啊、Detach 啊、Atach 啊什么的我们暂时不用去关心,只用好它的控制台窗口复用功能就行了。tmux 中有 window 和 pane 的概念,tmux 可以创建多个 window,这些 window 是不会互相遮挡的,每次只显示一个 window,其它的 window 会自动隐藏,可以使用快捷键在 window 之间切换。同时,可以把一个 window 切分成多个 pane,这些 pane 同时显示在屏幕上,可以使用快捷键在 pane 之间切换。
tmux 的快捷键很多,要想全面了解 tmux 的最好办法当然是阅读 tmux 的文档了,使用命令 man tmux
就可以了。但是我们只需要记住少数几个重要的快捷键就可以了,如下表:
快捷键 | 功能 |
---|---|
Ctrl+B c | 创建一个 window |
Ctrl+B [n][p] | 切换到下一个窗口或上一个窗口 |
Ctrl+B & | 关闭当前窗口 |
Ctrl+B " | 将当前 window 或 pane 切分成两个 pane,上下排列 |
Ctrl+B % | 将当前 window 或 pane 切分成两个 pane,左右排列 |
Ctrl+B x | 关闭当前 pane |
Ctrl+B [↑][↓][←][→] | 在 pane 之间移动 |
Ctrl+[↑][↓][←][→] | 调整当前 pane 的大小,一次调整一格 |
Alt+[↑][↓][←][→] | 调整当前 pane 的大小,一次调整五格 |
tmux 的快捷键比较特殊,除了调整 pane 大小的快捷键之外,其它的都是先按 Ctrl+B,再按一个字符。先按 Ctrl+B,再按 c,就会创建一个 window,这里 c 就是 create window。先按 Ctrl+B,再按 n 或者 p,就可以在窗口之间切换,它们是 next window 和 previous window 的意思。关闭窗口是先按 Ctrl+B,再按 &,这个只能死记。先按 Ctrl+B,再按 " ,表示上下拆分窗口,可以想象成单引号和双引号在键盘上是上下铺关系。先按 Ctrl+B,再按 % 表示左右拆分窗口,大概是因为百分数都是左右书写的吧。至于在 pane 之间移动和调整 pane 大小的方向键,就不用多说了吧。
快速引用和修饰历史命令
除了查看和搜索历史记录,我们还可以以更灵活的方式引用历史记录中的命令。常见的简单的例子有 !!
代表引用上一条命令,!$
代表引用上一条命令的最后一个参数,^oldstring^newstring^
代 表将上一条命令中的 oldstring 替换成 newstring。这些操作是我们平时使用命令行的时候的一些常用技巧,其实它们的本质,是由 history 库提供的 history expansion 功能。Bash 使用了 history 库,所以也能使用这些功能。其完整的文档可以查看 man history
手册页。知道了 history expansion 的理论,我们还可以做一些更加复杂的操作,如下图:
引用和修饰历史命令的完整格式是这样的:
![!|[?]string|[-]number]:[n|x-y|^|$|*|n*|%]:[h|t|r|e|p|s|g]
可以看到,一个对历史命令的引用被 :
分为了三个部分,第一个部分决定了引用哪一条历史命令;第二部分决定了选取该历史命令中的第几个单词,单词是从0开始编号的,也就是说第0个单词代表命令本身,第1个到最后一个单词代表命令的参数;第三部分决定了对选取的单词如何修饰。下面我列出完整表格:
表格一、引用哪一条历史命令:
操作符 | 功能 |
---|---|
! | 所有对历史命令的引用都以 ! 开始,除了 ^oldstring^newstring^ 形式的快速替换 |
!n | 引用第 n 条历史命令 |
!-n | 引用倒数第 n 条历史命令 |
!! | 引用上一条命令,等于 !-1 |
!string | 逆向搜索历史记录,第一条以 string 开头的命令 |
!?string[?] | 逆向搜索历史记录,第一条包含 string 的命令 |
^oldstring^newstring^ | 对上一条命令进行快速替换,将 oldstring 替换为 newstring |
!# | 引用当前输入的命令 |
表格二、选取哪一个单词:
操作符 | 功能 |
---|---|
0 | 第0个单词,在 shell 中就是命令本身 |
n | 第n个单词 |
^ | 第1个单词,使用 ^ 时可以省略前面的冒号 |
$ | 最后一个单词,使用 $ 是可以省略前面的冒号 |
% | 和 ?string? 匹配的单词,可以省略前面的冒号 |
x-y | 从第 x 个单词到第 y 个单词,-y 代表 0-y |
* | 除第 0 个单词外的所有单词,等于 1-$ |
x* | 从第 x 个单词到最后一个单词,等于 x-$,可以省略前面的冒号 |
x- | 从第 x 个单词到倒数第二个单词 |
表格三、对选取的单词做什么修饰:
操作符 | 功能 |
---|---|
h | 选取路径开头,不要文件名 |
t | 选取路径结尾,只要文件名 |
r | 选取文件名,不要扩展名 |
e | 选取扩展名,不要文件名 |
s/oldstring/newstring/ | 将 oldstring 替换为 newstring |
g | 全局替换,和 s 配合使用 |
p | 只打印修饰后的命令,不执行 |
这几个命令其实挺好记的,h 代表 head,只要路径开头不要文件名,t 代表 tail,只要路径结尾的文件名,r 代表 realname,只要文件名不要扩展名,e 代表 extension,只要扩展名不要文件名,s 代表 substitute,执行替换功能,g 代表 global,全局替换,p 代表 print,只打印不执行。有时候光使用 :p
还不够,我们还可以把这个经过引用修饰后的命令直接在当前命令行上展开而不立即执行,它的快捷键是:
操作符 | 功能 |
---|---|
Ctrl + Alt + E | 在当前命令行上展开历史命令引用,展开后不立即执行,可以修改,按 Enter 后才会执行 |
Alt + ^ | 和上面的功能一样 |
这两个快捷键,记住一个就行。这样,当我们对历史命令的引用修饰完成后,可以先展开来看一看,如果正确再执行。眼见为实嘛,反正我是每次都展开看看才放心。
录制屏幕并转换为gif动画图片
最后,给大家展示我做 gif 动画图片的过程。我用到的软件有 recordmydesktop
、mplayer
和 convert
。使用 recordmydesktop
时需要一个单独的控制台来运行录像功能,录像完成后需要在该控制台中输入 Ctrl+C 终止录像。所以我用到了 tmux 。首先,我启动 tmux,然后运行 recordmydesktop --full-shots -fps 2 --no-sound --no-frame -delay 5 -o ~图片/record_to_gif.ogv
命令开始录像。由于 recordmydesktop
运行后不会马上退出,录像开始后,这个 window 就被占用了,所以我按 Ctrl+B c 让 tmux 再创建一个 window,然后在这个 window 中做的任何操作都会被录制下来。被录制的操作完成后,按 Ctrl+B n 切换到 recordmydesktop
命令运行的窗口,按 Ctrl+C 终止录像。然后,使用 mplayer -ao null record_to_gif.ogv -vo jpeg:outdir=./record_to_gif
将录制的视频提取为图片。当然,这时的图片比较多,为了缩减最后制作成的 gif 文件的大小,我们可以删掉其中无关紧要的帧,只留下关键帧。最后使用命令 convert -delay 100 record_to_gif/* record_to_gif.gif
生成 gif 动画。整个过程如下图:
最后生成的 gif 图片一般都比较大,往往超过 20M,如果时间长一点,超过 60M 也是常事儿。而制作成 gif 之前每一帧图片也就 200k 左右而已。我想可能是因为 gif 没有像 jpeg 或 png 这么好的压缩算法吧。gif 对付向量图效果很不错,对付照片和我这样的截图,压缩就有点力不从心了。博客园允许上传的图片每张不能超过 10M,所以,为了减小 gif 文件的体积,我只有用 convert -resize 1024x576 record_to_gif.gif record_to_gif_small.gif
命令将图片变小后再上传了。