首页 > 代码库 > 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常用命令总结