Useful Commands For Linux Newbies

本篇记录了 Linux 常用的命令和功能介绍,对于我这样的 Linux 新手特别有用。

系统监控命令

    # 查看系统当前的版本
    lsb_release -a

    # 查看系统当前进程运行情况,CPU,内存使用情况
    top
    # 显示整个命令行而不只是显示命令名
    top - c
    # 根据内存资源使用大小进行排序
    top - shift + m

    # 内存使用情况,单位为 MB
    free -m

    # 查看服务器的 CPU 使用率,内存使用,虚拟内存交换情况,IO 读写情况
    vmstat

    # 监视系统对磁盘操作的情况
    iostat

    # 查看系统运行多久、当前有多少的用户登录、最近的系统平均负载
    uptime

    # 系统性能分析工具,从多方面对系统的活动进行报告
    # 包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等
    sar

    # 显示各种网络相关信息,端口占用情况
    netstat -tulpn
    netstat -tulpn | grep 8080

    # 查看操作系统时间,时区;调整时间
    date
    > 2015年 12月 29日 星期二 22:00:02 CST
    cat /etc/sysconfig/clock
    > ZONE="Asia/Shanghai"

    date MMDDhhmmYYYY
      MM - Two digit month number
      DD - Two digit date
      hh - Two digit 24 hour system hour
      mm - Two digit minute
      YYYY - Four digit year code

    date 122914372015

    # 查看和调整硬件时钟
    hwclock --show
    hwclock --set --date="2015-12-29 14:36:01" --localtime

    # strace用于跟踪程序执行过程中的系统调用
    strace -p [pid]
    # 比如,跟踪pid为12345的进程中所有线程的read和write系统调用,输出字符串的长度限制为1024:
    strace -s 1024 -f -e trace=read,write -p 12345

    # tcpdump是Linux上的抓包工具,如抓取eth0网卡上的包,使用:
    sudo tcpdump -i eth0
    # 比如,抓取80端口的HTTP报文,以文本形式展示:
    sudo tcpdump -i any port 80 -A

    # nc可以在Linux上开启TCP Server、TCP Client、UDP Server、UDP Client。
    # 如在端口号12345上开启TCP Server和Client模拟TCP通信:
    Server:  nc -l 127.0.0.1 12345
    Client:  nc 127.0.0.1 12345

    # 在端口号12345上开启UDP Server和Client模拟TCP通信:
    Server:  nc -ul 127.0.0.1 12345
    Client:  nc -u 127.0.0.1 12345

    # Unix Socket通信示例:
    Server:  nc -Ul /tmp/1.sock
    Client:  nc -U /tmp/1.sock

    # lsof命令主要用法包括:
    # 查看端口占用进程信息,经常用于端口绑定失败时确认端口被哪个进程占用
    sudo lsof -i :[port]
    # 查看进程打开了哪些文件或套接字
    sudo lsof -p [pid]

    # ss命令可以用于替换netstat,ss直接读取解析/proc/net下的统计信息,相比netstat遍历/proc下的每个PID目录,速度快很多
    ss -t -a 显示所有的TCP Sockets
    ss -u -a 显示所有的UDP Sockets
    ss -x src /tmp/a.sock 显示连接到/tmp/a.sock的进程
    ss -o state [state TCP-STATE] 如ss -o state established显示所有建立的连接

  

列出目录内容


  # 每个一行,列出文件
  ls -1

  # 列出所有文件,包括隐藏文件
  ls -a

  # 列举所有文件,以长列表格式(权限、所有权、大小、修改日期)
  ls -la

  # 以人类可读单元(KB、MB、GB)来展示大小的长格式列表
  ls -lh

  # 按大小倒序排列,列出长列表
  ls -ls

  # 按照修改时间并以长格式列出所有文件(时间早的靠前)
  ls -ltr

  

文件和磁盘操作命令

  # 文件系统空间和占用情况
  df -hl

  # 根据文件名,查找系统内的文件,
  find / -name mysql

  # 在当前目录及其子目录下查找文件名为1.txt的文件
  find . -name "1.txt"

  # 在当前目录及其子目录下查找包含abcd字符串的文件行,经常用于搜索代码
  find . -type f|xargs grep 'abcd'

  # 查看当前文件目录,文件大小
  du -sh *

  # 查看隐藏文件大小
  du -sch .[!.]* *

  # 完全开放文件的可读,可写,可执行操作
  sudo chmod 777 -R /path/public

  # 修改文件可执行权限
  chmod +x /etc/sv/dropbox/run

  # 创建文件链接,具体用法是:ln –s 源文件 目标文件
  # –s 是创建软链接,否则为硬链接;软链接不会占用空间;两种方式,文件都是同步的
  sudo ln -s /home/deploy/project/release201510190942 /opt/jetty/webapps/project

  # 批量删除 .svn 隐藏文件夹
  find . -type d -name ".svn"|xargs rm -rf

  # SCP 拷贝命令
  scp file root@ip:/home
  scp root@ip:/home/file  /folder/

  # SCP 拷贝带上端口号
  scp -P port file root@ip:/home
  

