Linxu&Mac 常用命令

文件/文件夹/磁盘管理

  • 由第一行开始显示档案内容(n为显示行号):cat [-n] <file-name>
  • 从最后一行开始显示(Mac无):tac <file-name>
  • 查看头几行:head [-lineNumber] <file-name>
  • 查看尾几行:tail [-lineNumber] <file-name>
  • 以二进制的方式读取档案内容:od <file-name>
  • 分页显示文件(space下一页,b上一页):more <file-name>
  • 分页显示文件(支持PageDown和PageUp):less <file-name>
  • 创建软链接(inode不一样): ln -s <from-file-with-absolute-path> <soft-link-file-with-absolute-path>
  • 创建硬链接(inode一样): ln <from-file-with-absolute-path> <hard-link-file-with-absolute-path>
  • 查看文件的inode信息: stat <file>
  • 查看硬盘分区的inode总数和已经使用的数量: df -i
  • 查看每个inode节点的大小: sudo dumpe2fs -h /dev/hda | grep "Inode size"
  • 查看文件的inode号码: ls -i <file>
  • 查看当前文件夹磁盘占用情况:du -shc *
  • 查看磁盘使用情况:df -lh
  • 查看文件或文件夹挂载在哪个分区: df <file-or-directory> -kh
  • 查看inode使用情况: df -hi
  • 找某个文件并打印内容:find . -name "<file-name>" -exec cat {} \;
  • 在当前目录下查找某个字符串并打印行号:find ./* | xargs grep -n '<string-you-find>'

压缩文件管理

  • 创建tar文件:
    tar -cvf <archive-name.tar> <file1-OR-file2-OR-both-to-archive>
  • 查看tar文件:tar -tvf <archive-to-view.tar>
  • 提取tar文件:tar -xvf <archive-to-extract.tar>
  • 创建和提取gzip压缩文件:gzip <filename>
  • 对gzip文档进行解压:unzip <archive-to-extract.zip>
  • 查看gzip文件:unzip -l <archive-to-extract.zip>

计划任务

  • 启动crond服务:service crond start
  • 停止crond服务:service crond stop
  • 重启crond服务:service crond restart
  • 为某个使用者建立/移除crontab任务: crontab -u username
  • 编辑crontab任务内容:crontab -e
  • 查看crontab任务内容:crontab -l
  • 移除crontab所有任务:crontab -r
  • crontab内容格式:
    • * * * * * path
    • 前面5个 * 代表:分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7)
    • * 号代表任何时间都能接受的意思,任意;
    • 如果是一段时间,用-连接
    • 如果是隔开几个时间,用,连接
    • 如果是某个时间单位每隔多久,用/<interval>连接
  • 例如:
    * */12 * * * /Users/Archerda/Configuration/Script/CodingBit/coding.sh
    代表每隔12个小时执行一次coding.sh
  • Mac下的cron日志会在/var/mail/<username>中记录,可以用cat查看。每次cron任务有标准输出时都会记录在该文件中,并且在终端会提醒You have new mail in /var/mail/<username>

用户管理

  • 列出当前用户名:who
  • 查看用户登录状态:w
  • 快速查找某用户信息:finger <user-name>
  • 切换用户(switch user):su <user-name>
  • 修改用户密码:passwd
  • 查看UID等:id <user-name>

系统相关

  • 显示系统内核信息:uname -a
  • 显示发行版信息: cat /etc/issue
  • 查看文件系统块大小:blockdev --getbsz <partion> 比如blockdev --getbsz /dev/sda1

进程管理

  • 查看系统资源使用情况并排序:top
  • 可视化查看系统资源使用情况:sudo htop
  • 使用homebrew安装htop:brew intall htop
  • 列出活跃进程:ps
  • 列出所有系统运行命令并分页:ps -A | less
  • 列出指定进程名的进程(BSD格式输出:USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND):ps aux | grep <pname> --color=auto
  • 列出指定进程名的进程(标准格式输出:UID , PID , PPID , C , STIME , TTY , TIME , CMD):ps -ef | grep <pname> --color=auto
  • 根据ID杀死进程:kill <pid>
  • 根据关键字查询PID:pgrep -f <key-word>
  • 根据进程名称杀死一个进程:pkill <name> killall <name>
  • 杀死图形界面程序(Mac默认没有这个工具):xkill
  • 改变线程nice值(优先级,-19最高,19最低,0默认):renice <nice-value> <pid>
  • 在后台不挂断地运行命令(日志默认写在当前目录的nohup.out):nohup <command> <arg> [> <filename> 2>&1] &
  • 建立一个处于断开模式下的会话:screen -dmS <session-name>
  • 列出所有会话:screen -list
  • 重新连接会话:screen -r <session-name>
  • 跟踪进程执行时的系统调用和所接收的信号 (在调试的时候一般是从后往前看strace命令的结果,这样更容易找到有价值的信息): strace <command>
  • Linux查看PID的详细信息:ll /proc/<PID>
    • cwd符号链接的是进程运行目录;
    • exe符号连接就是执行程序的绝对路径;
    • cmdline就是程序运行时输入的命令行命令;
    • environ记录了进程运行时的环境变量;

