终端技艺
将sh的链接属性改为bash
遇到个情况:打开了好多终端,结果使用vim打开文件的时候将会出现重复打开的现象,结果不知道在哪个终端中打开了,方法:
根据vim报出的进程号,使用ps aux | grep 进程号 获取pts编号
1、tty 命令获取终端号
2、在几个终端下运行 who am i 可以查看相应终端的终端号
3、直接: write username /dev/pts/3 CR
xxxxxxxxxxxxx
查看哪个终端下出现了消息:xxxxxxxxxxx
附:
禁止别人把信息显示在我的终端 mesg n 允许别人把信息显示在我的终端 mesg y wall 向所有人发送命令: echo "hello,This is a message" | wall
终端使用
Shift+Ctrl+T:新建标签页 Shift+Ctrl+W:关闭标签页 Ctrl+PageUp:前一标签页 Ctrl+PageDown:后一标签页 Shift+Ctrl+PageUp:标签页左移 Shift+Ctrl+PageDown:标签页右移 Alt+1:切换到标签页1 Alt+2:切换到标签页2 Alt+3:切换到标签页3 Shift+Ctrl+N:新建窗口 Shift+Ctrl+Q:关闭终端 终端中的复制/粘贴: Shift+Ctrl+C:复制 Shift+Ctrl+V:粘贴 终端改变大小: F11:全屏 Ctrl+plus:放大 Ctrl+minus:减小 Ctrl+0:原始大小
man readline 使用滚动条,其一般是在终端窗口的右边显示。 按下 Shift+Page Up,Shift+Page Down,Shift+Home或 Shift+End组合键。 在终端窗口中,您可以回滚的行数是由编辑配置文件对话框的滚动标签中的回滚设置决定的。您也可以通过按 Control+Shift+上方向键 或 Control+Shift+下方向键 一次向上或向下滚动一行。 [Ctrl + a] 跳转至命令行首 Ahead of line [Ctrl + e] 跳转至命令行尾 End of line [Ctrl + f] 向前跳转一个字符 jump Forward one character [Ctrl + b] 向后跳转一个字符 jump Backward one character [Ctrl + w] 向前删除一个字,用来对付刚刚输入的错误字很有用(左边为前) [Alt + d] 向后删除一个字(右边为后) [Ctrl + u] 从光标当前位置删除所有字符至行首 [Ctrl + d] 删除光标当前位置的字符,一直按,将把字符删到行尾 [Ctrl + y] 粘贴最后一个被删除的字 以下参考自:http://ahei.info/bash.htm Ctrl + / undo Ctrl + t 交换当前光标下的字符和光标前面的一个字符,交换后,光标向后移动一个字符 Alt + t 交换当前光标所在单词和光标前面的一个单词,交换后,光标向后移动一个单词 Alt + l 当前光标所在单词变成小写 Alt + u 当前光标所在单词编程大写 Alt + c 针对从当前光标开始,且在一个单词内的字符:将当前光标下的字符变成大写,其他变成小写
进程替换:Process Substitution
比较两个目录dir1和dir2中的文件有什么不同: diff <(ls dir1) <(ls dir2) 上面的这个语法<(command)就是进程替换. <(command)表示把command的输出生成一个临时文件, 并把这个文件名作为另外一个命令的参数. 对于上面的命令, 就是把”ls dir1″命令的输出生成一个临时文件, 并把临时文件名做为diff命令的第一个参数. wget -q -O >(cat) http://baidu.com wget命令会把下载后的文件保存到文件中去, 但是我们可以用上面的命令不让它保存到文件中去, 而是显示出来. wget的”-O”选项后本来应该是一个文件名的参数, 但是我们现在用>(cat)代替, 表示wget下载下来的内容放到一个临时文件中, 然后把这个临时文件名再传给>()里面的cat命令.
使用一个命令来定义目录树
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a} 注意逗号和下一字符之间不要有空格
目录导航
使用 pushd 和 popd 管理目录导航 pushd 和 popd 命令创建一个虚拟目录堆栈,pushd 命令用来更改您的当前目录并将其存储在堆栈中,而 popd 命令用来从堆栈的顶部移除目录并使您返回该位置。可以使用 dirs 命令来显示当前目录堆栈,而不会压入或弹出新目录。 pushd 和 popd 命令还支持使用参数处理目录堆栈。使用 +n 或 n 参数,其中 n 是一个数字,您可以向左或向右移动堆栈, ryoma@smartpc:Downloads$ dirs ~/Downloads ryoma@smartpc:Downloads$ popd bash: popd: directory stack empty ryoma@smartpc:Downloads$ pushd /etc /etc ~/Downloads ryoma@smartpc:etc$ pushd +1 ~/Downloads /etc ryoma@smartpc:Downloads$ pushd +1 /etc ~/Downloads ryoma@smartpc:etc$ pushd -1 /etc ~/Downloads ryoma@smartpc:etc$ popd ~/Downloads ryoma@smartpc:Downloads$ dirs ~/Downloads ryoma@smartpc:Downloads$
subshell命令组
1、在 Subshell 中运行命令列表 ~ $ ( cd tmp/a/b/c/ || mkdir p tmp/a/b/c && \ > VAR=$PWD; cd ~; tar xvf C $VAR archive.tar ) \ > | mailx admin S "Archive contents" 在此示例中,该存档的内容将提取到 tmp/a/b/c/ 目录中,同时将分组命令的输出(包括所提取文件的列表)通过邮件发送到地址 admin。 当您在命令列表中重新定义环境变量,并且您不希望将那些定义应用于当前 Shell 时,使用 Subshell 更可取。 2、在当前shell中运行命令列表 ~ $ { cp ${VAR}a . && chown R guest.guest a && \ > tar cvf newarchive.tar a; } | mailx admin S "New archive" 将命令列表用大括号 ({}) 括起来,以在当前 Shell 中运行。确保在括号与实际命令之间包括空格,否则 Shell 可能无法正确解释括号。此外,还要确保列表中 的最后一个命令以分号结尾,如以下示例所示:
反斜杠‘\',用于命令输入
~ $ cd tmp/a/b/c || \ > mkdir -p tmp/a/b/c && \ > tar xvf ~/archive.tar -C tmp/a/b/c
以下参考自:http://coolshell.cn/articles/8619.html
22、convert input.png -gravity NorthWest -background transparent -extent 720x200 output.png
改变一下图片的大小尺寸。
24、得到某个时间的timestamp date -d20140111 +%s
从timestamp得到时间 date -d@1389369600
alias ..="cd .." alias ..2="cd ../.." alias ..3="cd http://www.cnblogs.com/.." alias ..4="cd http://www.cnblogs.com/../.." alias ..5="cd http://www.cnblogs.com/http://www.cnblogs.com/.."