wowubuntu.com的“最牛B的 Linux Shell 命令 系列连载”介绍了许多牛B的命令,下面我又从中整理了一些牛B中的牛B的命令:
1.以SUDO运行上条命令 $ sudo !! 2. 以HTTP方式共享当前文件夹的文件 $ python -m SimpleHTTPServer 3. 快速备份一个文件 $ cp filename{,.bak} 这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于bash对大括号的展开操作,filename{,.bak}这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。 大括号在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 4. 免密码SSH登录主机 $ ssh-copy-id remote-machine 这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys内,这样下次使用ssh登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码了。前提是你当前用户有生成了公钥,默认是没有的,先执行ssh-keygen试试吧! 这个命令如果用手工完成,是这样的: your-machine$ scp ~/.ssh/identity.pub remote-machine: your-machine$ ssh remote-machine remote-machine$ cat identity.pub >> ~/.ssh/authorized_keys 如果你想删掉远程主机上的密钥,直接打开authorized_keys,搜索你的用户名,删除那行,即可。 5. 抓取LINUX桌面的视频 $ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg 我们在一些视频网站上看到别人的3D桌面怎么怎么酷的视频,通常就是这么来的,ffmpeg可以直接解码X11的图形,并转换到相应输出格式。 ffmpeg的通常用法是,根据一堆参数,输出一个文件,输出文件通常放最后,下面解析下几个参数: -f x11grab 指定输入类型。因为x11的缓冲区不是普通的视频文件可以侦测格式,必须指定后ffmpeg才知道如何获得输入。 -s wxga 设置抓取区域的大小。wxga是1366*768的标准说法,也可以换成-s 800×600的写法。 -r 25 设置帧率,即每秒抓取的画面数。 -i :0.0 设置输入源,本地X默认在0.0 -sameq 保持跟输入流一样的图像质量,以用来后期处理。 6. 实时某个目录下查看最新改动过的文件 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 根据时间排序文件 7. 通过 SSH 挂载远程主机上的文件夹 sshfs name@server:/path/to/folder /path/to/mount/point 这条命令可以让你通过 SSH 加载远程主机上的文件系统为本地磁盘,前提是你需要安装 FUSE 及 sshfs 这两个软件。 译者注:关于 sshfs 实际上我之前写过一篇文章介绍过,详见”在 Ubuntu 上使用 sshfs 映射远程 ssh 文件系统为本地磁盘“。 卸载的话使用 fusermount 命令: fusermount -u /path/to/mount/point 8. 显示当前目录中所有子目录的大小 du -h --max-depth=1 9. 查看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等的标准。 10. 远程关掉一台WINDOWS机器 net rpc shutdown -I IP_ADDRESS -U username%password Windows平台上的net命令是比较强大的,因为其后台是一个RPC类的系统服务,大家应该看过win下用net use file:///C|/ip/ipc%24 *这样一个命令建立IPC空连接,入侵主机的事情。 Linux下的net命令是samba组件的程序,通常包含在smbclient内,可以跟windows主机的文件、打印机共享等服务进行通讯,但是也支持rpc命令。 上述命令就是在远程Windows主机上执行了shutdown命令。当然这不一定成功,关系到win主机上面的安全设置。net命令能够控制到win主机就是了。 11. 利用中间管道嵌套使用SSH ssh -t host_A ssh host_B 如果目标机器host_B处于比较复杂的网络环境,本机无法直接访问,但另外一台host_A能够访问到host_B,而且也能被本机访问到,那上述命令就解决了方便登录host_B的问题。 但理论上这个过程是可以无限嵌套的,比如: ssh -t host1 ssh -t host2 ssh -t host3 ssh -t host4 … |