首页 > 代码库 > Linux常用命令总结
Linux常用命令总结
1.进入某个目录:如 cd /home/app
2.列出目标目录中所有的子目录和文件:ls
ls命令是linux下最常用的命令。ls命令就是list的缩写缺省下ls用来打印出当前目录的清单
ls命令是linux下最常用的命令。ls命令就是list的缩写缺省下ls用来打印出当前目录的清单
1)ls [选项] [目录名]
2)常用参数
-a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件
-A 同-a,但不列出“.”(表示当前目录)和“..”(表示当前目录的父目录)。
-c 配合 -lt:根据 ctime 排序及显示 ctime (文件状态最后更改的时间)配合 -l:显示 ctime
但根据名称排序否则:根据 ctime 排序
-C 每栏由上至下列出项目
–color[=WHEN] 控制是否使用色彩分辨文件。WHEN 可以是‘never‘、‘always‘或‘auto‘其中之一
-d, –directory 将目录象文件一样显示,而不是显示其下的文件。
-D, –dired 产生适合 Emacs 的 dired 模式使用的结果
-f 对输出的文件不进行排序,-aU 选项生效,-lst 选项失效
-g 类似 -l,但不列出所有者
-G, –no-group 不列出任何有关组的信息
-h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
–si 类似 -h,但文件大小取 1000 的次方而不是 1024
-H, –dereference-command-line 使用命令列中的符号链接指示的真正目的地
–indicator-style=方式 指定在每个项目名称后加上指示符号<方式>:none (默认),classify (-F),file-type (-p)
-i, –inode 印出每个文件的 inode 号
-I, –ignore=样式 不印出任何符合 shell 万用字符<样式>的项目
-k 即 –block-size=1K,以 k 字节的形式表示文件的大小。
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-L, –dereference 当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息
-m 所有项目以逗号分隔,并填满整行行宽
-o 类似 -l,显示文件的除组信息外的详细信息。
-r, –reverse 依相反次序排列
-R, –recursive 同时列出所有子目录层
-s, –size 以块大小为单位列出所有文件的大小
-S 根据文件大小排序
–sort=WORD 以下是可选用的 WORD 和它们代表的相应选项:
extension -X status -c
none -U time -t
size -S atime -u
time -t access -u
version -v use -u
-t 以文件修改时间排序
-u 配合 -lt:显示访问时间而且依访问时间排序
配合 -l:显示访问时间但根据名称排序
否则:根据访问时间排序
-U 不进行排序;依文件系统原有的次序列出项目
-v 根据版本进行排序
-w, –width=COLS 自行指定屏幕宽度而不使用目前的数值
-x 逐行列出项目而不是逐栏列出
-X 根据扩展名排序
-1 每行只列出一个文件
–help 显示此帮助信息并离开
–version 显示版本信息并离开
3. 运行shell脚本文件:如 ./patch.sh
4. 命名一个别名:如 alias rs=‘/home/app/resin/bin/restart.sh‘
5.查看文件内容 ,常用命令:less ,cat
6.重新加载环境变量配置,如: source /etc/profile
7.杀死某个进程,kill sigkill pid, 如 kill -9 3629
8.查看运行的程序,ps aux
-a :不与 terminal 有关的所有 process ;
-u :有效使用者 (effective user) 相关的 process ;
x :通常与 a 这个参数一起使用,可列出较完整信息
9.通过程序的名字来查询进程:pgrep 参数选项 程序名,如 pgrep -lo httpd
常用参数
-l 列出程序名和进程ID;
-o 进程起始的ID;
-n 进程终止的ID;
10.下载整个http或者ftp站点,基本的语法是:wget [参数列表] URL
如:wget http://place.your.url/here
这个命令可以将http://place.your.url/here 首页下载下来。
使用-x会强制建立服务器上一模一样的目录,
如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录
12.根据时间、日期、月份、星期的组合来调度对重复任务的执行,crontab
查看定时任务:crontab -l
编辑定时任务:crontab -e
13. 添加环境变量,例如添加”NAME=liheng“
export NAME=liheng
14.ulimit用于shell启动进程所占用的资源,如ulimit -n 65536
参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
15.Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。
默认情况下,ln命令产生硬链接。
1)硬连接指通过索引节点来进行连接。在Linux的文件系统中,
保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接;
2)另外一种连接称之为符号连接(Symbolic Link),也叫软连接。
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。
在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
建立软连接: ln -s source target
如:ln -s /home/download/resin2.6 /home/app/resin
建立硬链接和软链接:
如: [oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f3文件无效
16.touch一般用来创建一个新文件。同时,touch还可以用来修改文件时间戳。
17.查看java,tomcat运行的情况jps
18.查看内存:cat /proc/meminfo | grep MemTotal
19.df -hl 查看linux硬盘空间
20.dmidecode | grep "Product" 查看服务器型号
21.uname -a 这个命令能查看服务器是否为虚拟机还是物理机,虚拟机的内核大部分是xen的
22.scp -P 16322 user@ip:/home/app/resin/log/invalidtoken.391 /home/user/
从服务器拷贝文件的另一种方式
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
23.从指定文件中查找关键字
grep -n -A5 -B5 --color=auto ‘querytxt‘ filename
24.部分服务器修改hosts不能立即生效,需要手动更新hosts
命令:/etc/init.d/nscd restart
25.保留目录下最新的66个文件:
#!/bin/bash
#snapshot file dir
dataDir=/home/app/test/zk_data/version-2
#tran log dir
dataLogDir=/home/app/test/zk_log/version-2
#zk log dir
logDir=/home/app/test/logs
#Leave 66 files
count=66
count=$[$count+1]
ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f
ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f
#注:1)ls -t 按照实际倒序排列;2)tail -n +20表示从第20个算起 ;3)xargs将一组很多数
据拆分成小份,传给后边的命令,否则数据很多时,会报错
26.使用ssh-keygen -i –f pubkey.file来转换非OpenSSH的pubkey格式
27.du -sh 查看当前目录的总大小
28.升级bash
1)debian版本:sudo apt-get update && sudo apt-get install bash
2)centos版本:yum update && yum install bash
29.查看linux版本等信息:cat /proc/version 或uname -a
30.清空文件:echo /dev/null > filename
31.查看文件是否是dos,:set ff?
:set ff=unix 通过这个改变文件为unix文件
32.uname -a 这个也能区分,虚拟机的内核大部分是xen的
dmidecode | grep "Product" 查看服务器型号
df -h
带 xvda之类的是虚拟机
33.查看端口连接使用情况:netstat -an |grep :3306
a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
34.iptables -nL 查看配置的过滤规则
1)添加过滤规则:iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j DROP
2) 删除过滤规则:iptables -D INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT/DROP
35.linux命令行post数据:
而POST模式的option则是 -d
比如,
curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi
36.递归改变权限中-L的使用注意:
-R参数我们都知道,是为了递归地修改子目录的权限;
加了-R之后,就有几个参数要注意一下,其中的-L,就是说要不要把在递归的时候,递归到软 链接的真实目录里面去;
而刚好在解压机器上,/home/monitor/test/这个目录是软链接,所以执行chown -R的时候,相
当于只会递归到test目录,而不会再往它的真实目录递归进去
有点巧合
两个使用不当加在一起,最终就出现了这个问题,当然,chown加上-L之后,问题就能解决了;
总结
稍微总结一下
平时用linux命令的时候,man手册不详细看,但至少--help列出来的那些还是看看;
linux命令在处理目录的时候,特别是涉及到递归子目录的时候,大部分都会用-L来指示是否
Follow symbolic links.(譬如chown、find等)
38.批量添加注释:
在10 - 20行添加 # 注释
:10,20s/^/#/g
在10 - 20行删除 # 注释
:10,20s/^#//g
39.闰秒解决方法,手动设置时间:
sudo date -s "20150701 09:58:00"
40.删除100天以前创建的日志文件:
find . -ctime +100 -name "log*" | xargs rm -f
删除100天以内的日志文件
find . -ctime -100 -name "log*" | xargs rm -f
额外: #-atime
#-mtime
#-ctime
#-amin
#-mmin
#-cmin
所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近
一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟
如:zookeeper仅保留最近30天的日志:
zookeeper仅保留最近30天的日志的脚本:
#!/bin/sh
find /home/app/zookeeper/data/version-2/ -ctime +30 -name "log*" | xargs rm -f
find /home/app/zookeeper/data/version-2/ -ctime +30 -name "snapshot*" | xargs rm -f
41.查看域名解析过程:nslookup 或者dig 域名
42.traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置
如traceroute hostname
windows下为tracert hostname
43.安装指令:
Debian dpkg -i xxx.deb
Redhat rpm -i xxx.rpm
44.定位cpu占用率高的线程:
1)top 命令查看大概的cpu使用情况,及load负载
2)通过pidstat 用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、
线程等
如:pidstat -p 17056 -u 1 3 -t ,查看pid为17056的程序,1秒为采样周期,连续3次的统计信息
3)jstack输出当前所有线程,如
jstack -l 17056 > /home/bjwudi/jstack-201511091457.log
通过步骤2中的pidstat找到tid使用cpu最多的几个,然后将tid转成16进制,到jstack导出的文件中找 到对应的十六进制tid,即可定位具体方法
扩展:
cpu使用情况统计(-u)
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执
行”pidstat”的效果一样。
内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计
IO情况统计(-d)
使用-d选项,我们可以查看进程IO的统计信息
45.iostat
1)iostat -d -k 1 10
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单
位;1 10表示,数据显示每隔1秒刷新一次,共显示10次
2)使用-x参数我们可以获得更多统计信息
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将
请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并
Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests
that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;
await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一
般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有
0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁
忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即
使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)
3)如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈.
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分
比,高过30%时IO压力高)
另外 await 的参数也要多和 svctm 来参考.差的过高就一定有 IO 的问题.
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但
数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高.也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的
46.查看目录一级子目录的占用空间大小:du -h --max-depth=1
47.查当前目录及子目录下文件名包含“commons-codec”的文件
find . -name ‘*commons-codec*‘
48.crontab执行时,锁定目标文件夹,避免上一个定时任务没执行完,又起了一个:
1)本地的模式:*/10 * * * * (flock -xn /var/run/rsync01.lock -c ‘/bin/sh /home/app/shellscript/rsyncHtml.sh‘)
-x 表示是独占锁
-n 指定锁文件
2)客户端模式:
*/2 * * * * lockfile -s 5 -r 1 /tmp/rsync1.lock && /usr/bin/rsync -ua /home/htmlfile/nc/ 192.168.52.72::newsclient/; rm -rf /tmp/rsync1.lock
lockfile -sleeptime | -r retries | -l locktimeout | -s suspend | -! | -ml | -mu | filename ...
49. 统计velocity.log文件打开的文件句柄数:lsof velocity.log | grep velocity.log|wc -l
50. 批量删除:
删除所有内容:先用G 转到文件尾,然后使用下面命令:
:1, .d
删除第10行到第20行的内容:先用20G转到第20行,然后使用下面命令:
:9, .d
51.查找关键字第一次出现,并标识绿色:
grep ‘Too many open files‘ jvm-default.log | awk ‘NR==1 {print "\033[32m" $0 "\033[39m"}‘
52.查询10秒以上的接口超时:
grep --color=auto ‘costTime [1-9]\{5,\} ms‘ catalina_2016-08-08.log
如:grep ‘process article cost:[1-9]\{5,\}ms‘ catalina_2016-09-13.log
53./home/jdk-oracle-1.6.0_64/bin/jmap -dump:format=b,file=/home/logs/heap.hprof 31252
54.统计单词出现次数并排序输出:
1)grep ‘get articles list cost:‘ jvm-default.log | awk -F ",topicid=" ‘{print $2}‘ | sort | uniq -c | sort -k1,1nr
sort说明:
1)加-n参数按数字排序。如果一行中还有非数字字符,则按照非数字字符前面的数字大小进行排序
2)sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了
3)默认的排序是以行为单位的排序,如果想按照某个字段进行排序,可以用-t选项指定字段分隔
符,-k指定要排序的字段。
-k参数的格式为-k start[,end],需要注意的是,如果省略了end,则需要比较到行末,
例如:~$ cat text
1|101|2
1|10|2
~$ echo $LC_ALL
C
~$ sort -t "|" -k 2 text
1|101|2
1|10|2
~$ sort -t "|" -k 2,2 text
1|10|2
1|101|2
虽然10排在101前面,但是不指定字段结束时,默认会继续比较,即比较’|’和’1’,所以有上
面的结果。
通常,我们只希望按照一个或者多个字段排序,而不希望从某个字段开始一直比较到行末,所以用
这个参数时最好同时指定start和end。
54.java查看堆整体情况:jmap -heap 25008
注:jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
命令:jmap -dump:format=b,file=heap.bin <pid>
file:保存路径及文件名
pid:进程编号
jmap -histo:live pid| less :堆中活动的对象以及大小
jmap -heap pid : 查看堆的使用状况信息
55.关闭外网ifdown eth0
开启外网 ifup eth0
本文出自 “宁静致远” 博客,谢绝转载!
Linux常用命令总结