常用 Linux 命令

2018/04/22 Linux 共 7029 字,约 21 分钟
山川尽美

进程和端口相关

  1. 查看端口占用

查看端口 8080 的使用情况:

  netstat -tln | grep 8080
  1. 查看端口属于哪个程序

(list open files) 是一个列出当前系统打开文件的工具

  lsof -i :8080
  用于显示tcp,udp的端口和进程等相关情况:netstat -tunlp
  1. 新开端口

su 切换到 root 下,输入密码:XXXX,直接执行以下命令:

  0.查看状态:iptables -L -n
  1.以6016 端口为例:/sbin/iptables -I INPUT -p tcp --dport 6016 -j ACCEPT
  2.保存命令:/etc/rc.d/init.d/iptables save
  3.查看状态:/etc/init.d/iptables status
  1. 查看进程
  表示查看所有进程里 CMD 是 java 的进程信息: ps -ef | grep java
  查看java进程,-aux 显示所有状态:ps -aux|grep java 
  查看所有进程:ps aux
  用于查看指定端口号的进程情况:netstat -tunlp|grep 端口号
  1. 查看程序是否运行
  查看 java 进程: ps -ef|grep java
  查看 tomcat 进程: ps -ef|grep tomcat
  1. 终止进程
  终止进程号位19979的进程:kill -9 19979
  优雅的停止:kill 进程号

netstat 命令介绍

netstat 命令用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况  

-a 显示一个所有的有效连接信息列表(包括已建立的连接,也包括监听连接请求的那些连接)  

-n 显示所有已建立的有效连接  

-t tcp 协议  

-u udp 协议  

-l 查询正在监听的程序  

-p 显示正在使用 socket 的程序识别码和程序名称  

  1. 通过端口号获取进程号

方式一:

  netstat -tunlp|grep 6019

netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况

方式二:

  lsof -i:6019

lsof -i 用以显示符合条件的进程情况,lsof(list open files) 是一个列出当前系统打开文件的工具。

  1. 获取某个进程的网络端口号

查看进程号为 20446 的端口号,如图箭头所指“6016”即是;方框显示的是该程序所调用的端口,包括

mongodb 的 27017,mysql (显示了别名,其实是 3306),rabbitmq 的 amqp(其实是 5672)

  netstat  -ap | grep 20446

  不显示别名:
  netstat  -anp | grep 20446

  1. 显示当前正在监听的服务名称
  netstat -tl
  1. 查看开启了哪些端口
  netstat -lntp 

  1. 查看系统监听的端口
  netstat -na|grep -i listen 

  1. 查看已建立的连接进程,所占用的端口
  netstat  -antup

  1. 查看后台运行的进程总数
  ps  -ef|wc -l 
  1. 查看 java 进程
  ps -aux | grep java 或
  ps -ef | grep java

(grep ——global search regular expression(RE) and print out the line 全文正则匹配并打印)

ps:将某个进程显示出来

  -A  显示所有程序。 
  -e  此参数的效果和指定"A"参数相同。
  -f  显示UID,PPIP,C与STIME栏位。 
    
  grep命令是查找
  中间的|是管道命令 是指ps命令与grep同时执行
  UID PID PPID C STIME TTY TIME CMD
  各相关信息的意义:
  
  UID 程序被该 UID 所拥有
  
  PID 就是这个程序的 ID 
  PPID 则是其上级父程序的ID
  C CPU 使用的资源百分比
  STIME 系统启动时间
  TTY 登入者的终端机位置
  TIME 使用掉的 CPU 时间。
  CMD 所下达的指令为何

查看连接状态

  1. 各种连接
  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解释: 返回结果示例:

  LAST_ACK 5  (正在等待处理的请求数) 
  SYN_RECV 30 
  ESTABLISHED 1597 (正常数据传输状态) 
  FIN_WAIT1 51 
  FIN_WAIT2 504 
  TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)

状态:描述

  CLOSED:无连接是活动的或正在进行 
  LISTEN:服务器在等待进入呼叫 
  SYN_RECV:一个连接请求已经到达,等待确认 
  SYN_SENT:应用已经开始,打开一个连接 
  ESTABLISHED:正常数据传输状态 
  FIN_WAIT1:应用说它已经完成 
  FIN_WAIT2:另一边已同意释放 
  ITMED_WAIT:等待所有分组死掉 
  CLOSING:两边同时尝试关闭 
  TIME_WAIT:另一边已初始化一个释放 
  LAST_ACK:等待所有分组死掉
  
  1. 并发连接数

    netstat -nat|grep ESTABLISHED|wc -l
    
  2. 查看某个端口的连接数

    netstat -nat | grep -iw "9090" | wc -l
    
  3. 查看连接状况

    netstat -nat | grep -iw "9090"
    

网络操作

查看网络通不通 ping www.baidu.com

