牛B的Linux Shell命令分享

发布时间:2019-08-26编辑:脚本学堂
本文分享几个linux下常用且很牛的shell命令,包括cd、cp、echo、reset、net命令、watch等常用命令的高级技巧,有需要的朋友参考下吧。

本节内容:
linux shell命令

1,以HTTP方式共享当前文件夹的文件
 

复制代码 代码示例:
$ python -m SimpleHTTPServer
 

这命令启动了Python的SimpleHTTPServer模块,考虑到Python在绝大多数的Linux发行版当中都默认安装,最简单的跨平台传文件的方法。
命令执行后将在本机8000端口开放HTTP服务,在其他能访问本机的机器的浏览器打开ttp://ip:8000即打开一个目录列表,点击即可下载。

2,cd命令切换回上一个目录
 

复制代码 代码示例:
 $ cd -

横杆-代表上一个目录的路径。
实际上cd -就是cd $OLDPWD的简写,bash的固定变量$OLDPWD总保存着之前一个目录的路径。
相对地,$PWD总保存着当前目录的路径。这些变量在编写shell脚本时候相当有用。

3,cp命令快速备份一个文件
 

复制代码 代码示例:
$ cp filename{,.bak}

此命令把filename文件拷贝成filename.bak。
其原理就在于bash对大括号的展开操作,filename{,.bak}这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。

4,大括号在bash里面是一个排列的意义,可以试试这个:
 

复制代码 代码示例:
    $ echo {a,b,c}{a,b,c}{a,b,c}
将输出三个集合的全排列:
aaa aab aac aba abb abc aca acb acc
baa bab bac bba bbb bbc bca bcb bcc
caa cab cac cba cbb cbc cca ccb ccc

5,使用最喜欢的编辑器来敲命令
command <CTRL-x CTRL-e>
在已经敲完的命令后按 <CTRL-x CTRL-e> ,会打开一个你指定的编辑器(比如vim,通过环境变量$EDITOR指定),里面就是你刚输入的命令,然后爱怎么编辑就怎么编辑吧,特别是那些参数异常复杂的程序,比如mencoder/ffmpeg,一个命令动辄3、4行的,要修改其中的参数,这个方法最合适不过了,保存退出后自动执行这个程序。
实际上这是readline库的功能,在默认情况下,bash使用的是emacs模式的命令行操作方式, <CTRL-x CTRL-e>是调用这个功能的一个绑定。如果你习惯使用vi模式,按 <ESC v> 可以实现同样功能。
如果你喜欢别的编辑器,可以在~/.bashrc里面放上比如export EDITOR=nano的命令。

6,reset命令重置终端
 reset
如果不小心cat了某个二进制文件,很可能整个终端就傻掉了,可能不会换行,没法回显,大堆乱码之类的,这时候敲入reset回车,不管命令有没有显示,就能回复正常了。

7,mount命令映射一个内存目录
mount -t tmpfs -o size=1024m tmpfs /mnt/ram
这个命令开了一块1G内存来当目录用。不过放心,如果里面没文件,是不会占用内存的,用多少占多少。
不过一般来说没必要手动挂载,因为多数发行版都会在fstab内预留了一个内存目录,挂载在/dev/shm,直接使用即可;

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

9,实时某个目录下查看最新改动过的文件
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 根据时间排序文件

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

11,ps命令显示消耗内存最多的 10 个运行中的进程,以内存使用量排序
    ps aux | sort -nk +4 | tail
显然这并不是最好的方法,但它确实用起还不错。
这是一个典型的管道应用,通过 ps aux 来输出到 sort 命令,并用 sort 排序列出 4 栏,再进一步转到 tail 命令,最终输出 10 行显示使用内存最多的进程情况。
假如想要发现哪个进程使用了大量内存的话,我通常会使用 htop 或 top 而非 ps 。

12,用 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

13,查看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等的标准。

14,清空屏幕=clear
<CTRL+l>;
这个跟之前介绍的reset命令重置终端的作用有些类似,其实都只是发送一段控制序列,让终端的显示复位。