linux常用命令简单操作

文件传输

scp

secure copy (remote file copy program)

scp [-pr] [-l 速率] file  [账号@]主机:目录名 <==上传
scp [-pr] [-l 速率] [账号@]主机:file  目录名 <==下载
scp -P端口 /path/to/file 127.0.0.1:/path/to/file

文件

lsof

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

lsof [options] filename

# 使用lsof来查看当前是否有进程打开/var/logmessages文件
lsof |grep /var/log/messages 
# 在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息
head -n 10 /proc/1283/fd/2 
# 使用 I/O 重定向将其复制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages

lsof `which httpd` //那个进程在使用apache的可执行文件
lsof /etc/passwd //那个进程在占用/etc/passwd
lsof /dev/hda6 //那个进程在占用hda6
lsof /dev/cdrom //那个进程在占用光驱
lsof -c sendmail //查看sendmail进程的文件使用情况
lsof -c courier -u ^zahn //显示出那些文件被以courier打头的进程打开,但是并不属于用户zahn
lsof -p 30297 //显示那些文件被pid为30297的进程打开
lsof -D /tmp 显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列

lsof -u1000 //查看uid是100的用户的进程的文件使用情况
lsof -utony //查看用户tony的进程的文件使用情况
lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思)
lsof -i //显示所有打开的端口
`lsof -i:80 //显示所有打开80端口的进程`
lsof -i -U //显示所有打开的端口和UNIX domain文件
lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接
lsof -i tcp@ohaha.ks.edu.tw:ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新)
lsof -i tcp@ohaha.ks.edu.tw:ftp -n //lsof -n 不将IP转换为hostname,缺省是不加上-n参数

lsof +c 15 | awk '{print $1}' | sort | uniq -c | sort -rn | head //查看打开文件数量最多的15个进程
lsof -Pni4 | grep LISTEN 检查开放的端口

文件处理工具

sort

是默认以第一个数据来排序,而且默认是以字符串形式来排序

cat /etc/passwd | sort

uniq

去除排序过的文件中的重复行

uniq [-icu]

-i :忽略大小写字符的不同;
-c :进行计数
-u :只显示唯一的行
cat words | sort |uniq

cut

从一个文本文件或者文本流中提取文本列

-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;

cut -d'分隔字符' -f fields <==用于有特定分隔字符
cut -c 字符区间            <==用于排列整齐的信息

echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
# 1 | 2       | 3   | 4       | 5            | 6            | 7
将 PATH 变量取出,我要找出第三和第五个路径
echo $PATH | cut -d ':' -f 3,5
/sbin:/usr/local/bin

wc

统计文件里面有多少单词,多少行,多少字符

wc [-lwm]
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;

wc /etc/passwd
40   45 1719 /etc/passwd
40是行数,45是单词数,1719是字节数

awk

分析access.log获得访问前10位的ip地址
awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10

sed

sed [-nefri] command 输入文本

-n 使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来;
-e 直接在指令列模式上进行 sed 的动作编辑;
-f 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r sed 的动作支援的是延伸型正规表示法的语法;
-i 直接修改读取的档案内容,而不是由屏幕输出。

a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d 删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
删除某行
sed '1d' ab #删除第一行 
sed '$d' ab #删除最后一行
sed '1,2d' ab #删除第一行到第二行
sed '2,$d' ab #删除第二行到最后一行
sed 's/^[ \t]*//' ab 删除每行开头的空白

删除匹配行
sed -i '/匹配字符串/d'  filename

显示某行
sed -n '1p' ab #显示第一行 
sed -n '$p' ab #显示最后一行
sed -n '1,2p' ab #显示第一行到第二行
sed -n '2,$p' ab #显示第二行到最后一行

sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行
sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

sed '1a drink tea' ab  #第一行后增加字符串"drink tea"
sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n

sed '1c Hi' ab #第一行代替为Hi
sed '1,2c Hi' ab #第一行到第二行代替为Hi

替换一行中的某部分
sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替换ruby为bird
sed -n '/ruby/p' ab | sed 's/ruby//g'        #删除ruby

插入
sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye"

替换匹配行中的某个字符串
sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename 

xargs

eXtended ARGuments

xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments

find /etc -name "*.conf" | xargs ls –l
cat url-list.txt | xargs wget –c
find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f

查看硬件信息

lscpu

lscpu 查看的是cpu的统计信息
cat /proc/cpuinfo 查看每个cpu的信息

