Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)
vi 文件
:set nu
日常工作问题解决:centos/linux系统如何检测端口是否打开
1、telnet命令
格式: telnet ip 端口号
[root@centos7-127 ~]# telnet 192.168.87.128 22
Trying 192.168.87.128...
Connected to 192.168.87.128. # 表示端口已经开放
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
[root@centos7-127 ~]# telnet 192.168.87.128 8008
Trying 192.168.87.128...
telnet: connect to address 192.168.87.128: Connection refused # 表示端口未开放
2、nmap命令
格式: nmap ip -p 端口号
Starting Nmap 6.40 ( http://nmap.org ) at 2019-09-19 10:34 CST
Nmap scan report for centos7-128.cn (192.168.87.128)
Host is up (0.00028s latency). # 主机可通
PORT STATE SERVICE
80/tcp open http # 端口开放
MAC Address: 00:0C:29:0C:AE:01 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
[root@centos7-127 ~]# nmap 192.168.87.128 -p 8080
Starting Nmap 6.40 ( http://nmap.org ) at 2019-09-19 10:34 CST
Nmap scan report for centos7-128.cn (192.168.87.128)
Host is up (0.00035s latency). # 主机可通
PORT STATE SERVICE
8080/tcp closed http-proxy # 端口关闭
MAC Address: 00:0C:29:0C:AE:01 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
3、通过nc命令检查
命令格式:nc -v ip 端口
[root@centos7-127 ~]# nc -v 192.168.87.128 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.87.128:80. # 端口开放
^C
[root@centos7-127 ~]# nc -v 192.168.87.128 8080
Ncat: Version 7.50 ( https://nmap.org/ncat ) # 端口关闭
Ncat: Connection refused.
4、使用nc测试端口是否可用
需要测试端口的服务器启动nc服务监听端口
格式: nc -lp 端口
[root@centos7-128 ~]# nc -lp 8081
adfadfjla
测试的服务器使用nc命令连接,然后发送信息
格式: nc ip 端口
[root@centos7-128 ~]# nc 192.168.87.128 8081
adfadfjla
能收到信息,表示端口可用
- lsof: 列出所有打开的文件。举例:'lsof -p 456,123' 列出进程456和123所有打开的文件。'lsof -i 6' 列出所有IPv6协议的网络文件。
- nl: 将输出的每一行加上行号。例如:'cat 1.txt | nl',输出1.txt的文件并加上行号
- CTRL+a 和 CTRL+e: 到命令行首(ctrl+a)和行末(ctrl+e),在小键盘上特别有用,不用费心思找HOME和END键
- ALT+.:列出上一个命令的最后一个参数。这个命令我最常用。例如'mkdir mydir',然后'cd ALT+.'。很好用
- CTRL+R: 这个也很常用,搜索命令历史相当方便。
- grep/sed/cut/tr/: 这几个命令的组合能够很方便的解析很多文件,就不一一举例了。个人不常用awk,觉得'sed'就够用了。
- find/xargs: 这个我也很常用,在一堆文件中查找某个特定字符串。这个常常和6中列出命令组合使用。
- ls -d */: 这个命令仅列出当前目录下所有的一级子目录,不包括'.'开头的隐藏目录,如果想列出隐藏目录,使用'ls -d .*'。'find -type d -maxdepth 1'也有类似的效果。
- id: 列出本用户所属的所有用户组。
- Brace Expansion:已经有人说过了,我补充完整一点。"ls /usr/{,local}/bin",列出"/usr/bin"和"/usr/local/bin"下所有文件。这个机制称为"Brace Expansion",再举个例子:"diff .bashrc{,.backup}",显示.bashrc和.bashrc.backup两个文件之间的差异。
- column: 也有人提过,放在这里算总结吧,一个常用的语法是'mount | column -t',或者 'df | column -t',让输出更加容易阅读。
- ssh/sshfs/scp: 善用ssh相关工具让你的远程工作起来更加方便。'ssh -X'打开X-forward功能。'ssh-keygen'和'ssh-copy-id'让你省去每次输入密码的麻烦。ssh root@10.1.1.1 “远程命令"让你的命令远程执行。'sshfs root@10.1.1.1:/var/ /home/root/var' 将远程目录直接mount到本地目录。"scp root@10.1.1.1:.vimrc ."将远程服务器中root用户HOME目录下的.vimrc文件拷贝到本地。
- 使用'<'号读取文件到标准输入:对于所有接受标准输入的命令,使用'<文件名'可以将某个文件送入标准输入,并且可以出现在命令的任何位置,例如:
"cat filename"
"<filename cat"
"cat <filename"
----更新----- 这里补充说明一下,上面的几个技巧中所有命令行编辑的快捷键(CTRL+r CTR+a, CTRL+e)是由GNU readline库定义的,'man readline'可以得到更详细的说明以及更多的快捷键定义。但是由于和你使用的TERMINAL类型可能发生各种冲突,所以不是所有的快捷键都能够很好的工作。
-----更新2--- 类似问题的链接 有哪些不常见但很有用处的 Unix 命令?
-----更新3---- Top Ten One-Liners from CommandLineFu Explained 上面这篇文章总结了不少有用的命令。这个链接是四篇文章组成的一个系列,值得一看。
另外,readline的模式问题,BASH缺省的是emac模式(set -o emacs),通过'set -o vi'可以切换到vi模式,同一个网站上也有两篇很好的文章介绍操作技巧,值得一看。 BASH VI 模式 Working Productively in Bash's Vi Command Line Editing Mode (with Cheat Sheet) BASH EMAC 模式 Bash Emacs Editing Mode Cheat Sheet
---更新4---- 碰巧看见All commands上有一个使用lsof的实用技巧(Keep a copy of the raw Youtube FLV,MP4,etc stored in /tmp/),借这个地方记录一下:
现在浏览器的flash插件在播放在线视频的时候,常常将下载的视频放在/tmp目录下,然后执行unlink删除文件,但实际上文件并没有删除,这些被unlink的文件其实可以通过/proc找到。通过lsof找出插件的进程号,然后在/proc/插件进程号/fd/下找到当前打开文件的链接,然后就可以直接拷贝出来,在我的ArchLinux下firefox是这样的:
首先保证firefox正在播放flash视频,例如打开youku,随便播放一个视频,按暂停,执行下面的步骤:
- lsof -n -P | grep FlashXX:输出当前flash插件打开的所有文件,例如:"plugin-co 30427 30428 dsun 15u REG 0,17 8790980 163285 /tmp/FlashXXRxAIDF (deleted)"
- 30427即flash插件进程号,执行‘ls -l /proc/30427/fd/ | grep /tmp/FlashXXRxAIDF',输出 "lrwx------ 1 dsun dsun 64 Mar 27 13:31 15-> /tmp/FlashXXRxAIDF (deleted)"
- 拷贝文件:'cp /proc/30427/fd/15 15.flv'。
for h in `find /proc/*/fd -ilname "/tmp/Flash*" 2>/dev/null`; do cp $h `basename $h`.flv; done
又看到一个我之前不知道的用法,用backslash执行命令,可以取消alias的效果. http://tldp.org/LDP/GNU-Linux-Tools-Summary/html/general-shell-tips.html
\ (backslash)
The backslash escape character can be used before a shell command to override any aliases.
For example if rm was made into an alias for rm -i then typing “rm” would actually run rm -i.
However, typing \rm lets the shell ignore the alias and just run rm (its runs exactly what you type), this way it won't confirm if you want to delete things.
nc,可以在没有ssh的情况下传输文件,配合tar真心好用
Quartz Lee,Do anything for fun.
显示全部
find xxx -print0 xargs -0 或 xargs --null 如果你被find和xargs坑过,-print0和--null你定会让你感到亲切的。
read -a 将读取到的元素存入数组 或在循环里逐个地存入数组:
上例中的 -r 和 -d 选项以及REPLY变量都很有趣。musics=() while read -r -d $'\0'; do musics+=("$REPLY") done < <(find $HOME/Music -type f -print0)
引号,很容易被忽略,但是对于Shell来说是极其重要的部分。单引号用于阻止Shell解释其中的内容,双引号用于保护空格。
传统的UNIX管道模式是“一个输入,一个输出”。用函数的观点来看就是只允许一个参数的函数调用,其弊端王垠也提到过。不过现代的Shell已经有了变通的方法了。 例如: 使awk获取多个输入:
awk '...' <(generate_data) <(another_generate_data) ...将数据传给多个命令处理:
generate_data | tee >(sort | uniq > sorted_data) >(nl > with_line_number) > raw_data变量$-: [ "$-" = "*i*" ] 可以判断是否以交互式运行程序
变量$_: 类似于Python交互式环境中的 _(下划线),但没有你想象的好用。
内建命令trap: 可以捕捉信号,Google+上有人贴过使用trap恶搞的脚本,不过它的正式用处应该是清理临时文件,例如:
trap 'rm -f $temp_file' EXIT
显示全部
显示全部
$ sudo !!2. 在以普通用户打开的 VIM 当中保存一个 ROOT 用户文件:
:w !sudo tee %3. 切换回上一个目录:
$ cd -4. 替换上一条命令中的一个短语(仅替换第一个):
$ ^foo^bar^5. 快速备份一个文件:
$ cp filename{,.bak}引自: Top Ten One-Liners from CommandLineFu Explained http://www.catonmat.net/blog/top-ten-one-liners-from-commandlinefu-explained/
牛杰,阿里云专家、资深域名行业从业者、技术工…
- 很酷
- 很冷门
- 很少用
- 很有用-这个。。。自己判断吧
赞同
![](https://pic1.zhimg.com/a17abf4e6c43a7427bc1db48113a06c8_xld.png)
显示全部
![](https://pic1.zhimg.com/a17abf4e6c43a7427bc1db48113a06c8_b.png)
![](https://pic3.zhimg.com/69999bc00d6dcf8ed7c35e07cb30fd0e_b.png)
显示全部
- ctr+a回到首->你记忆成a是字母开始
- ctr+e回到末->e是end的意思。
- ctr+r历史命令检索->research.[ctrl+shift+r也可以试试]
- 另外还有诸如:
- ctrl+shift+v,黏贴,这样可以避免很多人使用鼠标右键~
- ctr+p返回上一条命令->pre
- ctr+n返回下一条命令->next
- ctrl+l->类似clear命令的 效果
- 其他ctr+d/c/z什么的不用提及吧?
- 使用 !! 执行上一条命令,常用的时候就是sudo !!
- 使用 !foo 执行以 foo 开头的命令
- 使用 !?foo 执行包含 foo 的命令
- 通过 !$ 得到上一条命令的最后一位参数[Alt +.]
- !^ 得到上一条命令的第一个参数[Ctrl + Alt + y]
- 使用 !n 执行第 n 个命令,这个一般是在我ctlr+r没检索到,会用history来看.然后就.
- 使用 !-n 执行倒数第 n 个命令,同上.
- 使用 !# 引用当前行,这个我基本不用,但是讲到!了,我就顺便说说.比如cp,mv的时候就容易用到它,mv fuck !#:1.bak 这里的1是一个word specifier.我不常用,因为一般我都直接tab补全的.有兴趣的可以网上看看资料
- !:[n-m] 得到上一条命令第 n -m个参数.这么说把,当!:N表示你要第n个,当你冒号之后给的是2个数字范围,那么就是去一个范围的参数,当给出!:n*的时候,就是第n个到最后一个,当!*这种就是所有参数.
- 在!#我提到过word specifier,现在补充比如:!$:h->选取参数的开头部分.这个我也比较常用.
- 还有:h:e:t等等,自己看吧.写的太多了.
- alias这种命令属于常用的.$()和``[反引号]这些,大家都懂撒.
- 使用^ 删除错误.比如当你执行ls -l 的时候,你输入lsss -l,这时候可以执行^ss,删除2个s,删除是从左边开始寻找然后删除,比如lsds ->你^s的时候,命令就换成了lds了.
- 使用 ^old^new 替换. 不解释
网站推荐的话:explainshell.com
mike deng,哈哈!
显示全部
watch : 每隔一段时间监视某个命令的输出 split : 分割文件 comm : 得到两个文件中相同的行 join : 像 sql 的 join 语句一样操作文本 cut : 以某个分隔符提取某一列
参考: http://www.ibm.com/developerworks/aix/library/au-unixtext/index.html
显示全部
题叶,Ubutnu12.04 && Gnome3
赞同
$ bc