linux一些常用命令

  26 May 2017


帮助文档

man 命令
命令 --help

find

find path -option [-print] [-exec -ok command]{}\
    -option
        -name 通过名字查找
        -user 通过用户查找
        -perm 通过权限查找
        -prune 忽略某个目录
    -print:find命令将匹配的文件输出到标准输出。
    -exec:find命令对匹配的文件执行该参数所给出的shell命令
    -ok:和-exec的作用相同,但会给予提示。

// 示例:
	find -name test.txt 	在当前目录查找文件名是text.txt的文件
	find /data -name text*  在data根目录下查找文件名以text开头的文件
	find /data -empty       查找大小为0的文件或空目录
	find /data -mtime -2	查找最后两天访问文件
	fnid /data -mmin  -10	查找最后十分钟访问文件
	find 
		
通配符号
*:匹配任意长度的任意字符;
?:匹配任意单个字符;
[ ]:匹配指定集合内的任意单个字符;
[a-z], [A-Z]:不区分字符大小写;
[0-9]
[a-z0-9]
[[:upper:]]:所有大写字母;
[[:lower:]]:所有小写字母;
[[:digit:]]:所有的数字;
[[:alpha:]]:所有字母;
[[:alnum:]]:所有字母和数字;
[[:space:]]:空白字符;
[[:punct:]]:标点符号;
[^ ]:匹配指定集合外的任意单个字符;

locate

1.locate类似find -name,但是快很多
    原因:不搜索具体目录,搜索数据库:/var/lib/locatedb
