Linux


常用命令

日常

  • 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
  • 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”

文章作者: 万川
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 万川 !
  目录