查询命令
find
* find [指定查找目录] [查找规则] [查找完后执行的action]
* find ~/.m2 -name “*.lastUpdated” -exec grep -q “Could not transfer” {} \; -print -exec rm {} \;(查找以lastUpdated 为后缀的文件中包含 “Could not…”的文件,打印并删除他)(`*`表示 通配任意的字符;?表示 通配任意的单个字符)
* -iregex/regex (后面跟正则表达式,i忽略大小写)
* -user //根据属主来查找文件
* -group //根据属组来查找文件
* -a and -o and –not //连接多个条件,-a是与关系,-o是或关系,-not是取反
* -atime;-mtime;-ctime;-amin;-mmin;-cmin //这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟(find /tmp –atime +5 //表示查找在五天内没有访问过的文件;find /tmp -atime -5 //表示查找在五天内访问过的文件)
-type //根据文件类型来查找文件(f 普通文件;d目录文件; l 链接文件; b块设备文件;c 字符设备文件; p 管道文件;s socket文件)
* -size //根据文件大小来查找文件(“find /tmp -size 2M”查找在/tmp 目录下等于2M的文件;+2M,大于;-2M,小于)
-perm //根据文件权限来查找文件(“find /tmp -perm 755 ” 查找在/tmp目录下权限是755的文件)
[查找完执行的action]
[“-print”默认情况下的动作;”-ls”查找到后用ls 显示出来;”-ok [commend] “查找后执行命令的时候询问用户是否要执行;” -exec [commend]”查找后执行命令的时候不询问用户,直接执行]
“find /tmp -atime +30 –exec rm –rf {} \;”//删除查找到的超过30天没有访问过文件
“find /tmp -iregex “.*.[sh,bat]” -exec cp {} {}.old \;”// 替代查找到的文件,保留源文件(mv不保留)
locate
locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。
locate [option] [pattern]
less
less 工具是对文件或其它输出进行分页显示的工具(建议结合管道针对其他输出使用,文件vim处理),提供前后翻页功能,以及搜索功能。
-b [缓冲区大小] 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o [文件名] 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x [数字] 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。(eg:whereis -b tomcat)
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下是一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
tail
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.
tail[必要参数][选择参数][文件]
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c[数目] 显示的字节数
-n[行数] 显示行数
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
-q, –quiet, –silent 从不输出给出文件名的首部
-s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
grep [选项]… PATTERN [FILE]…
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-e [范本样式] 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f [范本文件] 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
grep 支持的正则语法
^ 锚定行的开始 如:’^grep’匹配所有以grep开头的行。
$锚定行的结束 如:’grep$’匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如’[Gg]rep’匹配Grep和grep。
[^] 匹配一个不在指定范围内的字符,如:’[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) 标记匹配字符,如’\(love\)’,love被标记为1。
\ 锚定单词的开始,如:’\匹配包含以grep开头的单词的行。
\> 锚定单词的结束,如’grep\>’匹配包含以grep结尾的单词的行。
x\{m\} 重复字符x,m次,如:’0\{5\}’匹配包含5个o的行。
x\{m,\} 重复字符x,至少m次,如:’o\{5,\}’匹配至少有5个o的行。
x\{m,n\}重复字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5–10个o的行。
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。
\b 单词锁定符,如: ‘\bgrep\b’只匹配grep。
eg:
ls -R 查找目录 | grep “文件名所带字符”(递归查找当前文件夹下,指定文件名)
grep -R “word” “dir”(递归查文件夹下所有文件中的”word“)
grep -E “[1-9]+” 等于 egrep “[1-9]+”
Other Command
chmod
chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法:一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
chmod [-cfvR] [–help] [–version] mode file
权限范围:
u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组
权限代号:
r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限 ([特殊权限](http://alan-hjkl.iteye.com/blog/1526858))
tar
Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
常见解压/压缩命令
tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
netstat
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
netstat [-acCeFghilMnNoprstuvVwx][-A [网络类型]][–ip]
命令参数:
-a或–all 显示所有连线中的Socket。
-A[网络类型]或–[网络类型] 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示FIB。
-g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定”-A unix”参数相同。
–ip或–inet 此参数的效果和指定”-A inet”参数相同。
状态说明:
LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态
eg:
netstat -apu显示UDP端口号的使用情况
netstat -a | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’显统计机器中网络连接各个状态个数
netstat -nat | grep “192.168.120.20:16067” |awk ‘{print$5}’|awk -F: ‘{print$4}’|sort|uniq -c|sort -nr|head -20查看连接某服务端口最多的的IP地址
netstat -anpt | grep ‘:16064’找出运行在指定端口的进程
ps
ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
命令参数:
-a 显示同一终端下的所有程序
-A 显示所有进程
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
e 显示环境变量
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C【命令】 列出指定命令的状况
–lines[行数]每页显示的行数
–width[字符数] 每页显示的字符数
–help 显示帮助信息
–version 显示版本显示
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
输出含义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
eg:
ps -u root显示指定用户信息
ps -ef显示所有进程信息,连同命令行
ps aux列出目前所有的正在内存当中的程序
watch
可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令
命令参数:
-n或–interval watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
-d或–differences 用-d或–differences 选项watch 会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。
-t 或-no-title 会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。
-h, –help 查看帮助文档
eg:
watch -n 1 -d ‘pstree|grep http’每隔一秒高亮显示http链接数的变化情况
watch -d ‘ls -l|grep scf’监测当前目录中 scf’ 的文件的变化
watch -n 10 ‘cat /proc/loadavg’10秒一次输出系统的平均负载
Other Command Reference
vim
模式切换
其它模式==>普通模式
Esc
普通模式==>插入模式
i 在光标前插入 I 在行首插入
a 在光标后插入 A 在行末插入
o 在当前行之下新建行 O 在当前行之上新建行
r 替换当前字符 R 从当前字符开始替换
普通模式==>命令模式
:
普通模式==>可视模式
v ,V ,
插入
i在光标之前插入
I在一行的开头处插入
a在光标之后追加
A在一行的结尾处追加
o在光标所在位置的下一行打开新行插入
O在光标所在位置的上一行打开新行插入
查找
查询环境设置
:set hlsearch打开高亮显示查找的文本
:set nohlsearch关闭高亮显示查找的文本
:nohlsearch关闭当前高亮显示的结果
:set incsearch打开显示查找匹配过程
:set noincsearch关闭显示查找匹配过程
:set ignorecase忽略大小写
:set noignorecase精确匹配大小写
:set nowrapscan禁止循环查找方式
:set wrapscan启用循环查找方式
Command
/csdn向下查找一个名称为csdn的字符串
?csdn向上查找一个名称为csdn的字符串
* 和 #匹配光标当前所在的单词,移动光标到下一个匹配单词(*是下一个,#是上一个)
n表示向下继续查找前一个查找的操作(和上面的操作配合使用)
N表示向上继续查找前一个查找的操作(和上面的操作配合使用)
/csdn\c忽略大小写的查找时候,在索要查找的字符串后面加\c
:%s///gn统计当前模式匹配的次数(实际上调用了substitute命令,标志位n会抑制正常的替换操作,替换域无论为什么都是不生效的。)
替换
:[range]s/from/to/[flags]
[range]
不写默认为光标所在的行。
.光标所在的行。
1第一行。
$最后一行。
33第33行。
‘a标记a所在的行(之前要使用ma做过标记)。
.+1当前光标所在行的下面一行。
$-1倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。
22,33第22~33行。
1,$第1行 到 最后一行。
1,.第1行 到 当前行。
.,$当前行 到 最后一行。
‘a,’b标记a所在的行 到 标记b所在的行。
%所有行(与 1,$ 等价)。
?chapter?从当前位置向上搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式。
/chapter/从当前位置向下搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式。
[flags]
无只对指定范围内的第一个匹配项进行替换。
g对指定范围内的所有匹配项进行替换。(g 放在命令末尾,表示对搜索字符串的每次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作)
c在替换前请求用户确认。
e忽略执行过程中的错误。
eg:
:s/from/to/将当前行中的第一个from,替换成to。如果当前行含有多个from,则只会替换其中的第一个。
:s/from/to/g将当前行中的所有from都替换成to。
:s/from/to/gc将当前行中的所有from都替换成to,但是每一次替换之前都会询问请求用户确认此操作。
:33s/from/to/g在第33行进行替换操作。
:$s/from/to/g在最后一行进行替换操作。
:%s/from/to/g对所有行的内容进行替换。
:g/str1/s//str2/g (等于”:1,$ s/str1/str2/g“)用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s/str2/str3/g用字符串 str3 替换正文中所有出现str1所在行的所有字符串 str2
复制粘贴
vim有12个粘贴板(某些版本大于12个),0-9,a,”,+等,其中”为默认粘贴板,+为系统剪贴板(:reg查看有没有+剪贴板,没有的话需要安装gnome)
y复制选定的内容(结合v,V命令)
yy/Y复制当前行
yw复制当前词
2yy/y2y两行
y$复制至行尾
y^复制至行首
“+yy复制当前行到系统剪贴板
p小写p代表贴至游标后(下)。
P大写P代表贴至游标前(上)。
“+p粘贴系统剪贴板内容
跳转
NG/:N到第 N 行
gg到第一行。(相当于1G,或 :1)
G到最后一行。
w到下一个单词的开头。
e到下一个单词的结尾。(若单词是由blank字符分隔,需要使用大写的E和W)
%匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)
0到行头
$到本行最后一个字符
^到本行的第一个非blank字符
g_到本行最后一个不是blank字符的位置。
fa到本行下一个为a的字符处,你也可以fs到下一个为s的字符。
t,到本行逗号前的第一个字符。逗号可以变成其它字符。
3fa在当前行查找第三个出现的a。
F 和 T和 f 和 t 一样,只不过是相反方向。
hjkl(←↓↑→)左下上右
下翻一页
下翻半页
上翻一页
上翻半页
选择
v选中字符
V选中行
Ctrl+v选中块
区域选择
vi”选中当前光标所在”“里的内容
va”选中当前光标所在”“里的内容,同时包含”“
v2a”选中当前光标(#)所在”*”ro#d“***“里的内容,同时包含”“
分屏
split创建分屏 (:vsplit创建垂直分屏,:new 空白文档)
dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。
+ (或 -)增加尺寸
标签页
:tabe /path/to/file.txt在一个新的 tab 页中打开文件
:tabnew新建一个 tab 页
:tabs查看 tab 页列表,通过“>”显示当前窗口、“+”显示可修改的缓冲区
:tabc关闭当前的 tab 页
:tab split在当前缓冲区使用新的 tab 页打开文件
:tabn切换到下一个 tab 页
:tabp切换到上一个 tab 页
:tabr[ewind]转到第一个 tab 页
:tabf[irst]与上一命令作用相同