基础命令

查看文件

图片说明

cat 命令

作用:输出整个文件的内容,不论大小。

使用场景:适用于查看小文件,比如 50 行以内,如果文件过大,全部输出不利于查看。

实例:

cat 文件名 #查看文件内容

more 命令

作用:以分页的方式来显示内容,左下角显示百分比,通过空格或回车向下浏览,显示到文件结尾命令则退出

使用场景:顺序浏览较大文件。

实例:

more 文件名 #分页查看文件内容 ls -alh  /bin | more #通过管道 分屏显示 bin 目录下内容

使用场景:随意查看文件,并有搜索需求时。

实例:

less 文件名 #随意浏览文件

less 命令

作用:随意浏览文件,通过光标上下键查看所需内容,命令不会退出。在查看过程中,可以通过/ +关键字搜索内容。q退出。

head 命令

作用:显示文件开头某个数量的内容,默认前 10 行。

使用场景:需要显示文件的前几行时,比如一个文件介绍信息一般都在前几行。

实例:

ps -ef | head #显示前 10 条进程 head 文件名 #默认前 10 行 head -n 文件名 #显示文件前 n 行 

tail 命令

作用:显示文件末尾某个数量的内容,默认后 10 行。

使用场景:查看文件末尾内容时,比如最新的日志。

实例:

tail 文件名 #默认显示文件后 10 行 tail -100 文件名 #显示后 100 行 tail -f 100 文件名 #循环读取新内容

 文件处理



Vim

文本编辑器, Vim 是 Vi 的改进版本,功能强大,自动补全,高亮等等功能。

编辑器各个模式:

  • 命令模式:vim 文件名进入命令模式
  • 插入模式:按i进入插入模式,编辑内容,esc 退出
  • ex 模式:按:进入 ex 模式,进行文件的保存和退出,esc 退出。w:保存文件q:退出程序
  • 可视模式:按v进入可视模式,该模式下可以快速移动、选中内容等操作,esc 退出

grep

文本过滤,用于查找文件里符合条件的字符串。

用法:

grep 关键字 文件名 #搜索文件里关键字 grep -v 关键字 文件名 #排除关键字内容显示 

实例:

grep insert log.file   #查找 log.file 文件中的 insert 关键字内容

wc

文本统计,用于计算字数。

用法:

wc 文件名 #统计文件字节数、字数、行数 wc -l 文件名 #只统计文件行数 

实例:

wc mylog.file

sed

利用 script 处理文本内容,可以对文件内容进行替换、删除空白行等正则功能。该功能非常强大,我们只写一两种常用用法。

实例:

sed 's/This/That' test.txt #替换文件中 This 为 That sed 2g test.txt #删除文件第二行 sed '/^$/d' test.txt #删除空白行

uniq

删除文本重复行,用于检测和删除文本文件中重复出现的行列。

实例:

uniq test.txt #删除重复的行 uniq -c test.txt #统计重复的行 uniq -d test.txt #只显示重复的行

AWK

是一种处理文本文件语音强大的分析工具,AWK 提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数***算符、进程控制语句甚至于内置的变量和函数。

用法:

awk '{[pattern] action}' {filenames} #行匹配语句 awk '' 只能用单引号 awk -F #-F 相当于内置变量 FS,指定分割字符 awk -f {awk 脚本} {文件名}

实例:

awk '{print $1,$4}' log.txt #每行按空格或 TAB 分割,输出文本中的 1、4 项 awk -F, '{print $1,$2}' log.txt #使用","分割 awk 'length > 80' log.txt #查看长度大于 80 字节的日志信息  


文件的传输与查找


Linux 与 Windows、Mac 传输文件

rz、sz 命令是 Linux 与 Windows、Mac 传输文件的命令行工具。

安装:需要安装 lszrz 包。

yum -y install lszrz

使用方法(前提:SSH 工具支持 ZModem)

上传:

rz -e #会弹出文件选择对话框,选择文件,确定后就会上传 

下载:

sz 文件名 #发送文件到 Windows、Mac 上

Linux 间传输文件

scp 命令是 Linux 系统下基于 SSH 登录进行安全的远程文件拷贝命令。

用法:

scp [可选参数] file_source file_target 
scp local_file remote_username@remote_ip:remote_folder #从本地复制到远程 scp local_file remote_username@remote_ip:remote_file #从本地复制到远程 scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator #

文件查找

find 命令用来在指定目录下查找文件。

用法:

find . -name "*.c" #将目前目录及其子目录下所有延伸档名是 c 的文件列出来 find . -type f #将目前目录其其下子目录中所有一般文件列出 find . -ctime -20 #将目前目录及其子目录下所有最近 20 天内更新过的文件列出 

查看当前目录

pwd 命令用于显示工作目录。

用法:

pwd #查看当前所在目录 pwdx 进程号 #查看进程执行路径  

进程管理

ps 命令

用于显示当前进程的状态。

实例:

ps -ef | grep http #查看 http 进程状态 ps -ef|grep java #查看 java 进程状态 ps -A #列出所有的进程 ps -u root #显示指定用户信息 ps xH #查看所有存在的线程 

top 命令

用于实时显示进程的状态,CPU 使用率、内存使用率、load average。

实例:

top #显示 cpu 使用率、内存使用率、load average 和 各个进程状态

ps 命令

用于显示当前进程的状态。

实例:

ps -ef | grep http #查看 http 进程状态 ps -ef|grep java #查看 java 进程状态 ps -A #列出所有的进程 ps -u root #显示指定用户信息 ps xH #查看所有存在的线程 