2.该数据库,系统自动创建,每天更新一次,所以查询不到最新的数据;
3.可以使用:updatedb来手动更新数据库
示例:
locate /etc/sh			查询/etc目录下sh开头文件
locate /data/*.md		查询/data目录下扩展名是md的文件
locate /data/*mark*.md 	    查询/data目录下,扩展名是md且名称含有mark的文件

wget

//添加header
wget --header='X-Requested-With:XMLHttpRequest' http://liangzai.pub
//设置代理
wget -e "http_proxy=http://10.11.4.4:3128/" http://liangzai.pub

curl

curl 'http://liangzai.pub'

curl -o a.txt http://liangzai.pub //将curl的内容保存到 a.txt文件中(或下载文件)
curl -O http://liangzai.pub		// 默认文件名 
curl http://liangzai.pub > a.txt	//将curl的内容重定向到 a.txt文件中
curl -x 127.0.0.1:8118	http://httpbin.org/ip	// 设置代理ip
curl --socks5 127.0.0.1:8080 http://httpbin.org/ip 	// 设置socks5代理ip

scp-服务器之间复制

//本地至远程
scp local_file remote_username@remote_ip:remote_folder
//远程至本地
scp remote_username@remote_ip:remote_file local_folder
 
scp /data/a.txt root@1.1.0.1:/data/

-v 显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 . 
-C 使能压缩选项 . 
-P 选择端口 . 注意 -p 已经被 rcp 使用 . 
-4 强行使用 IPV4 地址 . 
-6 强行使用 IPV6 地址 .
-r 复制目录,递归

1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体端口视情况而定:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

more less

less test.log
	空格[PgDn]:向下翻页
	PgUp:向上翻页
	b:往回翻页,只对文件有效,对管道无效
	=:显示行号
	q:离开
	/:向下查询
	?:向上查询
	n:重复前一个查询
	N:反复重复前一个查询

nohup

后台运行(默认日志输出到nohup.out里):
	nohup ./startup.sh &
	
	只输出错误信息到日志文件
	nohup ./startup.sh 1>/dev/null 2>log &
	什么信息也不要
	nohup ./startup.sh 1>/dev/null 2>&1 &

关于Linux的3种重定向
    0:表示标准输入
    1:标准输出,在一般使用时,默认的是标准输出
    2:标准错误信息输出

    a.将某个程序的错误信息输出到log文件 中:./program 2>log。
      这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
    b.0,1,2之间的重定向:
    	2>&1:将错误信息重定向到标准输出。

关于/dev/null文件
    Linux下还有一个特殊的文件/dev/null,像一个无底洞,所有重定向到它的信息都会消失得无影无踪。

ps

	ps [options][--help]:显示瞬间进程(process)的动态信息
		-A		列出所有进程
		-a      显示现行终端机下的所有进程,包括其他用户的进程;
		-e		类似-A
		-u      以用户为主的进程状态 ;
		-au		显示较详细的资讯
		-aux	显示所有包含其他使用者的进程
		
		ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外
		ps -A 显示所有程序
		ps -aux | grep "java"	过滤进程
		ps -ef | grep "java"	过滤进程


进程5种状态:
	D 不可中断 uninterruptible sleep (usually IO)
	R 运行 runnable (on run queue)
	S 中断 sleeping
	T 停止 traced or stopped
	Z 僵死 a defunct (”zombie”) process

netstat 监听端口

netstat -an | grep "端口号"
	-a (all)显示所有选项,默认不显示LISTEN相关
	-t (tcp)仅显示tcp相关选项
	-u (udp)仅显示udp相关选项
	-n 拒绝显示别名,能显示数字的全部转化成数字。
	-l 仅列出有在 Listen (监听) 的服務状态
	
	-p 显示建立相关链接的程序名
	-r 显示路由信息,路由表
	-e 显示扩展信息,例如uid等
	-s 按各个协议进行统计
	-c 每隔一个固定时间,执行该netstat命令。
	提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

	1. netstat -a	列出所有端口 (包括监听和未监听的)
	   netstat -at	列出所有 tcp 端口 
	   netstat -au	列出所有 udp 端口 
	2. 列出所有处于监听状态的 Sockets
	   netstat -l 	只显示监听端口
	   netstat -lt	只列出所有监听 tcp 端口 
	   netstat -lu	只列出所有监听 udp 端口
	
	lsof -i | grep "端口号"通过查询网络堆栈列举正在监听网络的端口

alias命令别名

alias 显示所有别名
alias rm='rm -i'
alias cp='cp -ir'
alias mv='mv -i'
alias rmf='rm -Rf'
alias ns='netstat -tunlp'
alias tl='tail -f -n 100'
alias x='chmod u+x'
alias rc='/root/bin/redis-cli'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -lahF'
alias ls='ls --color=auto'
alias pg='ps -aux | grep -v grep | grep '
alias vi='vim'
alias scp='scp -r'

文件大小,磁盘占用

du 选项 目录/文件 目录/文件
    -b或显示目录或文件大小时,以byte为单位
    -k或以KB(1024bytes)为单位输出。
    -m或以MB为单位输出。
    
    -a所有
    -c除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
    -h以K,M,G为单位,提高信息的可读性。
    -s仅显示总计,只列出最后加总的值。
    -S显示目录的大小时,并不包含其子目录的大小。

    #降序排序查看
    du -h /data/ | sort -hr | more			#分页查看
	du -h /data/ | sort -hr | head -n 10	#只显示前10条
    
df 选项 文件
    -a 全部文件系统列表
    -h 方便阅读方式显示
    -i 显示inode信息
    -l 只显示本地文件系统
    
    -k 区块为1024字节
    -m 区块为1048576字节

    -P 输出格式为POSIX
    -T 文件系统类型
    
    df -hl  查看所有磁盘使用状况
    

sort排序

-n按字符串数值排序,与-g区别为不转为浮点数
-g按通用数值排序,支持科学计数法
-f忽略大小写,默认大小写字母不同
-t指定列的分割符
-r降序排序,默认为升序
-h使用易读性数字(例如: 2m 1G)
-u去除重复的行
-o将输出写入文件

sort num.txt -n
sort word.txt -o word.txt

watch监测命令的运行结果

watch[参数][命令]
-n  执行间隔时间,默认2秒
-d  高亮显示变化的区域。 
-t  关闭watch命令在顶部的时间间隔,命令,当前时间的输出。


#每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d netstat -ant
#每隔一秒高亮显示http链接数的变化情况
watch -n 1 -d 'pstree|grep http'
#2秒一次输出系统的平均负载
watch 'cat /proc/loadavg' 
#连续监视内存使用状况
watch -d free -h

wc统计

wc [选项]   文件...

-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。


#字数统计
cat a.txt | wc -m

ssh

ssh 10.10.89.113 -p   端口  -l   用户名
sudo apt-get install openssh-server		安装
ps -e | grep ssh			如果看到sshd那说明ssh-server已经启动
ssh-server				配置文件位于	/etc/ssh/sshd_config
/etc/init.d/ssh restart		启动
service sshd start			启动
service sshd restart		重启
netstat -tlp | grep ssh		监听是否启动

VMbox ubuntu 共享文件夹
sudo mount –t vboxsf share  /data		注意:/data挂载后路径,share挂载文件夹名字
启动机器自动挂载:
sudo gedit /etc/fstab
share /data vboxsf rw,gid=100,uid=1000,auto 0 0

查看公网IP

curl members.3322.org/dyndns/getip

nginx

#启动nginx:
nginx -c /etc/nginx/nginx.conf

#重新加载配置|重启|停止|退出 nginx
nginx -s reload|reopen|stop|quit  
#检查配置文件是否正确
nginx -t

#同上
service nginx start|reload|restart|stop|status

squid

squid -k parse 	#检查squid.conf是否有误
squid -s 		#后台运行
squid -k shutdown	#关闭
squid -z 			#初始化缓存空间,缓存目录为squid.conf配置的cache目录

grep

grep [options]
    -c:只输出匹配行的计数。
    -I:不区分大 小写(只适用于单字符)。
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -L:和-l相反
    -n:显示匹配行及 行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
    -o:只显示匹配的内容
    -e:匹配多个词,如:grep -e 'k1' -e 'k2' test.log
	-a:以文本文件方式搜索
    -w:只匹配整个单词,而不是单词的一部分
    -B:显示匹配行前多少行内容
    -A:显示匹配行后多少行内容
    -C:显示匹配行前后多少行内容
    -E:使用扩展正则表达式,和egrep功能相同
    -F:不使用正则表达式,和fgrep功能相同,速度更快


zgrep 用法和grep一致,不过可以搜索压缩文件,如zgrep 'html' xx.gz

xargs

xargs能够捕获一个命令的输出,然后传递给另外一个命令
	-0:将特殊字符当成一般字符处理
	-p:运行每个命令是,会询问使用者的意思
	-n:后面接次数,每次commend命令运行时,传递几个参数。
	-e:后面接flag,即碰到flag终止
	-t:先打印命令再执行


#删除所有data目录下.log文件
find /data -name '*.log' | xargs rm -rf
#读取urllist文件,并一次一个通过wget获取
cat url-list.txt | xargs -n 1 wget –c
#查找data目录下所有图片,并压缩
find /data -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz



exec和xargs有类似功能:
	exec每处理一个文件或目录,都启动一次命令,效率不好
	xargs是处理完所有文件或目录后批量执行命令
	xargs 不能操作文件名有空格的问题
	
	exec格式麻烦,必须用{}做文件的代位符,必须用" \;"作为命令的结束符,书写不变

	-ok和-exec的作用、格式一样,但是更安全,会给出提示让用户选择是否执行;


示例:寻找passwd文件,并查找文件内是否有root关键字
	find /etc/ -name "passwd" -exec grep "root" {} \;
	find /etc/ -name "passwd" | xargs grep "root"

tar

格式:tar 选项 文件目录
功能:对文件目录进行打包
选项:
	-c建立新的归档文件
	-r向归档文件末尾追加文件
	-x从归档文件中解压出文件
	-O将文件解压缩到标准输出
	-v处理过程中输出相关信息
	-f对普通文件操作
	-z调用gzip来压缩归档文件,与-x联用是调用gzip完成解压缩
	-Z调用compress来压缩归档文件,与-x联用时调用compress完成解压缩

示例:
	tar czvf this.tar.gz ./*.txt	//将当前目录所有txt文件打包
	tar xzvf this.tar.gz ./			//将this.tar.gz解压到当前目录

.tar:
	解压:tar xvf name.tar  解压至目录
	打包:tar cvf name.tar  被打包目录或文件

总结
	1、*.tar 用 tar –xvf 解压
	2、*.gz 用 gzip -d或者gunzip 解压
	3、*.tar.gz和*.tgz 用 tar –xzf 解压
	4、*.bz2 用 bzip2 -d或者用bunzip2 解压
	5、*.tar.bz2用tar –jxvf 解压
	6、*.Z 用 uncompress 解压
	7、*.tar.Z 用tar –xZf 解压
	8、*.rar 用 unrar x解压;;unrar e 是解压所有文件至同一个目录
	9、*.zip 用 unzip  解压 

	zip -r  ./* a.zip:将当前目录下所有文件打包为a.zip
	unzip a.zip -d 解压至目录

crontab 定时

crontab [-u username] [-e|-l|-r]

-u 	只有root有此权限,为其他用户创建/移除任务,如:crontab -u crawler -l(查看crawler用户定时任务)
-e	编辑crontab定时任务
-l	查看crontab定时任务
-r	移除所有定时任务

定时格式:
	分 时 日 月 周 脚本命令
	
	分:0-59
	时:0-23
	日:1-31
	月:1-12
	周:0-7(0和7都是周日)
		

	*	任何时候
	,	选择多个时间	1,2,3 * * * * command(每1,2,3分钟的时候执行一次)
	-	选择区间		00 7-10	* * * command(每7点到10点整执行一次)
	/n	间隔执行		*/5	* * * 6,7 command(周六周日的每5分钟执行一次)