ubutu@10-10-80-30:~$ ping www.baidu.com PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data. 64 bytes from 180.97.33.108: icmp_seq=1 ttl=48 time=27.6 ms 64 bytes from 180.97.33.108: icmp_seq=2 ttl=48 time=27.6 ms 64 bytes from 180.97.33.108: icmp_seq=3 ttl=48 time=27.5 ms 64 bytes from 180.97.33.108: icmp_seq=4 ttl=48 time=27.6 ms

telnet 域名/IP 端口号

test_user@10-10-80-30:~$ ttelnet www.baidu.com 80 Trying 61.135.169.125… Connected to www.a.shifen.com. Escape character is ‘^]’.

hosts 加入域名

1.使用root sudo vi /etc/hosts 按 “Inter”输入, 按 “Esc”,”:wq” 保存退出

搜索相关

grep

  1. 统计某个字符串的行数
  grep -wi -c Eleme info-20180322.log_0

统计 emele 的行数,忽略大小写

  1. 使用 grep 搜索

查询关键字 eleme、412、413 并高亮

   grep -wi --color 'eleme\|412\|413' info-20180322.log_0 xxxxxxxxxx 

  1. 查询字符串出现次

    grep -o '复制' info.log | wc -l
    

    文件操作相关

  2. 文件复制

  复制文件:cp source dest  source :原文件, dest : 要复制到的目录
  递归复制整个文件夹:cp -r sourceFolder targetFolder 
  远程拷贝:scp sourecFile romoteUserName@remoteIp:remoteAddr
  1. 删除目录
  删除空目录:rmdir deleteEmptyFolder
  递归删除目录中所有内容:rm -rf deleteFile
  
  删除除指定文件以外的文件及文件夹:
   rm -rf `ls |grep -v "redis.conf" `
  1. 创建文件
  vi filename
  1. 移动文件
  mv /temp/movefile /targetFolder
  1. 重命名
  mv oldNameFile newNameFile
  1. 修改文件权限
  file.java的权限 -rwx-rwx-rwx,r 表示读、w 表示写、x 表示可执行:chmod 777 file.java
  1. 文件查看
  查看文件头10 行:head -n 10 info.log
  查看文件尾10 行:tail -n 10 info.log
  查看文件尾10 行并监听文件:tail -10f info.log
  1. 文件查找
  find  /dir -name filename [在目录 dir 下查找文件名为 filename 的文件]
  find . -name*.log” [在当前目录下查找扩展名为 log 的文件]
  1. 打包文件夹

