some_good_stuff
some_good_stuff copied to clipboard
命令行知识分享
以下是我的一次关于命令行知识分享的提纲,内容属于实用型,适合中级以上程序员学习。
导航
- 认识命令行
-
快捷键
- 移动
- 删除
- 搜索
- 控制
-
常用命令
- 目录
- 文件内容查看
- 指令查找
- 文件查找
- 浏览记录
- 操作记录
- 程序管理
-
用户与权限
- 重要的用户权限配置文件
- 用户切换
- SHELL 环境变量配置
- login shell
- non-login shell
- 文件权限
-
环境变量
- 常用变量
- 设置变量
-
管道命令
- 数据流重定向
- 重定向示例
- 竖线 | pipe
- xargs 让命令支持管道
- 减号 - 代替 stdin 和 stdout
- 大于号 > >> 输出导向
-
VIM 必备基础
- 浏览
- 编辑
- 常用组合键
-
终端工具介绍
- oh-my-zsh
- 实用性
- 终端美化
- tmux
- oh-my-zsh
-
Tips
- 终端同步输入
认识命令行
常见 SHELL:/bin/bash
/bin/sh
/bin/zsh
SHELL 定义目录:/etc/shells
SHELL 符号:$
#
PS1
SHELL 颜色:echo $TERM
xterm-256color / True Colors
awk 'BEGIN{
s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
for (colnum = 0; colnum<77; colnum++) {
r = 255-(colnum*255/76);
g = (colnum*510/76);
b = (colnum*255/76);
if (g>255) g = 510-g;
printf "\033[48;2;%d;%d;%dm", r,g,b;
printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
printf "%s\033[0m", substr(s,colnum+1,1);
}
printf "\n";
}'
SHELL 字符集:locale
(LC_ALL=en_US.utf8)
↥ 返回顶部
快捷键
移动
ctrl + a
到行首
ctrl + e
到行尾
alt + ←
按单词左移
alt + →
按单词右移
删除
ctrl + w
往前删字符
ctrl + k
删当前至行尾的字符
搜索
ctrl + r
逆向搜索历史命令(ctrl + r
下一个,ctrl + s
上一个,ctrl + g
退出)
控制
ctrl + l
清屏(或者 clear)
ctrl + z
挂起
ctrl + c
终止
↥ 返回顶部
常用命令
目录
cd
: cd -
pwd
: 显示当前路径
mkdir
: mkdir -p a/b/c
ls
: ls -lat
ln
: ln -s source_file dest_file
mv
& cp
: 移动或复制文件
basename
: 获取路径文件名
dirname
: 获取完整路径文件夹
文件内容查看
cat
& tac
: 查看文件所有内容
head
& tail
: 查看文件内容头尾
head -n 100
tail -f
more
& less
: 翻页查看文件内容
touch
: 创建文件,或修改文件时间戳
touch -t 201911111010.30 a.log
od
: 用于输出文件的八进制、十六进制或其它格式编码的字节
od -t a xxx.png | more -n 5 echo password | od -t dCc
指令查找
which
: 在 $PATH 路径下寻找运行命令
which -a ffmpeg
whereis
: 与 which 类似,但不如 which 好用
type
: 判断指令的类型
type ls
type cd
ctrl+r
: 逆向搜索命令历史
文件查找
locate
: 在索引数据库里寻找文件。通过 updatedb
更新数据库,配置在 /etc/updatedb.conf
find
: 查询磁盘文件
find /var -mtime -4 -type f -name \*.log
find /var -mtime -4 -type f -name \*.log -exec ls -l {} \;
浏览记录
dirs -v
文件夹访问记录
cd -n
重新访问某个记录
操作记录
history
查询历史命令
!xxx
重新执行某个历史命令
程序管理
jobs
查询所有用户打开的程序 (jobs -l
查看 PID)
ctrl + z
将当前进程最小化
fg
将后台进程最大化 (fg %n
)
kill
杀进程 (kill -signal
)
nohup
将某个命令后台进行 (nohup find ... &
)
ps
列出当前在运行的所有进程(ps aux
)
top
任务管理器(建议安装更强大的 htop
)
↥ 返回顶部
用户与权限
重要的用户权限配置文件
/etc/passwd
: 配置了用户、UID、初始 GID、默认工作文件夹、默认 shell
/etc/group
: 配置了组、GID、关联组的用户
/etc/sudoers
: 配置了可以使用 sudo 的用户
用户切换
sudo
: 临时使用 root 权限运行
su
: 切换用户,注意:su -
与 su
(login shell & non-login shell)
SHELL 环境变量配置
login shell
- /etc/profile
- ~/.bash_profile
- ~/.bashrc
non-login shell
- ~/.bashrc
区分方法: echo \$0
(login shell 会返回类似 -bash)
文件权限
文件所有者 | 文件所属组 | 其他人权限 |
---|---|---|
rwx | rwx | rwx |
chmod
: chmod -R 744 ./
chown
: chown -R user:groups ./
↥ 返回顶部
环境变量
常用变量
通过 env 命令查看所有环境变量,echo 打印变量值
-
$HTTP_PROXY
-
$HTTPS_PROXY
-
$PATH=/xxx
-
$EDITOR
-
特殊变量
PS1
\$
?
设置变量
export
: export ABC=1
unset
: unset ABC
↥ 返回顶部
管道命令
数据流重定向
- 标准输入 (stdin) :代码为 0,使用 < 或 <<
- 标准输出 (stdout):代码为 1,使用 > 或 >>
- 标准错误输出 (stderr):代码为 2,使用 2> 或 2>>
重定向示例
cat /abc 2>&1
cat /abc 2> /dev/null
竖线 | pipe
ls -al /etc | less
history | grep xxx
find /export -type f -size +100M -print0 | xargs -0 du -h | sort -nr
xargs 让命令支持管道
find /var -mtime 4 -type f | xargs ls -l
减号 - 代替 stdin 和 stdout
tar -cvf - /home | tar -xvf -
大于号 > >> 输出导向
find /var -mtime 4 -type f | xargs ls -l >> result.log
↥ 返回顶部
VIM 必备基础
浏览
显示行号::set nu
关闭则为 :set nu!
跳到当前行头:行头 0
有字符的行头 ^
跳到当前行尾:\$
跳到文件头部:gg
跳到文件尾部:G
翻页:往下 ctrl + f
往上 ctrl + b
搜索:/
编辑
粘贴模式::set paste
关闭则为 :set paste!
删除:删除单个字符 x
删除当前行 dd
删除多行 ndd
删除当前到最后一行的内容 dG
撤销重做:撤销 u
重做 ctrl + r
插入:当前 i
行尾 A
下一行 o
上一行 O
复制粘贴:复制当前行 yy
复制多行 nyy
粘贴 p
保存、保存退出、不保存退出:w
wq
q!
常用组合键
多行注释:ctrl + v
进入块选择模式,选择多行后按 shift + i
,编辑完成后按 esc
多行反注释:ctrl + v
进入块选择模式,按 x
删除注释符
删除所有内容:gg
dG
↥ 返回顶部
终端工具介绍
oh-my-zsh
实用性
装插件:
个人常用 git / osx / autojump / history / dirhistory / nvm / zsh-autosuggestions
提供很多便利命令,如:
git
: ggpull / ggpush / gst / ga / gc / gd / glol,更多见 这里
osx
: ofd / pfd / cdf
dirhistory
: 前进后退 alt + left
alt + right
自带:
- tab 补全:
kill <tab>
ll <tab>
ssh <tab>
- 免
cd
访问文件夹 - 命令补全,如
ssh <按 ↑>
-
take
创建并进入文件夹
终端美化
自带主题
https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
iTerm 2 主题
https://github.com/mhartington/oceanic-next-iterm
https://github.com/chriskempson/tomorrow-theme
PowerFonts 字体
https://github.com/Lokaltog/powerline-fonts
tmux
一个终端服务器,优点:
-
避免误杀终端,每次需要重新打开多个 session
-
便于 SSH broken pipe 后恢复会话
-
可以分屏、配置各种快捷键、装插件(https://github.com/tmux-plugins/)
http://cenalulu.github.io/linux/tmux/
↥ 返回顶部
Tips
终端同步输入
- iTerm2:
Broadcast Input
- tmux:
:setw synchronize-panes