Linux命令学习
目录:
1.df 2.du 3.locate find 4.fdisk 5.sync
6.shutdown 7.fuser 8.awk 9.rpm 10.which
11.tar 12.history 13.touch 14.vi 15.profile
16.man 17.ps 18.jps 19.source 20.mount
21.unmont 22.kill 23.lsof 24.mkdir 25.cat
26.export 27.变量使用 28.basename dirname 29.echo 30.expr求值
31.条件与流程控制语句 32.unzip 33.top dstat 34.exec 35.grep
36.xargs 37.$$ $0等 38.sed 39.cut 40.wc
41.ifconfig与ip 42.free 43.定时任务crontab 44.sort 45. /etc/sysctl.conf
46.查看cat tail less more 47.exit 48.date
1.df
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
df -ah //以kB以上的单位查看全部文件系统 大小
2.du
du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
du -h --max-depth=1
du命令可以用来:
显示当前目录下面的子目录的目录大小 和 当前目录的总的大小
显示指定文件所占空间
查看指定目录的所占空间
3.locate
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
find ./ -maxdepth 1 -name "*.txt" //需要把-maxdepth选项放在-name选项前面
列出当前目录及子目录下所有文件和文件夹
find / -name "bcprov-jdk15on-*" //对文件名模糊搜索,*号
find .
find / -name "*.sh" | grep "start.sh" //从根目录开始查找
在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt" // 直接写 find /home -name "txt" 不可以,要写成正则表达式的样子
搜索小于10KB的文件
find . -type f -size -10k
否定参数;找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"
当前目录下搜索出权限为777的文件
find . -type f -perm 777
借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户
tom find .-type f -user root -exec chown tom {} \;//{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \; //-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行
find / -type f -name "*.log" | xargs grep "ERROR"
4.fdisk
命令用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。
-l:列出指定的外围设备的分区表状况
首先选择要进行操作的磁盘:fdisk -l /dev/sdb //参数:设备文件——指定要进行分区或者显示分区的硬盘设备文件。
然后,输入m列出可以执行的命令:
command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
5.sync
sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息。 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令。
6.shutdown
shutdown命令用来系统关机命令。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
shutdown -P
7.fuser
报告进程使用的文件和网络套接字
fuser -u /etc/filesystems //查看哪个用户哪个进程在使用 filesystems文件 fuser -kxuc /home //终止使用 home文件系统 的所有进程
8.awk (可参考《awk命令详解》)
awk 'BEGIN{ commands } pattern{ commands } END{ commands }' //awk脚本基本结构
//第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块中的通用命令是最重要的部分,它也是可选的。
如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
awk 'pattern + action' file //awk将文件逐行读入,每行默认以空格分隔,分析文本内容;使用pattern(/contents/)匹配到想要的内容采取action操作。
统计文件行数:
awk 'END{ print NR }' filename //NR是awk内置变量,NR 表示记录数,在执行过程中对应于当前的行号。
以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。
awk "BEGIN{ i=0 } { i++ } END{ print i }" 1.txt
-F指定分隔符:
cat /etc/passwd |awk -F ':' '{print $1}'
9.rpm (Redhat Package Manager) RPM软件包管理工具
rpm -ivh xxx.rpm
-i:显示套件的相关信息;
-i<套件档>或--install<套件档>:安装指定的套件档;
-v:显示指令执行过程;
-h或--hash:套件安装时列出标记;
rpm -qa | grep jdk //查看jdk相关的rpm软件包
10.which 命令用于查找并显示给定命令的绝对路径,which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
which pwd
11.tar
利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。
打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
-x或--extract或--get:从备份文件中还原文件; (解包)
-f<备份文件>或--file=<备份文件>:指定备份文件;
-z或--gzip或--ungzip:通过gzip指令处理备份文件;打包后,以 gzip 压缩
-c或--create:建立新的备份文件; (打包)
-v或--verbose:显示指令执行过程;
-t或--list:列出备份文件的内容; (查询)
将文件全部打包成tar包:
tar -cvf log.tar log2012.log log2014.log 仅打包,不压缩! //在选项f之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩 //如果加z选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包; tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩 //如果加j选项,则以.tar.bz2来作为tar包名。
将tar包解压缩:
tar -zxvf /opt/soft/test/log.tar.gz //由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上z这个选项了。
12.history 该命令单独使用时,仅显示历史命令。在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。
-c:清空当前历史命令;
history 10 //显示最近使用的10条历史命令:
13.touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
touch a.txt //在当前目录下建立一个空文件a.txt ,然后,利用ls -l命令可以发现文件a.txt的大小为0,表示它是空文件。
14.vi 命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。
vi编辑器有三种工作方式:命令方式、输入方式和ex转义方式。通过相应的命令或操作,在这三种工作方式之间可以进行转换。
命令方式
在Shell提示符后输入命令vi,进入vi编辑器,并处于vi的命令方式。此时,从键盘上输入的任何字符都被作为编辑命令来解释,例如,a(append)表示附加命令,i(insert)表示插入命令,x表示删除字符命令等。如果输入的字符不是vi的合法命令,则机器发出“报警声”,光标不移动。另外,在命令方式下输入的字符(即vi命令)并不在屏幕上显示出来,例如,输入i,屏幕上并无变化,但通过执行i命令,编辑器的工作方式却发生变化:由命令方式变为输入方式。
输入方式
通过输入vi的插入命令(i)、附加命令(a)、打开命令(o)、替换命令(s)、修改命令(c)或取代命令(r)可以从命令方式进入输入方式。在输入方式下,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当做该文件的正文。进入输入方式后,输入的可见字符都在屏幕上显示出来,而编辑命令不再起作用,仅作为普通字母出现。例如,在命令方式下输入字母i,进到输入方式,然后再输入i,就在屏幕上相应光标处添加一个字母i。 由输入方式回到命令方式的办法是按下Esc键。如果已在命令方式下,那么按下Esc键就会发出“嘟嘟”声。为了确保用户想执行的vi命令是在命令方式下输入的,不妨多按几下Esc键,听到嘟声后再输入命令。
ex转义方式
vi和ex编辑器的功能是相同的,二者的主要区别是用户界面。在vi中,命令通常是单个字母,如a,x,r等。而在ex中,命令是以Enter;键结束的命令行。vi有一个专门的“转义”命令,可访问很多面向行的ex命令。为使用ex转义方式,可输入一个冒号(:)。作为ex命令提示符,冒号出现在状态行(通常在屏幕最下一行)。按下中断键(通常是Del键),可终止正在执行的命令。多数文件管理命令都是在ex转义方式下执行的(例如,读取文件,把编辑缓冲区的内容写到文件中等)。转义命令执行后,自动回到命令方式。例如: :1,$s/I/i/g 按Enter键 则从文件第一行至文件末尾($)将大写I全部替换成小写i。
15./etc/profile
/proc
cat /proc/cpuinfo | grep process | wc -l //查看系统cpu核数 (/proc/cpuinfo文件 更多内容可以参考 http://blog.csdn.net/lgstudyvc/article/details/7889364)
16.man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。
-P:指定内容时使用分页程序;
man ifconfig
17.ps -aux|grep xxx ps -ef | grep TestExe
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
u:以用户为主的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。
-A:显示所有程序。
-e:此选项的效果和指定"A"选项相同。
e:列出程序时,显示每个程序所使用的环境变量。
-f:显示UID,PPIP,C与STIME栏位。
-p <程序识别码>:指定程序识别码,并列出该程序的状况。
(有时候用ps -ef 命令与jps命令查找出来的进程有不同,可能是存在僵尸进程,用 ps -p p_id查看这些进程)
PID TTY TIME CMD
41508 pts/5 00:00:01 java <defunct>
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
18.jps
jdk提供的一个工具,显示当前所有java进程(需要配置JAVA_HOME/bin到环境变量中)
19.source FileName
在当前bash环境下 读取并执行FileName中的命令
例如重新执行 初始化文件、环境变量配置等,使之立即生效,而不必注销并重新登录。
source filename 或 . filename source /ect/profile source /home/my.sh //my.sh内容: myVar=3 然后命令行输入 echo $myVar 可以打印3,及时删除my.sh 也可以
source /home/1.txt
20.mount命令用于加载文件系统到指定的加载点。
21.umount -t NTFS
22.kill -9 [PID]
23.lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
-a:列出打开文件存在的进程; -c<进程名>:列出指定进程所打开的文件; -g:列出GID号进程详情; -d<文件号>:列出占用该文件号的进程; +d<目录>:列出目录下被打开的文件; +D<目录>:递归列出目录下被打开的文件; -n<目录>:列出使用NFS的文件; -i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip ) -p<进程号>:列出指定进程号所打开的文件; -u:列出UID号进程详情; -h:显示帮助信息; -v:显示版本信息。
lsof 输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
lsof | grep dev/sdb1 # (list of open files)
24.make
make install
25.cat xx | diff xx
-n或-number:有1开始对所有输出的行数编号; -b或--number-nonblank:和-n相似,只不过对于空白行不编号; -s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; -A:显示不可打印字符,行尾显示“$”; -e:等价于"-vE"选项; -t:等价于"-vT"选项;
cat m1 //(在屏幕上显示文件ml的内容) cat m1 m2 //(同时显示文件ml和m2的内容) cat m1 m2 > file //(将文件ml和m2合并后放入文件file中)
26.export
export 命令 用于将shell变量输出为环境变量,或者将shell函数输出为环境变量
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
-f:代表[变量名称]中为函数名称; -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中; -p:列出所有的shell赋予程序的环境变量。
export -p //列出当前的环境变量值
export MYENV=7 //定义环境变量并赋值
27.创建带时间戳的文件夹(变量使用)
stamp=mydir$(date +%Y%m%d%H%M%s) //创建变量并赋值 date +%Y-%m-%d" "%H":"%M":"%S //空格必须用引号引起来,分号可用可不用,即:date +%Y-%m-%d" "%H:%M:%S 也可以。 2016-11-24 14:11:21
或者,整个参数引号引起来: date "+%F %H:%M:%S" 或 date '+%F %H:%M:%S' //2017-05-19 14:33:24
mkdir命令用来创建目录。 -p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;指定要创建的目录列表,多个目录之间用空格隔开。
mkdir $stamp mkdir -p /home/mr/test
在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
mkdir -p-m 750 bin/os_1
28. basename 和 dirname
basename命令用于打印目录或者文件的基本名称。
basename logback.xml .xml //输出 logback basename /home/mr/1.txt //输出 1.txt (不论目录是否真实存在,对这个表示目录的字符串进行解析;basename "/home/mr/1.txt" 或basename /home/mr/1.txt/ 输出结果也一样)
要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:
OFILE=`basename $1 .c`.o
此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。
dirname命令去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名,去掉最后一个/及其后面的字符,并写结果到标准输出。如果最后一个/后无字符,dirname 命令使用倒数第二个/,并忽略其后的所有字符。
dirname /home/mr/1.txt //输出 /home/mr dirname a //输出 . ;dirname a/ 输出也是 .
basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。
29.echo
echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。
echo hello echo "hello" //打印hello echo "hello" >> output.txt echo hello >> output.txt //写入output.txt文件
echo "This is a log message $(date)" > /home/out.log //加命令执行日期
30.expr
expr命令是一款表达式计算工具,使用它完成表达式的求值操作。一般用于整数值计算,但也可用于字符串操作。注意运算符左右都要有空格。使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
增量计数
LOOP=0 LOOP=`expr $LOOP + 1` // + 号两边必须要有空格
expr 5 / 2 //2 注意除号两端需要空格;结果向下取整了
31.条件测试与流程控制语句
①test
命令,测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值。
格式1 test 条件表达式 格式2 [ 条件表达式 ] //常用格式,使用方括号时,要注意在条件两边加上空格。
测试文件
格式 [ 操作符 文件或目录 ]
操作符:
- -d:测试是否为目录,是则为真(Directory)
- -e:测试目录或文件是否存在,存在则为真(Exist)
- -f:测试是否为文件,是则为真(file)
- -r:测试当前用户是否有权限读取,是则为真(read)
- -w:测试当前用户是否有权限写入,是这为真(write)
- -x:测试当前用户是否可执行该文件,可执行则为真(Excute)
- -L:测试是否为符号链接文件,是则为真(Link)
- -nt:file1 -nt file2 如果 file1 比 file2 新(修改时间),则为真
- -ot:file1 -ot file2 如果 file1 比 file2 旧(修改时间),则为真
if 条件测试操作 then 命令序列 fi
if 条件测试命令 then 命令序列1 else 命令序列2 fi
如果目录不存在,创建目录,否则,清空目录下zip文件。 注意if后有空格,[ 条件表达式 ] 使用方括号时,要注意在条件两边加上空格。
if [ ! -e "/home/test" ] then mkdir -p /home/test else rm -f /home/test/*.zip fi
for 变量名 in 取值列表 do 命令序列 done
function ASSERMCLASSPATH()
{
for file in `ls "$LOADER_PATH"/$1`
do
if [ -d "$LOADER_PATH"/$1"/"$file ]
then
ASSERMCLASSPATH "$LOADER_PATH"/$1"/"$file
else
local name=$file
HADOOP_CLASSPATH=$HADOOP_CLASSPATH":$1/"$name
fi
done
}
for x in /var/log/*
do
#echo "$x is a file living in /var/log" echo $(basename $x) is a file living in /var/log done
32.批量解压加密的zip文件
unzip -P testPwd "*.zip" // *.zip 必须用引号引起来
指定加压文件文件夹
unzip test.zip -d testDir // -d 必须放到后面
33.查看系统状态 top dstat iotop netstat
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入dstat 3即每三秒收集一次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如dstat -c即显示CPU的使用情况。
iotop命令可以用来实时动态查看每个线程对磁盘io的使用情况。
netstat(参考:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html)
-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"参数相同。
netstat -ano | grep 80
34.exec
exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
35.grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
-v 反转查找。
输出除之外的所有行 -v 选项:grep -v "match_pattern" file_name
查找文件中的包含指定内容的行
grep 'hello' 1.txt
grep "search content" filename1 filename2.... filenamen //搜索多个文件
如果需要显示搜索文本在文件中的行数,可以使用参数-n,搜索时需要忽略大小写问题,可以使用参数-i
grep -n -i "HellO" 1.txt 2.txt
从文件内容查找不匹配指定字符串的行
grep -v "world" 3.txt
统计文件或者文本中包含匹配字符串的行数 -c 选项:
grep -c "text" file_name
36.xargs
xargs用作替换工具,读取输入数据重新格式化后输出。
find ./ -maxdepth 1 -name "*.txt" | xargs //多行输入转化为单行输出
复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I cp {} /data/images //用-I选项指定一个替换字符串,这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次;-n1选项指定每行1个参数
ls *.txt | xargs rm -f // 不能写成"*.txt" ;删除当前目录下所有 txt 文件
| grep "xxx" 对比 | xargs grep "xxx" //一个按文件名过滤,一个按文件内容是否包含过滤
37.$$ $0 $1 $# $@ $*
$$:Shell本身的PID;
echo \$\$ > $pidFile
$0:Shell本身的文件名;
thepath=$(cd $(dirname "$0");pwd)
$1 $2:传入Shell的第一(二)个参数;
sh run.sh lib hello //在脚本run.sh中用$1指代传入的"lib" $2 代表"hello"
$#:传入Shell的参数个数 if [ $# -ne 3 ];then …… fi //用 != 也可以
$@ $* :所有参数列表。echo "\$@:" "$@"
37.ifconfig ip 查看网络
ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
ip -4 addr
ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
38.sed
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
【sed元字符集】
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如: /\love 匹配包含以love开头的单词的行。
\>匹配单词的结束,如: /love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
【替换操作:s命令】
s 替换指定字符;字符 / 在sed中作为定界符使用,也可以使用任意的定界符,例如 : ; 等。定界符出现在样式内部时,需要进行转义 \: \; \/
sed "s/book/books/g" file //g 表示行内全面替换。 sed "s/book/books/" file //替换每行第一个 sed "s/book/books/2g" file //当需要从第N处匹配开始替换时,可以使用 /Ng sed "s/book/books/3" file //只替换第N处匹配,使用/N
【用$替换引号中的逗号】
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
sed -i ':1;s/\(.*,"[^",]*\),\(.*\)/\1$\2/;t1' fileName //根据正则的贪婪性,是从后往前替换的
直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books:
sed -i "s/book/books/g" file //把file文件中所有book都替换成books
【删除行:d命令】
sed '/^test/'d file //删除file中以test开头的行;d命名写引号里面也可以
sed '/^$/d' file // 删除空白行;d命令写引号里面外面都可以
echo this is a test line | sed 's/\w\+/[&]/g' // &对拼正则表达式匹配到的单词 [this] [is] [a] [test] [line] + 号 必须要转义
【组合多个表达式】
sed '表达式' | sed '表达式' 等价于: sed '表达式; 表达式'
sed表达式可以使用单引号来引用,但是如果表达式内部包含变量字符串,就需要使用双引号。
test=hello echo hello WORLD | sed "s/$test/HELLO" //HELLO WORLD
39.cut
cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于下的type命令。
说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件fl和几的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件f3中。
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
cut -f 2,3 -d ";" 1.txt //以;分隔后,取第2和第3个分段的内容
40.wc
wc命令文件过滤分割与合并 wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
-c或--bytes或——chars:只显示Bytes数;
-l或——lines:只显示列数;
-w或——words:只显示字数。
wc -clw mydata.txt
41.ifconfig和ip 参考:http://os.51cto.com/art/201406/441461.htm
ifconfig -a
ip route show
42.free
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。
free -m | grep Mem // total:内存总数; used:已经使用的内存数; free:空闲的内存数; shared:当前已经废弃不用; buffers Buffer:缓存内存数; cached Page:缓存内存数。
43.crontab (参考博客: https://www.jb51.net/server/301347efv.htm )
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
minute hour day month week command 顺序:分 时 日 月 周
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
(自定义脚本加可执行权限 chomd 755 cpData_5min.sh )
crontab -e */5 * * * * cd /home;/home/cpData_5min.sh >/dev/null 2>&1 //每5分钟执行一次脚本
每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
44.sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序; -o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
sort -nk 2 -t: sort.txt //以:分隔 按第2列值排序
-k选项的语法格式:
FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
FStart.CStart 选项 , FEnd.CEnd 选项
这个语法格式可以被其中的逗号,分为两大部分,Start部分和End部分。
Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。
或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt //以空格分隔,第1列第2个字符起到第1列第2个字符(其实就是以第一列第二个字符排序),如果第一部分相同,再按第3列降序(-r)排列
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
45./etc/sysctl.conf
net.ipv4.tcp_sack = 1 net.core.rmem_default = 8388608 net.core.wmem_default = 8388608 kernel.shmall = 4294967296 kernel.msgmnb = 65536 net.ipv4.ip_forward = 0 net.core.rmem_max = 16777216 net.core.somaxconn = 262144 #vm.min_free_kbytes = 4096 #Commented out by gcluster net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.conf.default.rp_filter = 1 # alter 1 to 30 net.ipv4.tcp_fin_timeout = 30 net.ipv4.ip_local_port_range = 6005 65535 net.ipv4.tcp_tw_recycle = 1 #add conf net.ipv4.tcp_syncookies = 1 kernel.pid_max = 100000 net.bridge.bridge-nf-call-iptables = 0 kernel.sem = 250 256000 100 4096 net.ipv4.tcp_window_scaling = 1 kernel.shmmax = 68719476736 net.ipv4.conf.default.accept_source_route = 0 kernel.core_uses_pid = 1 net.bridge.bridge-nf-call-arptables = 0 kernel.msgmax = 65535 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 262144 net.bridge.bridge-nf-call-ip6tables = 0 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_max = 16777216 vm.swappiness = 1 net.core.netdev_max_backlog = 262144 kernel.sysrq = 0 # Added by gcluster vm.max_map_count = 18566701 vm.min_free_kbytes = 29706721
生效:
/sbin/sysctl -p
46.查看cat tail less more
tail -f log.txt | grep '!!!' tail -n 200 log.txt
47.exit
exit命令同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。
#在脚本中,进入脚本所在目录,否则退出: cd $(dirname $0) || exit 1
48.date
date //查看时间 date +%Y%m%d //显示当前年月 date -d "+1 day" +%Y%m%d //显示后一天的日期 date -s "2019-04-29 09:59:51" //设置时间,写好在文本工具上,提前一点点时间,然后等着服务器到这个时间点,再设置进去