stat

stat	 显示指定文件的详细信息,比ls更详细
	-f 不显示文件本身信息,显示文件所在系统信息
	-L 显示符号链接
	-t 只显示摘要信息

ln(选项)(参数)

-d或-F或——directory:建立目录的硬连接(默认); 
-s或——symbolic:对源文件建立符号连接(类似windows快捷方式);

-v或——verbose:显示指令执行过程; 
-i或——interactive:覆盖既有文件之前先询问用户; 
-f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; 


硬链接:
	硬连接允许一个文件拥有多个有效路径名,指向同一个索引节点,防止文件被误删,文件连接数为0时,才会被物理删除;
	只能对文件创建硬链接,不能对目录创建硬链接,不会跨文件系统,修改时间一致;
	硬链接文件和源文件具有相同的inode号,可以利用find的-inum参数和-samefile参数来查找。

软连接:
	删除源文件或目录,只删除了数据,不会删除软链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据;
	软链接的大小是其链接文件的路径名中的字节数,文件保存源文件路径信息;


根据源文件查找软连接
	find /data -type l -exec ls -l {} \; | grep "源文件名称"
根据源文件查找硬链接
	1. find /data -inum 1448151
	(1448151是Inode号码,可以用stat 文件名 查看)
	2. find /data/ -samefile /data/a.txt
	(查找和/data/a.txt相同Inode号的文件,即其硬链接)