加密解密

  • 查看文件的MD5(Mac):md5 <file-name>
  • 查看文件的SHA1(Mac): shasum -a 1 <file-name>
  • 查看文件的SHA256(Mac): shasum -a 256 <file-name>
  • 查看文件的MD5(Linux):md5sum <file-name>
  • 查看文件的SHA:shasum <file-name>
  • 查看文件的SHA1:sha1sum <file-name>
  • 生成RSA的SSH: ssh-keygen -t rsa

重定向

  • 输出重定向到剪贴板(Mac): <command> | pbcopy

远程登录

  • ssh登录:ssh [-p <port>] <user>@<host>'
  • ssh免密码登录(公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾):ssh <user>@<host> 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
  • ssh禁用密码登录并启用ssh密钥登录:vim /etc/ssh/sshd_config PubkeyAuthentication yes;AuthorizedKeysFile .ssh/authorized_keys;PasswordAuthentication no service sshd restart

CPU管理

  • 显示CPU信息:cat /proc/cpuinfo
  • 显示CPU信息:lscpu
  • 显示CPU占用最多的前10个进程:ps auxw|head -1;ps auxw|sort -rn -k3|head -10

内存管理

  • 显示内存信息:free -m
  • 显示内存信息:cat /proc/meminfo
  • 查看内存页大小:getconf PAGESIZE
  • 查看swap的使用情况:cat /proc/swaps
  • 显示内存消耗最多的前10个进程:ps auxw|head -1;ps auxw|sort -rn -k4|head -10
  • 显示虚拟内存使用最多的前10个进程:ps auxw|head -1;ps auxw|sort -rn -k5|head -10
  • 释放buffer和cache: echo 3 > /proc/sys/vm/drop_caches
  • 每隔一秒高亮显示内存变化情况: watch -n 1 -d "free"

网络管理

  • 查看已用端口:netstat -pltn
  • 查看某个端口被哪个进程占用: lsof -i:<port>
  • 显示机器所属域名: hostname -d
  • 显示完整的主机名和域名: hostname –f
  • 显示当前机器的ip地址: hostname –i
  • 互动式地查询域名记录: nslookup
  • 查询域名对应的IP: dig <domain-name>
  • 查询IP对应的域名: dig -x <ip>
  • 查看网络是否联通: ping <ip|domain-name>
  • 查看公网IP: curl http://members.3322.org/dyndns/getip
  • 每隔一秒高亮显示网络链接数: watch -n 1 -d "netstat -ant"
  • 查看一下当前的网络连接情况: netstat -nt | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'
  • telnet: telnet <ip> <port>
  • 查看iptables防火墙状态: service iptables status
  • 立即开启iptables防火墙: service iptables start
  • 重启后开启iptables防火墙: chkconfig iptables on
  • 立即关闭iptables防火墙: service iptables stop
  • 重启后关闭iptables防火墙: chkconfig iptables off
  • 立即重启iptables防火墙: service iptables restart

快捷键

  • 光标回到行首:ctrl + a(ahead)
  • 光标回到行尾:ctrl + e(end)
  • 光标向行首移动一个字符:ctrl + b(backwards)
  • 光标向行尾移动一个字符:ctrl + f(forwards)
  • 删除光标到行首的字符:ctrl + w
  • 删除光标到行尾的字符:ctrl + k
  • 删除整个命令行文本字符:ctrl + u
  • 向行首删除一个字符:ctrl + h
  • 向行尾删除一个字符:ctrl + d
  • 粘贴ctrl+u,ctrl+k,ctrl+w删除的字符:ctrl + y
  • 上一个使用的历史命令:ctrl + p
  • 下一个使用的历史命令:ctrl + n
  • 快速检索历史命令:ctrl + r
  • 交换光标所在和其前的字符:ctrl + t
  • 使终端静止,停止输出:ctrl + s
  • 退出ctrl+q引起的静止:ctrl + q
  • 使正在运行的任务运行于后台:ctrl + z
  • 空命令行状态下退出终端:ctrl + d
  • 显示所有终端支持的命令:esc + esc + esc

参考文档