您的位置:首页 > 运维架构 > Linux

Linux 命令小记

2016-07-17 16:57 513 查看
1、 pidof 进程名 :获取进程的pid,例如 pidof memcached 得到5333

2、 unset Shell变量 :取消设置一个shell变量,从内存和shell的导出环境中删除它,例如 unset JAVA_HOME

3、 cat test.txt 1 > /dev/null 2>&1 & :将标准输出重定向到回收站,并将错误输出重定向到标准输出,综合起来就是不输出任何信息。第一个1表示标准输出,可以省略;&1表示文件描述符1,若没有&则变成了文件1

4、 iptables -I INPUT -p tcp --dport 8081 -j ACCEPT :开放指定端口。机器重启后会失效,可以保存配置,使开机自动加载。详见保存防火墙规则

5、 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 :端口转发(对80的请求转到8080)。机器重启后会失效,可以保存配置,使开机自动加载。详见保存防火墙规则

6、netcat命令(“网络工具中的瑞士军刀”,也可简写为 nc)。详见:http://www.oschina.net/translate/linux-netcat-command

使用示例:查看Zookeeper节点状态: echo stat | netcat localhost 2181


netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。

netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。


7、查看端口被哪个进程占用: netstat -lnp|awk 'BEGIN{prt=":8086$"} {if ($4 ~ prt) print $0}'

推广:根据程序所用端口号kill掉程序的脚本:

#!/bin/sh
thisPort=8087
thisPid=`ps x |grep KafkaOffsetMonitor-assembly-0.2.0.jar |grep $thisPort | head -c 10 | grep -o  "[0-9]\+"`
if [  $thisPid ]; then
echo pid is $thisPid , killling ...
kill $thisPid
echo killed
else
echo the program is not running, pid is null
fi


8、linux中shell变量$#,$@,$0,$1,$2等的含义:

$$ Shell本身的PID(ProcessID)

$! Shell最后运行的后台Process的PID

$? 最后运行的命令的结束代码(返回值)

$- 使用Set命令设定的Flag一览

$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$# 添加到Shell的参数个数

$0 Shell本身的文件名

$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数

9、lsof查看打开文件的进程、恢复删除的文件。详见http://www.cnblogs.com/z-sm/p/6108689.html

lsof abc.txt 显示开启文件abc.txt的进程
lsof -c abc 显示abc进程现在打开的文件
lsof -p 30297 //显示哪些文件被pid为30297的进程打开
lsof -c -p 1234 列出进程号为1234的进程所打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -u1000 //查看uid是100的用户的进程的文件使用情况
lsof -utony //查看用户tony的进程的文件使用情况
lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思)
lsof -i //显示所有打开的端口
lsof -i:80 //显示打开80端口的进程
lsof -i -U //显示所有打开的端口和UNIX domain文件
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
--> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不止一个)
port --> 端口号 (可以不止一个)
lsof -i UDP@

A cache is something that has been "read" from the disk and stored for later use.

相关可参考:
http://blog.csdn.net/tianlesoftware/article/details/6459044" target=_blank>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参数[/code]

10、查看内存使用情况: free [-b/k/m/g/h] ,示例:

ivic@test39:~/imtg$ free
total       used       free     shared    buffers     cached
Mem:      16367040    8483944    7883096        676     195008    6759508
-/+ buffers/cache:    1529428   14837612
Swap:     50128892          0   50128892


(1)、Mem为内存分配统计:

total为物理总内存、used为已分配内存(包括buffers、cached),可能部分缓存并未实际使用、free为未分配内存(不包括buffers、cached)

shared为共享内存一般用不到、buffers为系统已分配但未被使用的buffers内存、cached为系统已分配但未使用的cache内存

(2)、-/+ buffers/cache为实际使用内存统计:

used -buffers/cache为已分配的不包括buffers、cached部分的内存,即实际已使用的内存

free +buffers/cache为未分配的加上buffers、cached部分的内存即实际空余的内存。

(3)、swap为磁盘交换分区,当做虚拟内存使用,通常在Mem都被进程使用完时才会使用swap,其大小应不少于物理内存大小。(swap用途:内存不够时数据移到swap、不常用数据移到swap(linux休眠数据放在swap);优点:可运行更多或更大应用程序;缺点:速度比内存慢)

通常物理内存不足以供进程使用时,系统会清理buffers/cached来腾出内存,但这是个耗cpu的操作且不保证一定清理出内存。

在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

A buffer is something that has yet to be "written" to disk;

A cache is something that has been "read" from the disk and stored for later use.

