Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户通常掌握大约50-60个命令来处理每日的任务。Linux命令和它们的转换对于Linux用户、Shell脚本程序员和管理员来讲是最有价值的宝藏。有些Linux命令不多人知道,但无论你是新手仍是高级用户,它们都很是方便有用。html 少有人知道的Linux命令python 这篇文章的目的是介绍一些少有人知的Linux命令,它们必定会高效地帮你管理你的桌面/服务器。linux |
![]() Ley
|
1. sudo !!命令没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不须要重写整个命令,仅仅输入'!!'就能够抓取最后的命令。 shell
2. python命令下面的命令生产一个经过HTTP显示文件夹结构树的简单网页,能够经过浏览器在端口8000访问,直到发出中断信号。 apache
![]() |
![]() 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
|
这个命令显示当前运行的全部进程及其相关的子进程,输出的是相似‘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}
|
高效使用命令行的首要原则就是要尽可能避免非命令行的干扰,什么意思呢?就是说一但开启了一个控制台窗口,就尽可能不要再在桌面上切换来切换去了,不要一下子 被别的窗口挡住控制台,一下子又让别的窗口破坏了控制台的背景,最好是把控制台最大化或全屏,最好连鼠标都不要用。只有这样,才能达到比较高的效率。可是 在实际工做中,咱们又常常须要同时在多个控制台中进行工做,例如:在一个控制台中运行录制屏幕的命令,在另一个控制台中工做,或者在一个控制台中工做, 在另一个控制台中阅读文档。若是既想在多个控制台中工做,又不想一大堆窗口挡来挡去、换来换去的话,就能够考虑试试 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个到最后一个单词表明命令的参数;第三部分决定了对选取的单词如何修饰。下面我列出完整表格:
表格1、引用哪一条历史命令:
操做符 | 功能 |
---|---|
! | 全部对历史命令的引用都以 ! 开始,除了 ^oldstring^newstring^ 形式的快速替换 |
!n | 引用第 n 条历史命令 |
!-n | 引用倒数第 n 条历史命令 |
!! | 引用上一条命令,等于 !-1 |
!string | 逆向搜索历史记录,第一条以 string 开头的命令 |
!?string[?] | 逆向搜索历史记录,第一条包含 string 的命令 |
^oldstring^newstring^ | 对上一条命令进行快速替换,将 oldstring 替换为 newstring |
!# | 引用当前输入的命令 |
表格2、选取哪个单词:
操做符 | 功能 |
---|---|
0 | 第0个单词,在 shell 中就是命令自己 |
n | 第n个单词 |
^ | 第1个单词,使用 ^ 时能够省略前面的冒号 |
$ | 最后一个单词,使用 $ 是能够省略前面的冒号 |
% | 和 ?string? 匹配的单词,能够省略前面的冒号 |
x-y | 从第 x 个单词到第 y 个单词,-y 表明 0-y |
* | 除第 0 个单词外的全部单词,等于 1-$ |
x* | 从第 x 个单词到最后一个单词,等于 x-$,能够省略前面的冒号 |
x- | 从第 x 个单词到倒数第二个单词 |
表格3、对选取的单词作什么修饰:
操做符 | 功能 |
---|---|
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 动画图片的过程。我用到的软件有 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
命令将图片变小后再上传了。