最牛B的 Linux Shell 命令(节选)

最牛B的 Linux Shell 命令(节选)

参考
http://wowubuntu.com/linux_shell_1.html

从中节选了自己看的懂的,能用的上的部分,做一个总结。
希望能继续学习,其他的部分。

=== 第一部分 ===
1. sudo 执行上一条命令

sudo !!


解析

(!!) = !-1
相当于 Ctrl-p, Ctrl-a, sudo 

2.以HTTP方式共享当前文件夹的文件
$ python -m SimpleHTTPServer [port]
http://localhost:8000/

以FTP方式共享当前文件夹的文件
$ python -m pyftpdlib -p 8000
ftp://ip:8000/

额外的:用 python 快速开启一个 SMTP 服务
python -m smtpd -n -c DebuggingServer localhost:1025

这是一个用 Python 标准库 smtpd (用 -m smtpd 指定) 实现在简易 SMTP 服务,运行于1025 端口 。

另外三个参数的解释:
-n 参数让 Python 不要进行 setuid ( 改变用户)为 "nobody" ,也就是说直接用你的帐号来运行
-c DebuggingServer 参数是让 Python 运行时在屏幕上输出调试及运行信息localhost:1025 参数则是让 Python 在本地的 1025 端口上开启 SMTP 服务

另外,假如你想让程序运行于标准的 25 的端口上的话,你必须使用 sudo 命令,因为只有 root 才能在 1-1024 端口上开启服务。如下:

sudo python -m smtpd -n -c DebuggingServer localhost:25

3.在以普通用户打开的VIM当中保存一个ROOT用户文件
:w !sudo tee %

4.切换回上一个目录
$ cd -

5.替换上一条命令中的一个短语
$ ^foo^bar^

6.快速备份一个文件
$ cp filename{,.bak}

7.免密码SSH登录主机
ssh-keygen
ssh-copy-id remote-machine
ssh remote-machine
如果你想删掉远程主机上的密钥,直接打开authorized_keys,搜索你的用户名,删除那行,即可。


=== 第二部分 ===
1.用你最喜欢的编辑器来敲命令
command <CTRL-x CTRL-e>

如果你喜欢别的编辑器,可以在~/.bashrc里面放上比如export EDITOR=nano的命令。
另外一个修改命令的方法是使用fc命令(Fix Command),在编辑器里面打开上一句命令。

2.清空或创建一个文件
> file.txt

4.重置终端
reset

9.查看系统中占用端口的进程
netstat -tulnp
Netstat是很常用的用来查看Linux网络系统的工具之一,这个参数可以背下来:
-t: 显示TCP链接信息
-u: 显示UDP链接信息
-l: 显示监听状态的端口
-n: 直接显示ip,不做名称转换
-p: 显示相应的进程PID以及名称(要root权限)
如果要查看关于sockets更详细占用信息等,可以使用lsof工具。

=== 第三部分 ===

3. 实时某个目录下查看最新改动过的文件
watch -d -n 1 'df; ls -FlAt /path'

在使用这条命令时你需要替换其中的 /path 部分,watch 是实时监控工具,-d 参数会高亮显示变化的区域,-n 1 参数表示刷新间隔为 1 秒。

df; ls -FlAt /path 运行了两条命令,df 是输出磁盘使用情况,ls -FlAt 则列出 /path 下面的所有文件。

ls -FlAt 的参数详解:
-F 在文件后面加一个文件符号表示文件类型,共有 */=>@| 这几种类型,* 表示可执行文件,/ 表示目录,= 表示接口( sockets) ,> 表示门, @ 表示符号链接, |表示管道。
-l 以列表方式显示
-A 显示 . 和 ..
-t 根据时间排序文件

8. 执行一条命令但不保存到 history 中
<space> command

这条命令可运行于最新的 Bash shell 里,在其它 shell 中没测试过。

通过在命令行前面添加一个空格,就可以阻止这条命令被保存到 bash history(~/.bash_history) 文件中,这个行为可以通过 $HISTIGNORE shell 变量来控制。我的设置是 HISTIGNORE="&:[ ]*" ,表示不保存重复的命令到 history 中,并且不保存以空格开头的命令行。$HISTIGNORE 中的值以冒号分隔。

9. 显示当前目录中所有子目录的大小
du -h --max-depth=1

- -max-depth=1 参数可以让 du 命令显示当前目录下 1 级子目录的统计信息,当然你也可以把 1 改为 2 ,进一步显示 2 级子目录的统计信息,可以灵活运用。
而 -h 参数则是以Mb 、G 这样的单位来显示大小。
译者注 :在此推荐一个小工具 ncdu ,可以更方便的达到此效果。

=== 第四部分 ===
1.查看ASCII码表
man 7 ascii

很多人初学编程都会接触到ascii码的概念,有时候为了查某个符号的ascii值,可能还得翻箱倒柜找出当年的课本?Linux Manpage里面其实包含了很多类似的实用资料,上述命令就能很详细的方式解释ascii编码,当然这里还有在线版。

man命令的第二个参数是区域码,用来区分索引词的范围,比如printf,在C标准库里面的printf跟bash当中的printf是不同的,前者的查询是man 3 printf,后者是man 1 printf。如果这个区域码省略,就会从1开始搜索,直到找到为止。
命令man man可以看到详细的解释。

manpages里面还有一些有趣而且实用的资料,可能鲜为人知:
man 1 intro - 一篇对从未接触过Linux的用户的简明教程。
man 2 syscalls - 内核系统请求的列表,按内核版本注释分类,系统编程必备。
man 2 select_tut - 关于select()系统请求的教程。
man 3 string - 在头文件内的所有函数。
man 3 stdio - 关于头文件的使用,标准输入/输出库的说明。
man 3 errno - 所有errorno的取值及说明。(C语言内类似其他语言的异常告知机制)
man 4 console_codes - Linux的终端控制码及其使用解释。
man 4 full - 介绍/dev/full这个总是处于"满"状态的磁盘。(对应/dev/null这个总是空的设备)
man 5 proc - 介绍/proc下的文件系统。
man 5 filesystems - 各种Linux文件系统。
第7区里面的资料通常最酷:
man 7 bootparam - 详细解释内核启动参数。
man 7 charsets - 解释各种语言的编码集。(gbk,gb2312等)
man 7 glob - 解释glob文件名管理机制的工作过程。
man 7 hier - 解释Linux文件系统结构各个部分的作用。
man 7 operator - C语言的运算符的列表。
man 7 regex - 介绍正则表达式。
man 7 suffixes - 常见文件后缀名的列表跟解释。
man 7 time - Linux的时钟机制解释。
man 7 units - 数值单位及其数值的解释。
man 7 utf8 - 描述UTF-8编码。
man 7 url - 解释URL、URI、URN等的标准。

2.简易计时器
time read
time是用来计算一个进程在运行到结束过程耗费多少时间的程序,它的输出通常有三项:
$ time ls /opt
...
real 0m0.008s
user 0m0.003s
sys 0m0.007s

6.清空屏幕
<CTRL+l>;

这个跟之前介绍的reset命令重置终端的作用有些类似,其实都只是发送一段控制序列,让终端的显示复位。
还可以这样运行:
tput clear
tput是专门用来控制终端的一个小工具,也挺强大的,详细信息运行man tput查看。

8.列出你最常用的10条命令
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

这行命令组合得很妙: history输出用户了命令历史;awk统计并输出列表;sort排序;head截出前10行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章