当前位置: > shell编程 >

牛B的Linux Shell命令分享

时间:2014-11-29 05:17来源:linux.it.net.cn 作者:IT

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 
在已经敲完的命令后按 ,会打开一个你指定的编辑器(比如vim,通过环境变量$EDITOR指定),里面就是你刚输入的命令,然后爱怎么编辑就怎么编辑吧,特别是那些参数异常复杂的程序,比如mencoder/ffmpeg,一个命令动辄3、4行的,要修改其中的参数,这个方法最合适不过了,保存退出后自动执行这个程序。
实际上这是readline库的功能,在默认情况下,bash使用的是emacs模式的命令行操作方式, 是调用这个功能的一个绑定。如果你习惯使用vi模式,按 可以实现同样功能。
如果你喜欢别的编辑器,可以在~/.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
;
这个跟之前介绍的reset命令重置终端的作用有些类似,其实都只是发送一段控制序列,让终端的显示复位。

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容