相关可参考:[url=http://blog.csdn.net/tianlesoftware/article/details/6459044]http://blog.csdn.net/tianlesoftware/article/details/6459044


11、查看内存信息、CPU信息等

查看内存信息: cat /proc/meminfo

查看CPU型号: cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看CPU核数:通过查看 /proc/cpuinfo 得到:

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l


另外,通过 lscpu 命令也可以看到CPU的汇总信息。其中,Sockets表示物理CPU个数、Core(s) per socket表示每个物理CPU的核数、Thread(s) per core表示每个核支持的超线程数(为0则说明不支持超线程)。这些信息与上面通过查看/proc/cpuinfo得到的信息是一致的,示例如下:

ivic@test39:~/imtg$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 30
Stepping:              5
CPU MHz:               1197.000
BogoMIPS:              5852.63
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7


11、查看带宽:安装工具ethtool,然后通过 ethtool eth0(网卡名) 查看,结果示例如下:

ivic@test39:~/imtg$ ethtool em1
Settings for em1:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
     Duplex: Full
Port: Twisted Pair
PHYAD: 2
Transceiver: internal
Auto-negotiation: on
MDI-X: on (auto)
Cannot get wake-on-lan settings: Operation not permitted
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes


12、top命令,可以用来查看CPU使用情况、 内存占用情况等。详见:[url=http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html]top命令参数及显示内容含义详解

ivic@test38:~/imtg$ top
top - 14:19:40 up 13 days,  4:22,  1 user,  load average: 0.00, 0.01, 0.05      //任务队列信息。load average为系统负载,实际是CPU使用队列的长度的统计信息
Tasks: 146 total,   1 running, 145 sleeping,   0 stopped,   0 zombie            //进程数信息。总进程数、正在运行进程数、睡眠进程数、停止的进程数、僵尸进程数
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st //CPU占用信息。用户空间占用、内和空间占用、用户空间中改变过优先级的进程占用CPU、空闲CPU时间、等待IO的CPU时间、硬件CPU中断占用、软中断占用、虚拟机占用 的百分比。
KiB Mem:  16367040 total,   853116 used, 15513924 free,   181692 buffers        //与下行同为内存信息
KiB Swap: 50128892 total,        0 used, 50128892 free.   368584 cached Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
16815 ivic      20   0  105656   2060   1068 S   0.3  0.0   0:00.37 sshd
16893 ivic      20   0   24964   1664   1156 R   0.3  0.0   0:00.07 top
1 root      20   0   33508   2852   1440 S   0.0  0.0   0:01.06 init
2 root      20   0       0      0      0 S   0.0  0.0   0:00.14 kthreadd
3 root      20   0       0      0      0 S   0.0  0.0   0:00.61 ksoftirqd/0
4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0
5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
7 root      20   0       0      0      0 S   0.0  0.0   0:26.18 rcu_sched
8 root      20   0       0      0      0 S   0.0  0.0   0:07.34 rcuos/0
9 root      20   0       0      0      0 S   0.0  0.0   0:17.18 rcuos/1


命令格式: top [-] [d] [p] [q] [c] [C] [S] [s]

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名


交互命令(在top命令执行过程中可用这些命令,都是单字母的,若top命令加了s参数,则此交互命令会被屏蔽):

Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k       终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。


注意 CPU利用率与load average不同:(详情可见:CPU load和CPU利用率的关系

前者是针对从CPU使用的角度来看的,为统计周期内使用CPU的时间(不是占有时间,占有时间内有可能等待,等待的时间不算在这里的使用时间内)的占比.

后者指的在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。

CPU有可能是 低利用率但高load状态,也有可能是高利用率但低load状态。两者没有必然联系。所以仅仅从CPU的使用率来判断CPU是否处于一种超负荷的工作状态还是不够的,必须结合Load Average来全局的看CPU的使用情况和申请情况。

(墙鈡时间wall clock指操作开始到结束所用时间,通常包括各种非运算的等待耗时如等待IO、等待线程阻塞等,详见:GC类型中第5部分与时间有关的部分

13、统计文档中每个字符出现的次数(通过脚本,详见:http://blog.csdn.net/yutianzuijin/article/details/65627931

#!/bin/sh
#运行命令时需要两个参数,分别为文档名、输出文件名
for line in `cat $1`; do
count=`echo $line|wc -m`
echo $count $line

i=1;
while [ "$i" -lt "$count" ]; do
one_word=`echo $line|cut -c$i`
#echo $i $one_word
echo "$one_word" >>temp
((i++))
done
done

sort temp|uniq -c|sort -k1nr > $2

rm -f temp


View Code
14、硬链接、软连接。(详见:理解Linux的硬链接与软连接

文件都有文件名与数据,数据在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。

硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接,即硬链接就是同一个文件使用了多个别名。对oldfile创建硬链接的命令: link oldfile newfile 或 ln oldfile new file 。

文件有相同的 inode 及 data block;

只能对已存在的文件进行创建;

不能交叉文件系统进行硬链接的创建(不同文件系统的inode空间可能有重叠,故此);

不能对目录进行创建,只可对文件创建(.和..目录其实就是硬链接。若系统允许再对目录创建硬链接,则可能会产生目录环);

删除一个硬链接文件并不影响其他有相同 inode 号的文件。

软连接:若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,有自己的inode号及用户数据块,因此其创建与使用没有类似硬链接的诸多限制。创建命令:加上 -s 参数。

软链接有自己的文件属性及权限等;

可对不存在的文件或目录创建软链接;

软链接可交叉文件系统; 软链接可对文件或目录创建;

创建软链接时,链接计数 i_nlink 不会增加;

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。



15、Linux下截图软件:scrot。通过 scrot -s 命令可以截取指定区域。

16、Linux命令行中将命令的运行结果拼接到已有串上,示例: echo my-$(uname -r) ,结果为 my-3.16.0-77-generic 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: