Article
让敲Shell命令高效起来
在刚上班的时刻,做过程序的部署工作,后面尽管工作中直接接触的机会很少。 但是一直对shell很敬(很牛)畏(太强太多),第一使用起来确实不是看几本书就能用好的,需要经常持久的使用,第二嘛命令太多个不用一段时间基本就忘记了。
来到新公司后,主要是后台代码的开发。尽管和部署挂不上什么关系,但再次遇到总有个想头-原来使用过去查查,算是自己使用linux过程中的一点总结。
# 记住历史,温故而知新
如果说是新人,可以通过历史学习前辈使用的命令。 作为维护人员,可以记录操作的命令,修改原有命令的部分再执行。
| 命令 | 解释 |
|---|---|
history |
|
!! |
执行上一条命令 |
!blah |
执行最近的以 blah 开头的命令,如 !ls |
!blah:p |
仅打印输出,而不执行 |
!$ |
上一条命令的最后一个参数,与 Alt + . 相同 |
!$:p |
打印输出 !$ 的内容 |
!* |
上一条命令的所有参数 |
!*:p |
打印输出 !* 的内容 |
^blah |
删除上一条命令中的 blah |
^blah^foo |
将上一条命令中的 blah 替换为 foo |
^blah^foo^ |
将上一条命令中所有的 blah 都替换为 foo |
fc |
打开编辑器(vim)编辑上一条命令 |
fc 123 |
编辑命令历史中编号为123的命令 |
fc 123 130 |
编辑命令历史中123-130的八条命令,退出后依次执行 |
fc ls |
编辑最后一条以ls开头的命令 |
fc -s ls=cat ls |
将最后一条以ls开头的命令中的ls替换成cat,然后执行 |
mkdir mmm
cd $*
参考 bash命令行历史的用法
# 快捷键
# 快捷方式
当遇到一串很长的路径时,如果每次都输入,尽管有Tab的辅助,但也不是一件烦心的事情。 这时,我们可以根据增加快捷方式/重定位为我们的工作提高效率,减少重复无谓的工作。
alias datanodelog=“less ~/hadoop/logs/hadoop-Winseliu-datanode-WINSE.log” alias jobtrackerlog=“less ~/hadoop/logs/hadoop-Winseliu-jobtracker-WINSE.log” alias tasktrackerlog=“less ~/hadoop/logs/hadoop-Winseliu-tasktracker-WINSE.log”
ln -s /cygdrive/d/groovy-1.8.4/ groovylink
当你去看linux的bash脚本时,你会发现发现ll的命令其实是ls -l的alias的别名而已。 在工作中如果发现很多类似重复的操作,赶紧的把alias用起来的吧!
# 快速定位
| 快捷 | 解释 |
|---|---|
| 编辑命令 | |
| Ctrl + a | 移到命令行首 |
| Ctrl + e | 移到命令行尾 |
| Ctrl + f | 按字符前移(右向) |
| Ctrl + b | 按字符后移(左向) |
| Alt + f | 按单词前移(右向) |
| Alt + b | 按单词后移(左向) |
| Ctrl + xx | 在命令行首和光标之间移动 |
| Ctrl + u | 从光标处删除至命令行首 |
| Ctrl + k | 从光标处删除至命令行尾 |
| Ctrl + w | 从光标处删除至字首 |
| Alt + d | 从光标处删除至字尾 |
| Ctrl + d | 删除光标处的字符 |
| Ctrl + h | 删除光标前的字符 |
| Ctrl + y | 粘贴至光标后 |
| Alt + c | 从光标处更改为首字母大写的单词 |
| Alt + u | 从光标处更改为全部大写的单词 |
| Alt + l | 从光标处更改为全部小写的单词 |
| Ctrl + t | 交换光标处和之前的字符 |
| Alt + t | 交换光标处和之前的单词 |
| Alt + Backspace | 与 Ctrl + w 相同类似,分隔符有些差别 |
| 重新执行命令 | |
| Ctrl + r | 逆向搜索命令历史 |
| Ctrl + g | 从历史搜索模式退出 |
| Ctrl + p | 历史中的上一条命令,感觉不用那么麻烦吧,直接方向键就行了啊! |
| 控制命令 | |
| Ctrl + l | 清屏 |
| Ctrl + o | 执行当前命令,并选择上一条命令 |
| Ctrl + s | 阻止屏幕输出 |
| Ctrl + q | 允许屏幕输出 |
| Ctrl + c | 终止命令 |
| Ctrl + z | 挂起命令 |
# 使用趁手的工具
看到同事使用WinScp定位到目录上传文件,然后使用Putty进行命令操作,那个辛苦啊,甚是麻烦! SSH Secure Shell则集成了Putty和WinScp的功能。 更甚者还是用Xmanger的图形化界面: Windows连接Linux的常用工具 , Windows下如何远程连接 Linux
推荐我最爱的SSH工具: SecureCRT
SecureCRT不但能满足shell命令,能保存基本上全部的操作过程(Putty操作则和Linux上的终端效果一样)。
- 选择复制,右键粘贴的功能也相当高效。
- 基于zmoden的lrzsz命令能实现文件的上传和下载功能。
- 记住密码这功能不在话下。
- 克隆到新窗口中,实现多视图同时编辑。
alias rz="rz -e"
看到网上说的Xshell功能和SecureCRT类似,还支持颜色,并且是开源的没有版权问题!。Xshell讨论
配合screen命令更好用: https://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html
# 一些点
- /etc/profile.d/jdk.sh
# 使用具体案例
- 批量改名加后缀:
ls -1 | xargs -i mv {}{,.old}
还原:
$ ls -1 | while read line ; do mv "$line" "${line%.*}" ; done
- 花括号展开
可能最奇怪的展开是花括号展开。通过它,你可以从一个包含花括号的模式中 创建多个文本字符串。这是一个例子:
[me@linuxbox ~]$ echo Front-{A,B,C}-Back
[me@linuxbox ~]$ echo Number_{1..5}
[me@linuxbox ~]$ echo {Z..A}
[me@linuxbox ~]$ echo a{A{1,2},B{3,4}}b
[me@linuxbox Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
- bash提取
file=/dir1/dir2/dir3/my.file.txt
我们可以用 ${ } 分别替换获得不同的值:
${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt
${file##*.}:拿掉最后一个 . 及其左边的字符串:txt
${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
- # 是去掉左边(在鉴盘上 # 在 $ 之左边)
- % 是去掉右边(在鉴盘上 % 在 $ 之右边)
- 单一符号是最小匹配﹔两个符号是最大匹配。
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2
我们也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my
利用 ${ } 还可针对不同的变数状态赋值(沒设定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有设定,則使用 my.file.txt 作传回值。(空值及非空值時不作处理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作处理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作处理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作处理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作处理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為my.file.txt 。 (非空值時不作处理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作处理)
${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理)
${#var} 可计算出变量值的长度:
${#file} 可得到 27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节
# SSH登录
一般ROOT都是禁用远程登录的,但是内网开放其实没所谓。可以通过 匹配特定的规则 开放,或者通过其他方式登录 PermitRootLogin without-password
http://serverfault.com/questions/189574/allow-root-login-from-one-ip-address-only
# Authentication:
...
PermitRootLogin no
...
# Example of overriding settings on a per-user basis
Match Address 192.168.0.214
PermitRootLogin yes
# 加快SSH登录:multiplexing
controlpersist 多个连接到相同主机的SSH会话将会共享相同的TCP连接。这样,接口
~/.ssh/config
Host myserver.example.com
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist 10m
# 其他参数
User soulteary
Hostname 10.11.12.240
Port 22
IdentityFile ~/.ssh/keys/2022
ControlPath ~/.ssh/home-xh-%r@%h:%p
ControlPersist yes
TCPKeepAlive yes
Compression yes
ForwardAgent yes
可以使用-O check 以及 -O exit参数类中断主连接。
# Screen
无惧网络风险,时时交互式的nohup
screen
screen ls
screen -r $PID
screen -d -r $PID
screen -X -S [session # you want to kill] quit/kill
screen -ls | grep detached | cut -d. -f1 | awk '{print $1}' | xargs kill
pkill screen
Once connected to the session press Ctrl + A then type :quit
//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit
screen -wipe
Should clean all dead screen sessions.
# VI
ctrl+f 向前翻页
ctrl+b 向后翻页
ctrl+d 向前翻半页
ctrl+u 向后翻半页
# tree
# sudo
echo "`whoami` ALL=(ALL) NOPASSWD:ALL" | sudo tee "/etc/sudoers.d/dont-prompt-$USER-for-sudo-password"
# zsh
如果Linux作为日常使用机器。
# 监控
glances, htop, iftop iotop bmon dstat, vim jq, tmux screen
# 大文件
split -b=1M -d file.txt file
split -l 100 input_file output_file
split --bytes=1M /path/to/image/image.jpg /path/to/image/prefixForNewImagePieces
cat prefixFiles* > newimage.jpg
$ split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo.
$ split -b 100k -d -a 3 foo foo.
$ cat foo.* > foo_2
# 虚拟内存
# 收藏
- http://udn.yyuap.com/doc/wiki/project/linux-command/chap08.html
- Linux常用命令大全速查备忘
- dos2unix
- 11页的命令啊,包括了常用的命令
- Linux系统信息查看命令大全
–END
Related
Related posts
-
在树莓派 Ubuntu Server 上跑 OpenClaw Browser:Chromium 无头模式实战
2026-03-08
-
Linux brew安装过程
2026-02-01
-
本地端口转发:访问远程 Linux 本地服务
2026-02-01
-
Fabric:命令行管道中的 AI 工具,更具价值的是里面 230 个系统提示词
2026-01-08