压缩和解压常用命令

    # 文件压缩/解压
    tar czvf filea.tar filea.sql
    tar zxvf filea.tar

    tar cvf folderb.tar folderb
    tar xvf folderb.tar

    解压文件
    .tar
    解包:tar xvf FileName.tar
    打包:tar cvf FileName.tar DirName
    (注:tar是打包,不是压缩!)
    ———————————————
    .gz
    解压1:gunzip FileName.gz
    解压2:gzip -d FileName.gz
    压缩:gzip FileName
    ———————————————
    .tar.gz 和 .tgz
    解压:tar zxvf FileName.tar.gz
    压缩:tar zcvf FileName.tar.gz DirName
    ———————————————
    .bz2
    解压1:bzip2 -d FileName.bz2
    解压2:bunzip2 FileName.bz2
    压缩: bzip2 -z FileName

    .tar.bz2
    解压:tar jxvf FileName.tar.bz2
    压缩:tar jcvf FileName.tar.bz2 DirName
    ———————————————
    .bz
    解压1:bzip2 -d FileName.bz
    解压2:bunzip2 FileName.bz
    压缩:未知
    ———————————————
    .tar.bz
    解压:tar jxvf FileName.tar.bz
    压缩:未知
    ———————————————
    .Z
    解压:uncompress FileName.Z
    压缩:compress FileName

    .tar.Z
    解压:tar Zxvf FileName.tar.Z
    压缩:tar Zcvf FileName.tar.Z DirName
    ———————————————
    .zip
    解压:unzip FileName.zip
    压缩:zip FileName.zip DirName
    ———————————————
    .rar
    解压:rar x FileName.rar
    压缩:rar a FileName.rar DirName
  

文本处理

  # awk按列进行处理,sed按行进行处理
  # 如采用冒号分隔数据,输出第一列数据($0代表行全部列数据,$1代表第一列,$2代表第二列...)
  awk -F ":" '{print $1}'

  # 在awk的结果基础上,结合sort、uniq和head等命令可以轻松完成频率统计等功能
  # 查看文件的第100行到第200行:
  sed -n '100,200p' log.txt

  # 替换字符串中的特定子串
  echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"

  # 替换test文件每行匹配ab的部分为cd
  sed -i 's/ab/cd/g' test

  # vi 编辑,搜索,替换文件
  # :%s/str1/str2/g
  # 用字符串 str2 替换所有出现的字符串 str1
  # 例如,将单引号 ' 替换为双引号 "
  :%s/'/\"/g

  

网络操作命令

  # 查看网络配置,网卡情况
  ifconfig
  ifconfig eth0

  # 关闭或者打开 local 网络接口
  ifconfig lo down
  ifconfig lo up

  # 查看运行进程,及其占用的端口,port
  netstat -tulpn

  # Telnet 登录
  telnet ip
  

用户操作命令

  # 新增 Gitlab  登录账号 CentOS
  adduser git
  passwd git-password

  # 切换用户
  su root
  

SSH 禁用 Root 账号登录

  # 创建账号 test
  sudo adduser test

  passwd test
  test123

  # 调整 test 账号的权限
  visudo
  test    ALL=(ALL:ALL) ALL

  # ssh 禁用 root 登录
  vi /etc/ssh/sshd_config

  # Prevent root logins:
  PermitRootLogin no

  # Limit User Logins
  AllowUsers test

  # Run ssh on a non-standard port:
  Port 22  # Change to another port

  # 重启 ssh 服务
  service sshd restart

  # ssh 登录
  ssh -p 22 user@ip
  

Other 操作命令

  # 生成 SSH key
  $ ssh-keygen -t rsa
  $ cat ~/.ssh/id_rsa.pub

  # memcache 清空 cache
  $ telnet localhost 11211
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
  flush_all
  OK
  quit
  Connection closed by foreign host.

  # wget 保存静态网页至本地
  # 把 Google 深度为 4 以内的所有页面,下载下来并转换成本地链接
  wget -r -l4 -k http://google.com

  # 把 Rails Guides 镜像到本地,可以离线查看文档
  wget -k -m http://guides.rubyonrails.org/v4.1.8/

  # curl用于模拟HTTP请求,在终端模拟请求时常用,如最基本的用法:
  # 指定HTTP首部 -H选项,如-H "Host: xx.xx.xx.xx"
  # 指定请求方法 -X选项,如-X POST,-d指定post数据
  # 显示请求详细信息,包括请求和响应首部 -v选项
  # 重定向请求自动追踪 -L选项
  curl http://www.bing.com

  # yum 离线安装已下载的文件
  yum install yum-utils
  # yumdownloader 
  yumdownloader dmidecode
  rpm -ivh dmidecode-2.12-6.el6.x86_64.rpm
  

参考链接
How to install telnet in CentOS / RHEL / Scientific Linux 6.4

2015-04-10

rocket-wing