top 命令

用于实时显示进程的状态,CPU 使用率、内存使用率、load average。

实例:

top #显示 cpu 使用率、内存使用率、load average 和 各个进程状态

top -p 进程号 #查看指定进程的实时状态
 top -Hp 进程号 #x 显示进程的线程信息

kill 命令

发送指定信号到进程,用于删除执行中的程序或工作。

实例:

kill 进程号 #杀死进程 kill -HUP 进程号 #发送 SIGHUP 信号,动态更新服务配置 kill -9 进程号 #彻底杀死进程

nohup 命令

不挂断的运行命令。

用法:

nohup ./start.sh &
nohup ./start.sh > start.log &

实例:后台运行 jar 包命令

nohup java -jar my-iot-1.0-SNAPSHOT.jar > mylog.file 2>&1 &

lsof 命令

用户查看进程打开的文件、打开文件的进程、进程打开的端口。

知识背景:在 Linux 环境下,任何事物都以文件的形式存在。

安装:

yum install lsof

实例

查看端口打开的进程信息:

lsof -i:端口号  比如:lsof -i:8080 

开启文件的进程:

lsof 文件名

列出进程号所打开的文件:

lsof -p 进程号

系统信息查看


hostname 命令

设置主机名,系统并不会永久保存新的主机名,永久修改需要修改配置文件。

实例:

hostname #查询本机的主机名 hostname 主机名 #设置新的主机名 

uptime 命令

该命令能够打印出系统总共运行了多长时间和系统平均负载。

实例:输入命令 uptime,输出入下图。

iostat 命令

用于输出 CPU 和磁盘 IO 的相关信息。

实例

查看所有磁盘 IO,输入命令:

iostat 

查看 sda 硬盘,每次隔 2 秒,查看 5 次,命令:

iostat sda 2 5 

du、df 命令

查看磁盘容量。

两者命令区别:

  • du 查看目录大小
  • df 磁盘使用情况

查看磁盘容量的使用情况,直接输入 df。

df -h #同 df,但会格式化文件大小的单位

网络相关




ifconfig 命令

用于显示或设置网络设备。

实例:
  • 查看活动网卡命令:ifconfig
  • 查看指定网卡 eht0 命令:ifconfig eth0
  • 查看所有网卡命令:ifconfig -a

netstat 命令

用于显示网络状态。

实例

查看路由表命令:

netstat -rn

显示协议统计信息和当前 TCP/IP 网络连接命令:

netstat -n

查看某端口命令:

netstat -antulp | grep :80 

查看所有监听端口命令:

netstat -antulp | grep LISTEN

ss 命令

可以用来获取 socket 统计信息,它可以显示和 netstat 类似的内容。

相比 netstat 优点:快!利用到了 TCP 协议栈中 tcp_diag,当 socket 连接数据非常大时,用 netstat 就是浪费生命。

实例:

显示 tcp 连接信息命令:

ss -t -a

显示 Sockets 摘要命令:

ss -s

列出所有打开的网络连接端口命令:

ss -l

查看进程使用的 socket 命令:

ss -pl

找出打开套接字/端口应用程序命令:

ss -lp | grep 3306

DNS 相关命令

DNS 查询

dig 命令

dig www.baidu.com #基本用法 dig -x 240.23.12.44 #查看反向解析 dig trace baidu.com #从根服务器开始解析一个域名的解析情况

nslookup 命令

nslookup baidu.com #直接查询 nslookup 240.12.12.44 #反向查询

DNS 问题排查:

  1. 用户侧不能访问,运维侧可以访问,一般是用户 DNS 设置问题
  2. 用户侧和运维侧同时不能访问,检查 DNS 服务器是否能 ping 通、查看 DNS 服务器的 53 端口是否可用

日志查看

常用日志文件目录:

  • 系统启动后的信息和错误日志:/var/log/message
  • 与安全相关的日志:/var/log/secure
  • 与定时任务相关的日志:/var/log/corn
  • 守护进程启动和停止相关的日志消息:/var/log/boot.log
  • 该日志文件永久记录每个用户登录,注销,系统的启动与停机的事件:/var/log/wtmp

CPU 飙高和频繁 GC 用什么命令怎么查

首先导致 CPU 飙升的原因有哪些?

  • 代码可能存在死循环
  • 频繁的 GC
  • 多线程频繁上下文切换或过多的可运行状态线程
通过 top命令查看哪个进程导致 CPU 飙升:

然后通过 top -Hp 进程号 查看进程的线程情况:

top -Hp 16783 

如果是 Java 进程导致,找到线程号,通过 jstack pid |grep tid(线程号得转换为 16 进制):

# 线程号 10 转为 16 进制为 a jstack 16783 | grep a

如果线程为 GC 线程(如下图),则通过 jstat 分析和 jmap dump内存日志来分析内存情况:

通过 jstat 查看垃圾回收情况,确认是否频繁 FGC 导致的问题:

# 2 秒一次打印垃圾回收情况 jstat -gc 16783 2000 

如果确定是 FGC 导致的问题,则通过 jmap dump 内存(文件可能比较大),通过本地工具来分析:

jmap -dump:format=b,file=/my.dump 16783
如果导致 CPU 飙升不是频繁的 FGC,则可能遇到程序中代码运算耗时情况,这种情况,我们通过 jstack 得到线程具体的堆栈信息,结合堆栈信息中定位到的代码行数,应该比较容易分析原因。