查找/data目录下所有软连接
	find /data -type l -exec ls -l {} \;
	find /data -type l | xargs ls -l


命令:
	ln -s /data/storm-0.9.6  /data/storm   //建立软连接storm
注意:
	删除软连接:    rm -rf /data/storm
	错误删除软连接:rm -rf /data/storm/    (删除的是/data/storm/路径下所有文件,非软连接)
	覆盖软连接:	ln -sf /data/storm-1.2.1  /data/storm


快捷键

Tab:   文件名、路径自动补全
Ctrl+A:将光标移动到命令行的开始处。
Ctrl+E:将光标移动到命行令的结尾处。
Ctrl+U:删除行首到光标出的字符。
Ctrl+C:命令中断。
Ctrl+S:终端静止、发呆。
Ctrl+Q:退出终端静止。

iotop

监控每个进程的磁盘IO使用情况
iotop(选项)
	-o:只显示有io操作的进程 
	-b:批量显示,无交互,主要用作记录到文件。 
	-n NUM:显示NUM次,主要用于非交互式模式。 
	-d SEC:间隔SEC秒显示一次。 
	-p PID:监控的进程pid。 
	-u USER:监控的进程用户。

快捷键
	左右箭头:改变排序方式,默认是按IO排序。 
	r:改变排序顺序。 
	o:只显示有IO输出的进程。 
	p:进程/线程的显示方式的切换。 
	a:显示累积使用量。 
	q:退出。