free

free -m  查看内存情况
free -ml -s 1  每秒以M为单位,显式系统内存详细使用情况。
free -c 4 -s 2  为KB为单位,每2秒显式系统内存使用情况,一共显示4次
cat /proc/meminfo

lsblk

lsblk 查看硬盘信息
fdisk -l 查看硬盘和分区的详细信息

lspci

lspci | grep -i 'eth' 查看网卡硬件信息
lspci 查看pci信息,即主板所有硬件槽信息
lspci -v 或者 lspci -vv 详细信息
lscpi -t 设备树

ifconfig

ifconfig -a 查看网络接口
ip link show
ethtool eth0 查看某个网络接口的详细信息

dmidecode

dmidecode以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息

dmidecode -t memory 查看内存硬件信息
dmidecode -t bios 查看bios
dmidecode -q 查看所有有用信息

网络

netstat

用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等

netstat -a

列出所有 tcp 端口 
netstat -at

列出所有 udp 端口 
netstat -au

只显示监听端口 
netstat -l

只列出所有监听 tcp 端口 
netstat -lt

只列出所有监听 udp 端口 
netstat -lu

只列出所有监听 UNIX 端口 
netstat -lx

显示所有端口/TCP/UDP的统计信息 
netstat -s
netstat -st
netstat -su

显示 PID 和进程名称 
netstat -p

netstat 输出中不显示主机,端口和用户名 (host, port or user)
netstat -an

显示核心路由信息 
netstat -r

找出程序运行的端口
netstat -ap | grep ssh
netstat -an | grep ':80'

显示网络接口列表
netstat -i

TCP各种状态列表
netstat -nat |awk '{print $6}'
使用uniq -c统计
netstat -nat |awk '{print $6}'|sort|uniq -c
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

IO

iotop

每个进程是如何使用IO

iostat

iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
iostat -d -k 2
参数 
-d 表示,显示设备(磁盘)使用状态;
-k某些使用block为单位的列强制使用Kilobytes为单位;
2表示,数据显示每隔2秒刷新一次

iostat -d sda 2
只监控sda
iostat -d -x -k 1 10  
-x用于显示和io相关的扩展数据

iostat -c 1 10
查看cpu状态

进程

pidstat

pidstat [option] interval [count]
pidstat 2 10
以2秒为采样周期,输出10次cpu使用统计信息

pidstat -r -p 13084 1
内存使用情况统计(-r)
针对特定进程统计(-p)

pidstat -d 1 2
查看进程IO的统计信息

pidstat -u 1
pidstat -r 1
pidstat -d 1
以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息

pstree

pstree -Gap
显示所有运行进程的进程树

ps

ps aux | grep php
ps -ef | grep $USER 寻找所有在你的用户名下运行的进程
ps -efa | grep php | grep -v grep | awk '{ print $2 }' |xargs 获取程序名的pid

性能分析工具

top

top [-] [d] [p] [q] [c] [C] [S] [s]  [n]

top   //每隔5秒显式所有进程的资源占用情况
top -d 2  //每隔2秒显式所有进程的资源占用情况
top -c  //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

按1显示具体cpu使用情况

CPU

mpstatl

Multiprocessor Statistics的缩写,是实时系统监控工具,信息存放在/proc/stat文件中

mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。

mpstat [-P {|ALL}] [internal [count]]
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间、
count 采样的次数,count只能和delay一起使用

mpstat  -P ALL 2

vmstat

整个机器的CPU,内存,IO的使用情况

vmstat 2 1
2表示每个两秒采集一次服务器状态,1表示只采集一次

查找文件

find

find /path/to/dir -type f -print0 | xargs -0 grep -l "foo"
递归列出包含给定搜索字符串的文件
find / -type f -size +548576 -printf "%s:%h%f\n"
列出500m的文件
find . -maxdepth 1 -type f -size +1M -printf "%f:%s\n" | sort -t":" -k2
显示排序列表文件的大小超过1MB的当前目录
find . -depth -print -execdir rename -f 'y/A-Z/a-z/' '{}' \;
递归的重命名文件为小写
find . -name "*.py" | xargs wc -l
递归的查找当前目录下所有以"py"为后缀的文件,统计其行数
find . -type f -printf "%T@ %Tc %p\n" |sort -n |cut -d' ' -f2- |tail -n20
显示最新修改的20个文件
linux7