some_good_stuff icon indicating copy to clipboard operation
some_good_stuff copied to clipboard

命令行知识分享

Open chuyik opened this issue 5 years ago • 0 comments

以下是我的一次关于命令行知识分享的提纲,内容属于实用型,适合中级以上程序员学习。

导航

  • 认识命令行
  • 快捷键
    • 移动
    • 删除
    • 搜索
    • 控制
  • 常用命令
    • 目录
    • 文件内容查看
    • 指令查找
    • 文件查找
    • 浏览记录
    • 操作记录
    • 程序管理
  • 用户与权限
    • 重要的用户权限配置文件
    • 用户切换
    • SHELL 环境变量配置
      • login shell
      • non-login shell
    • 文件权限
  • 环境变量
    • 常用变量
    • 设置变量
  • 管道命令
    • 数据流重定向
    • 重定向示例
    • 竖线 | pipe
    • xargs 让命令支持管道
    • 减号 - 代替 stdin 和 stdout
    • 大于号 > >> 输出导向
  • VIM 必备基础
    • 浏览
    • 编辑
    • 常用组合键
  • 终端工具介绍
    • oh-my-zsh
      • 实用性
      • 终端美化
    • tmux
  • 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

↥ 返回顶部

管道命令

数据流重定向

  1. 标准输入 (stdin) :代码为 0,使用 < 或 <<
  2. 标准输出 (stdout):代码为 1,使用 > 或 >>
  3. 标准错误输出 (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

https://ohmyz.sh/

实用性

装插件:

个人常用 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

chuyik avatar Dec 26 '19 08:12 chuyik