top

第一行:类似uptime
第二行:任务(进程)
	 running:运行 
	 sleeping:休眠
	 stopped:停止
	 zombie:僵死

第三行:cpu状态信息
	us — 用户空间占用CPU的百分比。
	sy — 内核空间占用CPU的百分比。
	ni — 改变过优先级的进程占用CPU的百分比
	id — 空闲CPU百分比
	wa — IO等待占用CPU的百分比
	hi — 硬中断(Hardware IRQ)占用CPU的百分比
	si — 软中断(Software Interrupts)占用CPU的百分比

第四行:内存状态,同free
	total — 物理内存总量
	used — 使用中的内存总量
	free — 空闲内存总量
	buffers — 缓存的内存量

第五行:swap交换区信息
	total — 交换区总量
	used — 使用的交换区总量
	free — 空闲交换区总量
	cached — 缓冲的交换区总量

其他:进程(任务)状态监控
	PID — 进程id
	USER — 进程所有者
	PR — 进程优先级
	NI — nice值。负值表示高优先级,正值表示低优先级
	VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
	RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
	SHR — 共享内存大小,单位kb
	S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
	%CPU — 上次更新到现在的CPU时间占用百分比
	%MEM — 进程使用的物理内存百分比
	TIME+ — 进程使用的CPU时间总计,单位1/100秒
	COMMAND — 进程名称(命令名/命令行)
	

交互命令:
	1 显示所有CPU的状态(CPU个数)
	i 忽略闲置和僵死进程。
	d 设置刷新时间
	n 设置最大显示任务数量
	q 退出
	h 帮助
	M 根据驻留内存大小进行排序
	P 根据CPU使用百分比大小进行排序
	T 根据时间/累计时间进行排序
	A 切换交替显示模式
		Def(默认字段组)
		Job(任务字段组)
		Mem(内存字段组)
		Usr(用户字段组)

free

参  数:
-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-h   以比较人性化的方式显示内存使用情况。
-o  不显示缓冲区调节列。
-s   <间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-c	 重复次数


> free -h
              total        used        free      shared  buff/cache   available
Mem:           992M        317M         86M        3.2M        588M        498M
Swap:            0B          0B          0B


total:去掉为硬件和操作系统保留的内存后剩余的内存总量。
userd:当前已使用的内存总量。
free:空闲的或可以使用的内存总量
shared:共享内存大小,主要用于进程间通信
buff(buffers):主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。
cache:主要用于文件内容缓冲
available:可以使用的内存总量

一般情况下:CPU比内存快100倍,内存比磁盘快十万倍。
			cached用于协调CPU和内存见速度不匹配;buffer用于协调内存与磁盘速度不匹配。

对linux下程序来说,buffer/cached是等于可用的,其主要作用是提高文件读取性能,当程序需要内存时,buffer/cached会被回收;
所以可用内存=free memory + buffers + cached

uptime

> uptime
 15:04:59 up 33 days, 20:59,  3 users,  load average: 0.00, 0.00, 0.00
启动时间;启动了多少时间;当前多少用户;1、5、15分钟CPU平均负载

load average平均负载安全值为:N*0.7 (N为cpu核心数)

查看cpu核数等
1.grep 'model name' /proc/cpuinfo |wc -l

2.top 下按1,会显示每个CPU的使用状况,即可以看到CPU核数

cat /proc/cpuinfo
	siblings:单个cpu逻辑物理核数
	cpu cores:该逻辑核所处cpu的物理核数
	cpu	family:cpu产品系列代号
	cpu MHz:cpu的实际使用主频
	cache size:cpu二级缓存大小
	...

查看流量

● nethogs: 按进程查看流量占用
● iptraf: 按连接/端口查看流量
● ifstat: 按设备查看流量
● ethtool: 诊断工具
● tcpdump: 抓包工具
● ss: 连接查看工具
● 其他: dstat, slurm, nload, bmon,iftop

其他

cd -		#返回上次目录
arch		#显示机器处理器架构
echo $PATH	#显示环境变量
rz -y		#上传文件
sz 文件		#下载文件