常用命令


tail
	
	tail -f	文件名
	# 根据文件描述符进行追踪(动态显示文件末尾内容),即使文件改名或被删除(甚至再次创建相同名称的文件),它仍然继续追踪之前的文件,而不会追踪新的文件。
	# 等价于:tail --follow=descriptor 文件名

	tail -F 文件名
	# 根据文件名进行追踪(动态显示文件末尾内容),并保持重试,当文件改名或被删除后,如果再次创建相同名称的文件,则会追踪新创建的文件。
	# 等价于:tail --follow=name --retry 文件名。
	# 应用:查看日志时,使用 -F 可以防止日志切片后,追踪文件失败。
		
	tail -f 文件名1 文件名2
	tail -num 文件名 		# 查看文件的最后num行



grep
	grep 查找的字符串
	grep 排除的字符串 -v 			# 查询不包含指定字符串的行
	grep 查找的字符串 -i 			# 查找指定的字符串,忽略大小写
	grep 查找的字符串 -A n		# 查找指定的字符串,并且将后面的n行也查出来。
	grep 查找的字符串 -B n		# 查找指定的字符串,并且将前面的n行也查出来。
	grep 查找的字符串 -C n		# 查找指定的字符串,并且将前面的n行和后面的n行也查出来。

	grep -c 查找的字符串 		# 统计查询结果的行数
	grep -E 条件表达式 		# 查找指定条件的字符串。	eg:grep -E 'aa|bb'  	# 查找包含aa或包含bb的行。
	grep -e 正则表达式 		# 查找指定条件的字符串。	eg:grep -e 'aa*.*bb'	# 查找包含"aaXXXXbb"的行。

	# 从多个文件中查找
	grep 查找的字符串 info.1.log info.2.log
	grep 查找的字符串 info.*.log

	注意:若查找的字符串中包含"."时,需要使用反斜杠转义。eg:grep "1\.1\.1"


cp
	cp 原文件 目标文件
		# -r 复制目录
			cp -r  /aaa  /bbb 	# 将/aaa目录copy到/bbb目录下,即copy完成后:/bbb/aaa/xxx
			cp -r  /aaa/ /bbb 	# 将/aaa目录下的内容copy到/bbb目录下,即copy完成后:/bbb/xxx
			cp -rp /aaa/ /bbb 	# 将/aaa目录下的内容copy到/bbb目录下并保留原文件的属性,即copy完成后:/bbb/xxx
		# -p 保留文件属性
		# -f 强制复制,若目标文件与原文件重名,则覆盖。(若不使用-f,当文件重名时会导致复制失败)
	scp 原文件 目标文件
		# 从远程主机下载文件:scp -p -P 远程主机的端口 远程主机上的文件 本地目录
		# 上传文件夹到远程主机:scp -r 本地目录 远程主机的目录
		# 上传文件到远程主机: 	scp -p 本地文件 远程主机的目录


&
	command &
	# 将任务放到后台 ,即使退出终端依然继续运行,但标准输出和标准错误信息会丢失

	nohup command &
	# nohup(no hang up):将任务放到后台,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使退出终端依然继续运行。
	举例:nohup sh cmd.sh >> log.txt 2>&1 &


重定向
	标准输入、标准输出、标准错误:每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1,2
	>	标准输出重定向,等价于1>	
	说明:
		> 文件名		将 标准输出 覆盖添加到文件中。
		>> 文件名		将 标准输出 追加到文件的末尾。
		&> 文件名 	将 标准输出 和 标准错误输出 都重定向到文件中。说明:1)&> 文件名 和 >& 文件名 等价;2)不存在 &>> 文件名 和 >>& 文件名;
		2>&1 		将 标准错误 重定向到标准输出。
	常见:
		Command > filename 2>&1	把标准输出和标准错误一起(以覆盖的方式)重定向到一个文件中 ,等价于 Command &> filename
		Command >> filename 2>&1	把标准输出和标准错误一起(以追加的方式)重定向到一个文件中,注意:Command &>> filename 
		解析:
			Command > filename 2>&1 可以看成是两步执行:
			第一步:Command > filename 将命令的标准输出重定向到filename中
			第二步:2>&1 将命令的标准错误重定向到标准输出中,因为第一步中已经将标准输出重定向到filename中了,故标准错误最终也被重定向到filename中了。



