常用命令
日常
- Tab 键实现自动补全参数
- ctrl-r搜索命令行历史记录,重复按下 ctrl-r 会向后查找匹配项,按下 Enter 键会执行当前匹配的命令,而按下右方向键会将匹配项放入当前行中,不会直接执行,以便做出修改
- ctrl-w删除你键入的最后一个单词
- ctrl-u 可以删除行内光标所在位置之前的内容,ctrl-k 可以删除光标至行尾的所有内容,ctrl-l 可以清屏。
- alt-b 和 alt-f 可以以单词为单位移动光标
- ctrl-a 可以将光标移至行首,ctrl-e 可以将光标移至行尾键入
- set -o [] 设置不同风格快捷键
- history 查看命令行历史记录,第一列是命令编号
- 再用 !n(n 是命令编号)就可以再次执行。
- !$ 它用于指代上次键入的参数
- 而!! 可以指代上次键入的命令了
- cd 切换工作路径
- cd ~ 可以进入home目录。访问你的home目录中的文件,可以使用前缀 ~(例如 ~/.bashrc)。sh脚本里则用环境变量$HOME指代home目录的路径。
- cd - 回到前一个工作路径。
- alt # 可以在行首加#并执行,以清除不想执行的内容,同时还可以通过历史查找恢复
- pstree -p 以一种优雅的方式展示进程树
- pgrep 和 pkill 根据名字查找进程或发送信号
- nohup 或 disown 使一个后台进程持续运行。
- netstat -lntp 或 ss -plat 检查哪些进程在监听端口(默认是检查 TCP 端口; 添加参数 -u 则检查 UDP 端口)或者 lsof -iTCP -sTCP:LISTEN -P -n (这也可以在 OS X 上运行)。
- lsof来查看开启的套接字和文件。
- uptime或w来查看系统已经运行多长时间
- alias来创建常用命令的快捷形式。例如:alias ll=’ls -latr’ 创建了一个新的命令别名 ll
- 可以把别名、shell 选项和常用函数保存在 ~/.bashrc,在所有 shell 会话中使用该设定。
- 把环境变量的设定以及登陆时要执行的命令保存在 ~/.bash_profile。而对于从图形界面启动的 shell 和 cron 启动的 shell,则需要单独配置文件。
- 在Bash脚本中,子shell(使用括号 (…))是一种组织参数的便捷方式。一个常见的例子是临时地移动工作路径:
(cd / && ls -alh)
- 使用括号扩展({…})来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 mv foo.{txt,pdf} some-dir(同时移动两个文件),cp somefile{,.bak}(会被扩展成 cp somefile somefile.bak)或者 mkdir -p test-{a,b,c}/subtest-{1,2,3}(会被扩展成所有可能的组合,并创建一个目录树)。
- 通过使用 <(some command) 可以将输出视为文件。例如,对比本地文件 /etc/hosts 和一个远程文件:
diff /etc/hosts <(ssh somehost cat /etc/hosts)
- Linux Shell 环境中的输入输出重定向,用符号<和>来表示。0、1和2分别表示标准输入、标准输出和标准错误。
- 重定向标准输出到文件:cat foo > foo.txt
- 重定向标准错误到文件:cat foo 2> foo.txt
- 重定向标准输出到标准错误:cat foo 1>&2
- 重定向标准错误到标准输出:cat foo 2>&1
- 重定向标准输出,标准错误到同一个文件:
- cat foo > foo.txt 2>&1或cat foo &> foo.txt
- 这里第个顺序很重要,先把标准输出重定向到文件,再把标准错误输出到标准输出,因为标准输出已经重定向到文件,所以标准错误与重定向到文件。
&与&>效果相同
- 以其他用户的身份执行命令,使用 sudo。默认以 root 用户的身份执行;使用 -u 来指定其他用户。使用 -i 来以该用户登录(需要输入_你自己的_密码)。
- 将 shell 切换为其他用户,使用 su username 或者 su - username。加入 - 会使得切换后的环境与使用该用户登录后的环境相同。省略用户名则默认为 root。切换到哪个用户,就需要输入_哪个用户的_密码。
帮助命令
- man []
- 结束可以用q
- help []
- [] [–help -h]
- info []
- which [] 找到命令的位置
文件管理
基础
- ls [-a -l -r -t -R -h] []
- pwd
- cd [. .. - ]
- mkdir [-p]
- rmdir []
- touch []
- rm [-r -f] [] []
- cp [-r -p] [from] [to]
- -p 保留时间
- mv [from] [to]
- 移动和重命名功能
提升
- 在当前目录下通过文件名查找一个文件,使用类似于这样的命令:find . -iname ‘something‘。在所有路径下通过文件名查找文件,使用 locate something (但注意到 updatedb 可能没有对最近新建的文件建立索引,所以你可能无法定位到这些未被索引的文件)。
- 通配符
- *匹配任意个字符
- ?匹配单个字符
文本显示
- cat []
- head [-n] []
- tail [-n -f] []
- wc [-c -l -m] []
- 用于查看文本的单词数、行数、字符数
- more、less:加强版的cat,支持更多显示、演示操作。
vim
- 多种模式
- 正常模式:打开即进入正常模式,支持多种指令操作
- hjkl以及方向键:移动光标
- 插入模式:正常模式下输入iIoOaA等进入插入模式
- 命令模式:输入冒号进入命令模式,可以执行保存、命名、退出等
- 可视模式:输入vV等进入
- 正常模式:打开即进入正常模式,支持多种指令操作
打包&压缩
- tar [c打包 x 解包 f指定操作类型为文件 z用gzip方式压缩 j用bzip2方式压缩] [package] [from/to ]
- 除了打包,也继承了压缩功能
- gzip
- bzip2
用户管理
- useradd [] 新建用户
- 用户是通过uid区分,而不是通过名字区分
- userdel [-r删除家目录] []
- id [] 查询用户信息
- passwd []
- usermod [] [] 修改用户的各种属性
- chage 修改用户生命周期
- groupadd []
- groupdel []
- su [-带运行环境切换] [] 切换用户
- sudo 以其它用户身份执行
- visudo 设置用户的特殊命令权限
网络
- ifconfig 网络接口配置信息
- route 查看网关路由信息
- ping [ip] 查看网络连接是否畅通
- traceroute [-w 超时时间] [ip] 查看路由信息
- nslookup [域名] 查看域名的IP地址
- telnet [域名] [端口] 测试指定端口的连通性
- tcpdump 按照要求对指定IP和端口进行抓包
- netstat [-ntpl] 显示网络状态
- service 查看并设置网络配置文件
软件
- centos/redhat 使用yum包管理器,软件包格式为rpm
- rpm包格式:软件名称+软件版本+系统版本+平台.rpm
- 如:vim-common-7.4.10-5.el7.x86_64.rpm
- rpm [-q查询 i安装 e卸载] 无法解决依赖关系,需要自己准备好安装包
- yum [list grouplist查看 install安装 update升级 remove卸载] 自动解决依赖,自动从源下载
- 源代码编译安装
- wget ….
- tar -zxf …
- ./configure –prefix=…
- make …
- make install
- rpm包格式:软件名称+软件版本+系统版本+平台.rpm
- debian/ubuntu 使用apt包管理器,软件包格式为deb
系统调试
- curl 和 curl -I 可以被轻松地应用于 web 调试中,wget也是
- top/htop/iostat/iotop等获取CPU 和硬盘的使用状态
- 使用 netstat 和 ss 查看网络连接的细节。
- dstat 在你想要对系统的现状有一个粗略的认识时是非常有用的。然而若要对系统有一个深度的总体认识,使用 glances,它会在一个终端窗口中向你提供一些系统级的数据。
- 若要了解内存状态,运行并理解 free 和 vmstat 的输出。
- buff/cache 指的是 Linux 内核用来作为文件缓存的内存大小,而与空闲内存无关。
- available = free + buffer + cache 等于去掉缓存可以挤出来的空间
- swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是换出和换入。可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。现在的机器一般都不太缺内存,系统默认还是使用了swap会拖累系统的性能。swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是60。如果内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness:vm.swappiness=10
- free 命令中的信息都来自于 /proc/meminfo 文件:cat /proc/meminfo
- mtr跟踪路由
- 用 ncdu 来查看磁盘使用情况,它比寻常的命令,如 du -sh *,更节省时间。
- 查找正在使用带宽的套接字连接或进程,使用 iftop 或 nethogs。
- 运用 gdb 连接到一个运行着的进程并获取它的堆栈轨迹。
- 使用 /proc。它在调试正在出现的问题的时候有时会效果惊人。比如:/proc/cpuinfo,/proc/meminfo,/proc/cmdline,/proc/xxx/cwd,/proc/xxx/exe,/proc/xxx/fd/,/proc/xxx/smaps(这里的 xxx 表示进程的 id 或 pid)。
- sar 展示了 cpu、内存以及网络等的历史数据。
- uname -a(Unix/kernel 信息)或者 lsb_release -a(Linux 发行版信息)查看你当前使用的系统
- lsof(list open files)是一个查看进程打开的文件的工具。
- 删除了文件,但du发现没有释放预期的磁盘空间,可以检查文件是否被进程占用: lsof | grep deleted | grep “filename-of-my-big-file”