zip 方式

  zip  -r ./eleme.zip ./eleme/    压缩当前文件夹下的 eleme 文件夹 为 eleme.zip
  
  zip  -r ./eleme.zip ./*/  	   压缩当前文件夹下的所有文件 为 eleme.zip
  
  unzip test.zip 将压缩文件 text.zip 在当前目录下解压缩
  
  unzip -v test.zip 查看压缩文件目录,但不解压
  
  unzip -n test.zip -d /tmp 将压缩文件 text.zip 在指定目录 /tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令不覆盖原先的文件
  
  unzip -o test.zip -d /tmp 将压缩文件 test.zip 在指定目录 /tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令覆盖原先的文件

tar 方式

  -z : gzip压缩
  
  tar -czvf log.tar log.info :  压缩单个文件 
  
  tar -czvf  log.tar  log.info 2018-03-22-info.log    压缩多个文件
  
  tar -czvf my.tar dir1 dir2  多个目录压缩打包
  
  解包至当前目录:tar -zxvf my.tar
  
  tar -ztvf log.tar.gz 查阅 tar 包内有哪些文件
  
  tar -zxvf test.tar test.txt 解压部分文件
>注:c 参数代表 create(创建),x 参数代表 extract(解包),v 参数代表 verbose(详细信息),f 参数代表 filename(文件名),所以 f 后必须接文件名。
  1. 传包

    scp Alipay.jar 用户名@127.0.0.1:/usr/work/alipay
    
  2. 拷贝 从其他目录拷贝文件到当前目录:

   先进入当前目录,然后:cp 源文件目录  .         (  .代表当前目录)

日志查看

  1. 按行号查看,过滤出关键字附近的日志
  • ①先查看关键字所在的行号:

      cat -n info-20180319.log_0 | grep '权限'
    
  • ②‘权限’所在行号是 102,查看这个关键字前 10 行和后 10 行的日志:

    cat -n info-20180319.log_0 | tail -n +92|head -n 20
    

    说明: tail -n + 92 表示查询 92 行之后的日志 head -n 20 则表示在前面的查询结果里再查前 20 条记录

如果日志比较多可以分页查看:

  cat -n info-20180319.log_0 | grep '权限' | more

或者写入文件:

  cat -n info-20180319.log_0 | grep '权限' > xxx.log

2.按日期查看

  sed '/2018-03-19 00:02:40/,/2018-03-19 01:02:40/p' info-20180319.log_0 

linux 打开文件数 too many open files 解决方法

参考

  1. 查看每个用户最大允许打开文件数量 ulimit -a

    zhxdidi@web-mod md-consume]$ ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 172032
    max locked memory       (kbytes, -l) 32
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 172032
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

    其中 open files (-n) 1024 表示每个用户最大允许打开的文件数量是 1024

  2. 查看当前系统打开的文件数量 (list open files)是一个列出当前系统打开文件的工具

    lsof | wc -l    或  
    watch "lsof | wc -l"  每 2 秒监控
    
  3. 查看某一进程的打开文件数量

    lsof -p pid | wc -l   pid 为进程号
    
  4. 设置 open files 数值方法 方式一:临时

    ulimit -n 2048
    

    方式二:永久

    vim /etc/security/limits.conf  
    在最后加入  
    * soft nofile 4096  
    * hard nofile 4096  
    最前的 * 表示所有用户,可根据需要设置某一用户
    重启系统,通过shutdown -r now  命令重启即可。
    

系统管理相关

  1. 查看空间大小
  磁盘空间:df -h 
  目录大小:du -sh *
  1. chmod 命令

该命令用于改变文件的权限,一般的用法如下:

  chmod [-R] xyz 文件或目录
  -R:进行递归的持续更改,即连同子目录下的所有文件都会更改

同时,chmod 还可以使用 u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟 rwx 搭配来对文件的权限进行更改。

  # 例如:
  chmod 0755 file # 把file的文件权限改变为-rxwr-xr-x
  chmod g+w file # 向file的文件权限中加入用户组可写权限

权限范围的表示法如下:

u User,即文件或目录的拥有者; g Group,即文件或目录的所属群组; o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围; a All,即全部的用户,包含拥有者,所属群组以及其他用户; r 读取权限,数字代号为“4”; w 写入权限,数字代号为“2”; x 执行或切换权限,数字代号为“1”; - 不具任何权限,数字代号为“0”; s 特殊功能说明:变更文件或目录的权限。

777 代表: rwxrwxrwx ,意思是该登录用户(可以用命令 id 查看)、他所在的组和其他人都有最高权限。

r=4,w=2,x=1 

若要 rwx 属性则 4+2+1=7;
若要 rw- 属性则 4+2=6; 若要 r-x 属性则 4+1=5。 

  -rw------- (600) -- 只有属主有读写权限。  
  -rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。  
  -rwx------ (700) -- 只有属主有读、写、执行权限。  
  -rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。  
  -rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。  
  -rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。  
  -rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。 
  1. 查看 Linux 系统位数

方法一:

  file /sbin/init 或者 file /bin/ls

方法二:

  uname -a

方法三:

  getconf LONG_BIT

  1. 查看内核数 方法一:
  cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

方法二:

  cat /proc/cpuinfo |grep "processor"|wc -l	

  1. 查看磁盘大小

    df -h
    

    df -hl 查看磁盘剩余空间 df -h 查看每个根路径的分区大小 du -sh [目录名] 返回该目录的大小 du -sm [文件夹] 返回该文件夹总 M 数

    更多功能可以输入一下命令查看:

    df –help du –help

  2. 查看内存大小

  free -m  按M计算

  1. 查看 CPU 使用率

实时 CPU 使用率:

  top	

CPU 处理器使用率:

  cat  /proc/stat cpu

平均 CPU 使用率:

  cat  /proc/loadavg

  1. 查看 CPU 基本信息

    cat /proc/cpuinfo
    

命令 Crontab

linux 自带的定时任务

  1. 查看是否安装了 crontab
    rpm -qa | grep crontab
    
  2. 服务启动、关闭
    启动:/etc/init.d/crond start
    关闭:/etc/init.d/crond stop
    重启:/etc/init.d/crond restart
    重新载入配置:/etc/init.d/crond reload
    
  3. 配置文件

在 etc/目录下存在 cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d 五个目录和 crontab,cron.deny 二 个文件

  1. 查看 cron
    crontab -l
    
  2. 编辑
    crontab -e
    

新增用户

1.新增用户 username

sudo useradd username

2.给用户 username 设置密码:

sudo passwd username

useradd 命令添加用户,则默认用户名和组都是相同的名称;
/etc/passwd 文件纪录的系统所有用户列表;
/etc/group 文件纪录系统的组信息。

3.将用户添加到 wheel 组,否则无法使用 sudo 命令

sudo usermod -G wheel username

4.查看用户所属组

groups

禁止 root 远程登录

1.修改 ssh 配置文件:sudo vi /etc/sshd_config,将 PermitRootLogin 设置为 no

2.重启 ssh 服务:sudo systemctl restart sshd

文档信息

Search

    Table of Contents