df命令:
	df -h 				# 查看文件系统磁盘空间的使用情况。	若磁盘空间不足,则执行脚本时会报No space left on device错。
	df -i 				# 查看文件系统inode的使用情况。 	若inode使用完,即使磁盘还有空间,执行脚本时同样会报No space left on device错。
	fdisk -l 			# 查看磁盘列表,需要root权限。
	badblocks -v 磁盘	# 检查磁盘是否有损坏的区块,需要root权限。eg:badblocks -v /dev/sda2

du命令:
	du -sh 文件或目录		# 查看文件大小
	# s 统计总占用量,而不列出子目录和子文件的大小。
	举例:
		du -sh 目录 		# 查看整个目录的大小
		du -sh 目录/* 	# 查看指定目录下各文件或目录的大小


stat命令

	概念:查询文件的inode(inode即文件的元数据)。
	参数:
		-c FORMAT 或	 --format=FORMAT
		# 指定输出的内容,FORMAT取值可通过man stat查询,eg:
			%n 输出文件名
			%Y 以秒的形式来输出最后的修改时间
	举例:
		 ls path -t | head -1 | xargs stat -c %n	# 找到path目录下最后修改的文件
		 ls path -tr | head -1 | xargs stat -c %y	# 找到path目录下最古老的文件的最后修改时间


readlink
	readlink -f 文件名
	# 查看符号链接所指向的位置,如果文件不是连接,则显示文件的绝对路径。


sort命令:

	概念:对文件中的文本行进行排序。

	格式:
		sort [参数] filename

	参数:
		-u 	去除重复的行
		-n 	按照数值来排序,即10比2大。说明:只要第一列为数字,即使其它列为字符串时,仍然可以用-n来排序。
		-r 	降序排序
		
		
uniq命令:

	概念:用于统计或忽略文件中的重复行。

	注意:当重复的行不相邻时,uniq命令是不起作用的,故我们一般先sort,然后再uniq。

	格式:
		uniq [参数] filename
		
	参数:
		-c或--count:	在每行的前面将该行重复出现的次数显示出来
		-d或--repeated:仅显示重复出现的行
		-u或--unique:	仅显示出现一次的行
		
	举例:
		uniq filename
		# 查看文件中所有的文本行,如果存在多个相同的文本行,则只会显示其中的一行。

		uniq filename -c
		# 查看文件中所有的文本行,如果存在多个相同的文本行,则只会显示其中的一行,并且在每行的前面显示该文本行在文件中出现的次数。
		
		
seq命令:
	
	概念:用于产生从某个数到另外一个数之间的所有整数。
	
	格式:
		seq [参数] 第一个数	第二个数
		
	参数:
		-f或--format=格式        使用printf样式的浮点格式(默认使用%g)			eg:seq -f "%3g" 1 10	
			# 说明:"%3g"中3表示数字的位数,"%03g"中03表示数字的位数,若位数不够则补0。
			
		-s或--separator=字符串   使用指定字符串分隔数字(默认使用换行符\n)		eg:seq -s " | " 1 10
		
		-w或--equal-width        在列前添加0,使得宽度相同,不能和-f一起使用	eg:seq -w 1 10	
		
		
mpstat命令:

	概念:mpstat是Multiprocessor Statistics的缩写,多处理器统计信息监控命令。

	格式:
		mpstat [-P {cpu的编号|ALL}] [internal [count]]
		
	参数:
		-P			指定监控的cpu,取值为:cpu的编号 或 ALL
		internal	表示查询的间隔时间,单位为秒
		count		表示查询的次数,如果interval和count都省略,则默认为只查询一次。
		
	举例:
		mpstat -P ALL 5 2
		# 每隔5秒查询一次所有cpu的统计信息,总共查两次。
		
	结果:
		Linux 2.6.32-431.el6.x86_64 (hostname) 	01/01/2017 	_x86_64_	(48 CPU)

		05:41:51 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
		05:41:56 PM  all    0.46    0.00    0.20    0.01    0.00    0.05    0.00    0.00   99.29
		05:41:56 PM    0    1.41    0.00    0.40    0.00    0.00    0.20    0.00    0.00   97.98
		05:41:56 PM    1    0.80    0.00    0.60    0.20    0.00    0.00    0.00    0.00   98.39
		05:41:56 PM    2    2.43    0.00    1.21    0.00    0.00    0.61    0.00    0.00   95.75
		05:41:56 PM    3    0.20    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.60
		05:41:56 PM    4    1.80    0.00    1.00    0.00    0.00    0.60    0.00    0.00   96.61
		05:41:56 PM    5    0.20    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.60
		...
		
		

nslookup
	说明:nslookup用于查询域名解析是否正常,在网络故障时用来诊断网络问题。
	格式:nslookup 域名或ip


ifconfig
	说明:查看或配置网卡。
		lo 		回环地址(loopback),表示当前计算机本身
		Xxx0	网卡名,常见的有eth0、xgbe0等,如果有多个网卡,则存在eth1、eth2等


nload 
	说明:查看网卡现在的流量状况。
	格式:nload 网卡名
	举例:
		nload eth1	# 查看eth1的流量状况
		nload -m		# 查看所有网卡的流量状况

	补充:
	ethtool
		说明:查询及设置网卡。
		举例:
			# 查看xgbe0网卡的速率。
			ethtool xgbe0
				Settings for xgbe0:
					Speed: 10000Mb/s


unzip
	说明:解压zip包
	举例:
		unzip log1.zip
		unzip '*.zip' 	# 注意:'*.zip'单引号必须加!

tar
	说明:打包、解包
	ls | grep info-log | grep tar.gz | xargs -i tar -zxvf {} 	# 批量解压tar.gz压缩包


jar
	查看jar包中的内容:		jar -tf test.jar 
	查看jar包中是否包含某个类:	jar -tf test.jar | grep 类名
	解压jar包:				jar -xvf test.jar


su命令:
	su - user	完整的切换到新的用户环境。注:需要输入user的密码。
	su user		切换到其他用户,但不切换环境变量


sudo命令:
	sudo -iu user 	切换到新的用户环境。注:需要输入当前登录用户的密码(而不是user的密码)。
	


ulimit命令:

	概念:控制进程(shell程序)所占用的资源

	ulimit 
		-a 				查看资源限制的设定
		-n <文件数目>		指定同一时间最多可开启的文件数
						说明:linux下进程tcp链接的最大并发量受限于该值
		-m <内存大小>		指定可使用内存的上限,单位为KB
		-t <CPU时间>		指定CPU使用时间的上限,单位为秒
		..

	举例:
		# 查看每个进程可以打开的文件数量的最大值
		ulimit -n

		# 将每个进程可以打开的文件数量设为65535
		ulimit -n 65535


lsof命令:
	# 查看某个端口port的占用情况,可以通过该命令来判断指定端口的服务是否已启动。
	lsof -i:port

	# 查看某个进程打开文件的数量
	lsof -p PID

	# 查看打开指定文件的所有进程
	lsof fileName


mysql命令:
	# 打开mysql客户端
	mysql -h127.0.0.1 -P3306 -uroot -proot

	# 执行sql语句
	mysql -h127.0.0.1 -P3306 -uroot -proot dbName -e 'select * from xx where name="xxx"; '
				

	补充:命令行中,在mysql的sql语句后加上 \G,表示将每个字段打印到单独的行。


ssh命令:
1)远程登录:

	# 登录指定的机器
	ssh user@host

	# 在指定的机器上执行指定的命令,并将结果返回。
	ssh user@host '命令'
	
	参数:
	-o key=value,常见取值:
		ConnectTimeout=3                连接超时时间为3秒
		ConnectionAttempts=5            连接失败后重试5次
		PasswordAuthentication=no 		不使用密码认证,没有互信直接退出
		StrictHostKeyChecking=ask 		如果连接和key不匹配,给出提示,并拒绝登录,默认选项。
		StrictHostKeyChecking=no 		自动信任主机并添加到known_hosts文件中,最不安全。
		StrictHostKeyChecking=yes		如果连接与key不匹配,就拒绝连接,不会提示详细信息,最安全。

		
2)ssh端口转发:
	概念:将打到A主机的请求,通过B主机转发到C主机的过程称为ssh端口转发,其中B主机承担着中转站的角色。


	本地端口转发到远端
	ssh -f -N -L local_port:remote_host:remote_port username@tunnel_host
	# 把打到本地端口local_port的请求由tunnel_host转发到remote_host的remote_port上。

	远程端口转发到本地
	ssh -f -N -R remote_port:local_host:local_port user@tunnel_host
	# 把打到远端端口remote_port的请求由tunnel_host转发到本地local_host的local_port端口上。


	参数:
	-f 后台认证用户/密码,通常和-N连用,不用登录到远程主机
	-N 不执行脚本或命令,通常与-f连用
	-L 本地端口转发
	-R 远程端口转发
		

		

Logo

更多推荐