linux基础命令
例子:mkdir /data 在根/下创建data目录,mkdir –p创建连续目录
2.ls(list列表) 列出目录文件
例子:ls / 列根/目录下目录和文件
参数:
-l(long)长格式,查看文件的权限,属主属组信息
-d(directorys)查看目录
-ld查看目录的权限属主属组信息
–r(反转排序,倒叙)
-t(按修改时间排序)
-F给每个输出项追加文件的类型标识“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符。
-p 只给目录加标识
-i查看inode节点
-h人类可读,人类可读就是将大小整数化,比如1024k就算成1M了。
3.cd (change directory) 改变目录路径列子
例子:cd /etc
cd ..返回上一级目录
cd .当前目录
cd – 返回上一次目录
cd ~返回用户家目录
cd –演示
为什么cd –可以返回上一次目录,因为cd –调用了OLDPWD变量和PWD变量
4.相对路径和绝对路径
Windows绝对路径:D:\娱乐\音乐,从头(盘符)开始的路径。
linux绝对路径:cat /etc/sysconfig/network-scripts/ifcfg-eth0,从“/”开始的路径。
相对路径:不从根/开始,不从头开始的路径。
例如:cd /linzhongniao/这种进入目录的方法就是绝对路径,
cd linzhongniao/这种进入目录的方法就是相对路径。
5.重定向标准输入输出和错误输出
特殊符号:
或1> 输出重定向:把当前输出的内容输入到后边的文件中,会清除文件原有内容。
>或1>>追加重定向:把当前输出的内容追加到后边的文件尾部,不会清除文件原有内容。
0<或< 输入重定向:输入重定向用于改变命令的输入,后面指定输入内容,前面跟文件名。
0<<或<<追加输入重定向:后跟字符串用来表示“输入结束”,也可用ctrl+d结束输入。
例子:
cat >>./linzhongniao.txt <<EOF
> woshishei
> nimeide
> I am linzhongniao
> EOF
2> 错误输出重定向:把错误信息输出到后边的文件中,会清空文件原有内容。
2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
说明:
(1)头的指向就是数据的流向。
(2)标准输入(stdin):代码为0,使用0<或0<<。数据流向从右向左。
(3)标准正常输出(stdout):代码1,使用1>或1>>。数据(正确的数据)流向从左向右。
(4)标准错误输出(stderr):代码为2,使用2>或2>>。数据(错误的数据)流向从左到右。
(5)2>&1,把标准输出和标准错误输出放到一个文件里面。正确输出放在哪了,错误输出也放在哪。例如echo linzhongniao >a.txt 2>&1将标准输出和标准错误输出都追加到a.txt文件中(推荐),定时任务使用>/dev/null 2>&1将标准输出和标准错误输出都输出到空。
(6)&>a.log 标准输出和标准错误输出都放到a.log里面,也可以追加&>>a.log。也可以这样写>a.log 2>&1
6.cat 查看文件内容
6.1编辑文件
方法一:
[root@linzhongniao local]# cat >>$(date +%Y%m%d%H%M).txt
DSFDS
DFSD
FDSFSD
DFDS《==按ctrl +d结束
查看一下
[root@linzhongniao local]# cat 201809020834.txt
DSFDS
DFSD
FDSFSD
DFDS
方法二:也可以将上面的输入改成追加
[root@linzhongniao local]# cat >>201809020834.txt
dhjh
hjfjdd
nimeide
[root@linzhongniao local]# cat 201809020834.txt
DSFDS
DFSD
FDSFSD
DFDS
dhjh
hjfjdd
nimeide
方法三:注意EOF的运用
[root@linzhongniao ~]# cat >>ddd/20180806.txt<<EOF
> DSDSDS
> djskd
> ds
> EOF
[root@linzhongniao ~]# cat ddd/20180806.txt
DSDSDS
djskd
ds
6.2 cat查看文件内容
参数说明
(1)-n参数说明
cat –n显示行号
[root@linzhongniao ~]# cat -n ddd/20180806.txt
1 DSDSDS
2 djskd
3 ds
4
5
6 DS
7 dfsadfdf
8
9 erwer
(2)-b参数
cat –b也是显示行号但是不显示空行的行号,相当于nl命令(number lines)。
[root@linzhongniao ~]# cat -b ddd/20180806.txt
1 DSDSDS
2 djskd
3 ds
4 DS
5 dfsadfdf
6 erwer
[root@linzhongniao ~]# nl ddd/20180806.txt
1 DSDSDS
2 djskd
3 ds
4 DS
5 dfsadfdf
6 erwer
(3)-E(或-e)参数说明
display $ at end of each line(在每一行的末尾显示“$”)-E 参数在每一行的末尾显示“$”符号
[root@linzhongniao ~]# cat -E ddd/20180806.txt
DSDSDS$
djskd$
ds$
$
$
DS$
dfsadfdf$
$
erwer$
(4)-s参数说明
suppress repeated empty output lines(抑制重复空行的输出),合并连续的重复行例如将两个空行合并成一个空行
[root@linzhongniao ~]# cat -s ddd/20180806.txt
DSDSDS
djskd
ds
DS
dfsadfdf
erwer
(5)-T选项
display TAB characters as ^I(显示tab的标签字符为^I),显示tab键标签字符“^I”,所以文档中间不一定是空格有可能是tab键标签,在选取分隔符的时候要注意用-T参数检测一下。
[root@linzhongniao ~]# cat -T ddd/20180806.txt
DSDSDS
djskd
sdsd^Idjkjk dsjk
ds
DS
dfsadfdf
erwer
7.cp (copy)拷贝命令:
拷贝文件和目录
cp(copy) [-aifpru] [源文件][目标文件]
-a:相当于-pdr(-p、-d和-r)
-d: 若源文件为连接文件(link file),则复制链接文件属性而非档案本身
-f:强制,若目标档案已经存在且无法开启,则移除后再尝试
-i:若目标文件已经存在是,在覆盖时先问询
-p:连同档案的属性(所有权、时间戳)一起复制过去,而非使用默认属性。
-r:递归用于复制目录
-u:若目标文件存在,则目标文件比源文件旧时才复制。
在一个目录或不同目录下备份文件可以用下面的方式来提高效率
[root@linzhongniao ~]# cp /etc/yum.repos.d/CentOS-Base.repo{,.ori}
[root@linzhongniao ~]# cd /etc/yum.repos.d/
[root@linzhongniao yum.repos.d]# ls
CentOS-Base.repo CentOS-Base.repo.ori
-d参数说明
[root@linzhongniao ~]# ln -s d n
[root@linzhongniao ~]# ls -li d n
413365 -rw-r--r--. 2 root root 0 Sep 2 22:55 d
398541 lrwxrwxrwx. 1 root root 1 Sep 18 21:33 n -> d
[root@linzhongniao ~]# cp n /tmp/
[root@linzhongniao ~]# ls -l /tmp/n
-rw-r--r--. 1 root root 0 Sep 18 21:34 /tmp/n
[root@linzhongniao ~]# cp -d n /mnt/
[root@linzhongniao ~]# ls -l /mnt/n
lrwxrwxrwx. 1 root root 1 Sep 18 21:34 /mnt/n -> d
7.1 范例
已知/tmp目录下已经存在了test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让linux系统不提示是否覆盖。
方法一:在命令前加反斜线“\”屏蔽别名
方法二:加命令的全路径,用which查看命令全路径
解题思路就是屏蔽掉系统默认的对应命令别名,默认执行cp的操作是调用了别名,所以会提示覆盖。还可以用下面的修改别名的方法
8.别名alias
cp mv rm 这些命令比较危险,所以系统会自动的为这些命令添加别名,会自动的在命令后加-i 当执行这些命令的时候就会询问是否执行。我们使用反斜线的作用就是屏蔽它的别名功能。查看系统别名用alias。
方法四:也可以用unalias +命令,将别名删掉。删除cp的别名在复制有重复文件就不会提示是否覆盖了。了解原理不要操作,只是临时的重启服务器之后别名还会存在。
删除别名后也可以用alias命令添加别名 alias cp=’cp -i’
也可以设置别名提示别人慎用此命令,例如rm命令
给网卡设置别名,在查网卡的时候命令很长记不住就可以设置别名
别名的作用:
(1)通过给危险命令加一些参数,防止人为误操作。
(2)把很多复杂的字符串或命令变成一个简单的字符串或命令。
定义别名永久生效:
/etc/profile 全局生效
~/.bashrc 当前用户生效
在命令行删除别名可以用 source ~/.bashrc命令加载出来
9.mv(move)移动文件
mv [-ifu] [源文件/源目录] [目的文件/目的目录]
参数
-i:如果目录已经存在,询问是否覆盖
-f:强制执行不再询问。
-u:若目的文件存在,则比源文件新才会移动
-t: 将所有元数据移动到目录中 ,结合find使用(重要)。
find命令与xargs命令和mv –t使用可以将查找出来的内容元数据移动到别的目录。
[root@linzhongniao ~]# find /tmp/ -type f|xargs mv -t /data/
10.rm(remove)删除目录和文件
参数:
-f(force)强制
-r(recursive)递归,用于删除目录。
删除一个文件用rm 1.txt,此方法会提示确认。禁止使用“rm –rf 文件名”,可以使用“rm -f”,rm –rf一般用来强制删除目录不提示,非常危险。rm命令用于删除文件,rmdir删除空文件。删目录可以用rm -rf强制删除.但是要慎用!少用最好不用可以将不需要的文件mv移动到tmp目录下或者其他目录中,tmp目录相当于windows的回收站。
企业很少用rm直接删除文件,结合find来删除文件
11.find命令
find 在目录结构层次中搜索文件或者目录
参数:
-type文件类型(f文件,d目录,c字符类型,b块设备磁盘,s socket文件通信用的)
-mtime n n为数字按文件的修改时间查找文件或目录,n为数字 ,+7代表七天以前,7代表第七天,-7代表最近7天。
-atime n n为数字,意义在n天之前的一天内被access过的文件或目录
-ctime n n为数字,意义为在n天之前的一天内被change过状态的文件或目录
-inum 查找inode
-perm 4755 按文件或目录权限查找
-maxdepth 1深度为1,最底层目录,因为第二层也会有目录那么不用这个参数有可能不准确,查找文件也是可以用的。
[root@linzhongniao linzhongniao]# find ./ -maxdepth 1 -type d ! -name "."
./ext
./wanger
./test
./zhangsan
./lisi
在脚本中删除文件或目录时生产场景常用的的方法为:
(1)和xargs搭配的方法
find . -type -name "*.log" -mtime +7 |xargs rm –f 删除7天以前的文件
find . -type -name "*.log" -mtime +7 |xargs rm –rf 删除7天以前的文件慎用
(2)使用find的-exec
find /tmp -type f -mtime +5 -exec rm {} \; 在tmp目录中查找更改时间为7天以前的文件并删除他们
范例:
(1)mv –t 和find命令以及xargs命令的使用。
[root@linzhongniao ~]# find /tmp/ -type f|xargs mv -t /data/
find命令与xargs命令和mv –t使用可以将查找出来的内容元数据移动到别的目录。
(2)mv 和find命令以及exec命令的使用
[root@linzhongniao ~]# ls eee/
[root@linzhongniao ~]# find . -type f -name "*.txt" -exec mv {} eee/ \;
[root@linzhongniao ~]# ls eee/
20180819.txt ett.txthhh.txt new.txt sd1.txt sd3.txt sd5.txt sss.txt svnpass.txt text.txt
dddd.txt fdisk.txt id.txt nnn.txt sd2.txt sd4.txt sort.txt svnpass1.txt svn.txt
[root@linzhongniao ~]# find eee/ -type f -name "*.txt" -exec mv {} -t . \;
[root@linzhongniao ~]# ls eee/
这个地方的mv {} eee/ \;
中的“{}”中括号就是前面用find查找的内容,而“\;”就是一个格式。“;”分号是bash的特殊意义用“\”反斜杠转义。更多find的例题请看下面的企业面试题。
12.grep命令
参数:
-v排除不需要的内容只过滤需要的内容 例子:grep –v linzhongniao text.txt
-B(before) 除了显示匹配的一行之外,并显示该行之前的num行
-A(after) 除了显示匹配的一行之外,并显示该行之后的num行
-C(Context control) 除了显示匹配的一行之外,并显示该行之前后各num行
命令:grep “过滤的内容” -(A|B|C) 行数 文件
--color=auto 对过滤的匹配的字符串加颜色
-n 对匹配的内容打印行号,-n “^$”显示空格行号。
-i 不区分大小写。
-E grep –E 可以同过滤多个字符串相当于egrep。
-o 只输出文件中匹配到的部分,把输出的内容在新的一行输出
grep –w 按单词搜索,只输出想要的单词或行。
-x 完全匹配输出,按行匹配及匹配的内容占整行只选择与整行完全匹配的匹配项。
-c 抑制正常输出或相反,打印匹配的输出文件的匹配的行数
grep –E 命令演示
[root@linzhongniao ~]# egrep "3306|1521" /etc/services
mysql 3306/tcp# MySQL
mysql 3306/udp # MySQL
ncube-lm1521/tcp # nCube License Manager
ncube-lm1521/udp# nCube License Manager
[root@linzhongniao ~]# grep -E "3306|1521" /etc/services
mysql 3306/tcp# MySQL
mysql 3306/udp# MySQL
ncube-lm1521/tcp# nCube License Manager
ncube-lm1521/udp# nCube License Manager
grep –w命令演示按单词搜索
[root@linzhongniao ~]# grep "good" linzhongniao.log
goodi
good
[root@linzhongniao ~]# grep -w "good" linzhongniao.log
good
grep –i命令演示不区分大小写
[root@linzhongniao ~]# grep -i "linzhongniao" linzhongniao.log
my god,i am not linzhongniao,But to the birds of the FOREST!!!!
LINZHONGNIAO
grep –o命令演示,对比和grep –w的区别
[root@linzhongniao ~]# grep -o "good" linzhongniao.log
good
good
grep –x命令演示完全匹配输出,匹配的内容独占一行
[root@linzhongniao ~]# grep -x "good" linzhongniao.log
good
grep –c参数演示,匹配空行的数量
[root@linzhongniao ~]# grep -c "^$" /etc/services
16
13.head命令
读取文件的前n行默认是前10行,head -2或者head –n 2读取文件的前两行,也可以一次查看多个文件
[root@linzhongniao ~]# head sd2.txt sd3.txt
==> sd2.txt <==
==> sd3.txt <==
14.tail
输出文件的后n行默认后10行,-n 数字,习惯-5,忽略n。
tail –f实时查看系统日志 tail –f /var/log/messages
模拟更新日志文件,用tail –f(或者tailf命令不是tail –f的缩写和tail -F)查看。模拟更新日志for n in seq 1000
;do echo $n >>/var/log/messages;sleep 1;done
企业面试题:
1.只查看ett.txt文件(100行)内第20到第30行的内容
在解决本题之前先了解一下seq命令(sequence序列),它可以从低到高打印数字的序列。例如从低到高打印数字10。横着打印10个数字,用seq –s,-s可以指定分隔符,默认分隔符是回车\n。
从数字2到10,打印数字10
从1开始以2为等差,打印数字10
解答:
演示测试数据:生成ett文件
[root@linzhongniao ~]# seq 100 >ett.txt
方法一:使用head和tail命令结合
先head命令取出前30行,再用tail命令取出倒数11行
方法二:
用sed命令,sed(stream editor)流编辑器linux三剑客老二,它可以实现对文件的增删改查替换功能sed -n ‘ ‘p 。-n取消默认输出,p打印。
扩展:
用sed命令打印行尾 $符号是结尾的意思
方法三:三剑客老三
awk,可以过滤输出内容,它是一门语言,NR代表行号。awk –F 指定分隔符。
awk -F对中括号里面的内容匹配多次,匹配多个分隔符[ ]+。例如“[ :]+”指定空格和“:”冒号作为分隔符。
awk –F “[ :]+” ‘{print }’
awk -F "[ :]+" ‘{print $4}‘ /etc/passwd
方法四:用grep命令
-B 除了显示匹配的一行之外,并显示该行之前的num行
-A 除了显示匹配的一行之外,并显示该行之后的num行
-C 除了显示匹配的一行之外,并显示该行之前后各num行
2.find结合sed查找替换企业案例实战
在解答本题之前先复习sed –i命令,sed –i修改替换文件内容
先用echo成一个文件
用sed替换linzhongniao为zhangsan。这种只是把输出改了内容没有改
修改内容用sed -i
案例:
把/nishishei目录下及其子目录下所有以扩展名.sh结尾的文件中包含nishishei的字符串全部替换为lisi。
解答:
建立测试数据:
用find结合sed解决问题
方法一:
将所有.sh文件里的nishishei替换成lisi,我们可以用cat查看一下里面的内容,注意不能直接加cat;因为cat会将管道过滤的内容按数据流进行处理,查看的还是过滤之前的内容,所以要想查看里面的内容必须加xargs。
好下面接xargs接sed命令,将所有.sh文件中的nishishei替换成lisi,可以在sed后不加-i参数,先看一下替换的内容对不对。
加-i替换
方法二:再把lisi改成linzhongniao,道理是一样的
反引号应用命令相当于$(),先执行find再执行sed
15.查看man帮助
用man 命令—help查看命令的帮助信息
Linux内置的命令用man查不到,可以用help 查看。比如cd命令,就要用help cd 查看帮助。
下图为linux自带的命令
Linux内置命令是查不到全路径的,用which查看命令路径
16.特殊符号讲解
(1){}中括号,生成字符或者数字序列,类似seq,一般配合echo命令使用,“find /etc -type f -name ".sh"-exec 命令 {} \;” 里的{}意思是前面find命令查找的结果。
(2)叹号
!叹号,!后接命令第一个字母,表示找出最近一次以此字母开头的命令。
!!两个叹号表示上一次操作的命令
!叹号后接操作历史记录的表示调出最近操作的第几条命令,查看操作的历史用history,清空历史记录用history –c,用history –d删除指定行的历史记录。“!”叹号后面接302就是把历史记录的302行又执行了一遍。
(3)波浪线“~”
~波浪线,在root目录下表示当前目录,在其他用户下表示当前用户的用户家目录
(4)横线“-”
在两个目录之间切换时,可以用cd –直接在这两个目录之间切换,之所以能够切换是有$OLDPWD和$PWD两个参数。
17.linux命令行常用快捷键
tab 路径补全键
ctrl+c 终止当前任务或程序
ctrl+d 退出当前用户环境,相当于exit和logout
ctrl+l (是小写字母L)清屏clear
ctrl+a 移动到一行命令的开头
ctrl+e 移动到一行命令的结尾
ctrl+u 将光标移动到命令中间清除前面的内容
ctrl+k 将光标移动到命令中间清除后面的内容
ctrl+w 删除当前行。
ctrl+r 搜索之前用到的命令。
ctrl+q 如果长时间光标被锁定,可以解除锁定。
18.查看linux系统是32位还是64位的方法
(1)查看系统内存版本uname –m
uname –m查看系统内存版本也可以用uname –a查看系统的所有信息
方法一:
方法二:
(2)查看装操作系统版本
(3)查看系统内核版本
用uname –r
(4)查看主机名
查看主机名用uname –n 或者hostname
[root@linzhongniao ~]# uname -n
linzhongniao
[root@linzhongniao ~]# hostname
linzhongniao
19.touch
它可以创建新文件,更新旧文件的时间戳。创建文件名,touch命令加文件名,touch更改旧文件的时间戳。
-a (change only the access time)改变访问时间执行touch –a ddd.txt,我们发现访问时间和改变时间发生了变化。
用touch –a只有访问时间和change时间改变了,修改文件时间没有变,那我们对ddd.txt文件进行编辑;再用stat命令查看文件属性,时间戳就改变了。
用stat命令查看详细的文件属性,access访问时间,modify修改操作时间对文件进行编辑时间就会改变,change发生改变的时间只要是访问了文件时间就发生了变化。
20.连接CRT问题
客户端连接服务器端物理链路有问题,检查网卡,IP,网线,防火墙。
连接CRT先在windows端检查网络是否ping通,如果ping通还是连接不上CRT,用telnet命令查看linux端ssh服务是否开启,也可以在windows端用tracert –d(路由跟踪命令),也可以检查路由网关是否通畅,-d是不进行反向解析。linux操作系统用traceroute –d ip地址或者域名。
不通的可能原因:
a.服务器端防火墙阻挡关闭防火墙
b.端口没开,服务器端没有监听你连接的端口
netstat -lntup|grep 22
netstat -lntup|grep sshd
21.使用rz和sz注意事项
只能上传下载文件而不能是目录,如果是目录需要打包成文件再上传。
上传的文件可以是电脑里的任意文件,下载的文件会下载到SecureCRT配置的对应下载路径目录中。如图。
执行rz命令回车后出现的的窗口下面的,一定不要勾选最下方的“以ASCLL方式上传文件”,否则会遇到问题如图
22.添加普通用户
添加用户并设置密码
[root@linzhongniao ~]# useradd linzhongniao
[root@linzhongniao ~]# tail -1 /etc/passwd
linzhongniao:x:500:500::/home/linzhongniao:/bin/bash
交互式设计密码:
[root@linzhongniao ~]# passwd linzhongniao
Changing password for user linzhongniao.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
非交互式设置密码
root@linzhongniao ~]# echo "1234567"|passwd --stdin linzhongniao
Changing password for user linzhongniao.
passwd: all authentication tokens updated successfully.
切换到普通用户,必须用su –的格式
[root@linzhongniao ~]# su – linzhongniao
查看路径
[linzhongniao@linzhongniao ~]$ pwd
/home/linzhongniao
查看当前用户是谁
[linzhongniao@linzhongniao ~]$ whoami
linzhongniao
ctrl +d退出普通用户,或者su – root
[linzhongniao@linzhongniao ~]$ logout
[root@linzhongniao ~]# su - lianzhongniao
su: user lianzhongniao does not exist
[root@linzhongniao ~]# su - linzhongniao
[linzhongniao@linzhongniao ~]$ su - root
Password:
[root@linzhongniao ~]#
23.linux系统的运行级别
(1)查看运行级别/etc/inittab
[root@linzhongniao ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this) 《==停止
# 1 - Single user mode 《==单用户模式
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 《==多用户,没有NFS(如果有网络的话也就是 3)
# 3 - Full multiuser mode 《==完整的多用户模式
# 4 – unused 《==未使用
# 5 - X11《==x11 桌面
# 6 - reboot (Do NOT set initdefault to this) 《==重启
#
id:3:initdefault: 《==linux系统默认的运行级别,如果设置成0系统就启动不了了,默认设置为3,设置为6会一直重启。
(2)查看当前运行级别
[root@linzhongniao ~]# runlevel
N 3
(3)切换运行级别用init
切换运行级别init后面接对应的数字,最常用的运行级别是3和1.
如果要切换桌面,必须安装桌面软件
a.检查一下我们已经安装的软件以及可以安装的软件,yum grouplist
b.安装X(X Window System),命令为yum groupinstall "X Window System" 回车, 安装完成会出现complete安装成功
c.安装图形化界面软件,CentOS6.8需要安装Desktop ,有的CentOS需要安装GNOME或者(GNOME Desktop)
[root@linzhongniao ~]# yum groupinstall "Desktop" –y
切换图形界面出现下面错误无法切换,原因是"messagebus”“haldaemon”这两个服务关闭这是在系统优化时犯的错误
24.linux关机重启命令
(1)关机用shutdown命令,还有halt或者init 0,poweroff
我们一般用shutdown –h 后面接时间,shutdown –h now表示现在关闭,
设置指定时间后关机,比如1分钟后关机
(2)重启
重启用reboot(init 6)或者shutdown –r now,或者shutdown –r +时间
25.linux系统开机显示的版本信息的文件
如果开机不希望显示这些信息可以清除掉,我们也可以编写内容
26.motd显示用crt登录后的信息
在/etc/motd里面设置
27.profile
/etc/profile全局环境变量
28.显示总行数wc
为每个文件打印新行、字符和字节计数
参数:
-c 打印字节数
-l 打印行数
-m 打印字符数
-w 打印单词,统计
-L 打印最长的行的长度,应用它可以知道字符串的长度
举例:
建立测试数据:
[root@linzhongniao ~]# cat >>wc.txt<<EOF
> WERTYU
> qwedfghj
> asd
> 林中鸟
> EOF
[root@linzhongniao ~]# cat wc.txt
WERTYU
qwedfghj
asd
林中鸟
wc –l显示文件的总行数
[root@linzhongniao ~]# wc -l wc.txt
4 wc.txt
-c参数举例,打印字节数
[root@linzhongniao ~]# wc -c wc.txt
30 wc.txt
-m参数举例,打印字符数
[root@linzhongniao ~]# wc -m wc.txt
24 wc.txt 《==和-c参数对比,可知一个汉字相当于两个字节
-w参数举例,打印单词统计
[root@linzhongniao ~]# wc -w wc.txt
4 wc.txt
-L举例,打印最长的行的字节数
[root@linzhongniao ~]# wc -L wc.txt
8 wc.txt
29.设置开机自启动
chkconfig --list 查看列表显示所有,显示某一个直接指定就可以了不用grep
--level 接运行级别 接服务 off[on] (指定哪些运行级别受到影响)
--add 加到chkconfig管理,自己写的程序脚本才会用到
chkconfig原理:
它的工作原理就是将服务加入开机自启动或者关闭自启动之后会在/etc/rc.d/rc3.d目录下创建一个连接文件;开机自启动以S开头,关闭开机自启动以K开头。设置启动级别可以在启动文件中设置例如下图,通常在自己写的脚本中会用到,不必对其他启动文件做任何修改。具体操作在开机自启动优化中。
30.grup引导菜单
[root@linzhongniao ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda4
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-754.2.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-754.2.1.el6.x86_64 ro root=UUID=ce2ba6aa-2068-45b2-8942-5de30c7a363a rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-754.2.1.el6.x86_64.img
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ce2ba6aa-2068-45b2-8942-5de30c7a363a rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
里面有linux启动的内核,设置单用户启动或者双系统就要设置grup引导。
31.linux系统开机自启动优化
关闭不需要的服务,禁止其开机自启动服务
[root@linzhongniao ~]# chkconfig --list|grep 3:on|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk ‘{print "chkconfig",$1,"off"}‘|bash
[root@linzhongniao ~]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:on3:on4:on5:on6:off
network0:off 1:off 2:on3:on4:on5:on6:off
rsyslog 0:off 1:off 2:on3:on4:on5:on6:off
sshd 0:off 1:off 2:on3:on4:on5:on6:off
sysstat 0:off 1:on2:on3:on4:on5:on6:off
32.查看文件目录的大小du
du 查看目录或文件的大小
参数:
-h 人类可读
[root@linzhongniao ~]# du ett.txt
4 ett.txt
[root@linzhongniao ~]# du -h ett.txt
4.0Kett.txt
--si 像h一样但是使用1000而不是使用1024的幂
[root@linzhongniao ~]# du --si ett.txt
4.1kett.txt
-S 查看目录(不包括子目录大小)或文件的大小
[root@linzhongniao ~]# du -Sh server/
12K server/scripts
4.0Kserver/
-s 查看目录(包括子目录)或文件的大小
[root@linzhongniao ~]# du -sh ett.txt
4.0Kett.txt
[root@linzhongniao ~]# du -sh server/
16K server/
33.命令路径加入的方法
临时:
[root@linzhongniao ~]# export PATH="$PATH:/root"
[root@linzhongniao ~]# nishishei
-bash: /root/nishishei: Permission denied
[root@linzhongniao ~]# chmod +x /root/nishishei
[root@linzhongniao ~]# nishishei
I am linzhongniao!
永久:
设置环境变量用export PATH="$PATH:/root",永久生效放在/etc/profile全局配置文件里。
34.查看二进制命令所在路径
用which查看,从PATH变量所在的路径查找
[root@linzhongniao ~]# which cp
alias cp=‘cp -i‘
/bin/cp
35.搜索文件的全路径命令
which命令
[root@linzhongniao ~]# which mv
alias mv=‘mv -i‘
/bin/mv
whereis命令
[root@linzhongniao ~]# whereis mv
mv: /bin/mv /usr/share/man/man1p/mv.1p.gz /usr/share/man/man1/mv.1.gz
locate命令
find命令查找文件或目录
[root@linzhongniao ~]# find . -type f -name "*.txt"
36.cut
cut 从每一行文件中删除(切割)部分。
cut命令参数说明
(1)-b参数,按照字节切割文件
输出第3个字节,空格也算一个字节
[root@linzhongniao ~]# cut -b 3 text.txt
a
输出第3到4个字节,空格也算一个字节
[root@linzhongniao ~]# cut -b 3-4 text.txt
am
输出第四个字节之前的,空格也算一个字节
[root@linzhongniao ~]# cut -b -4 text.txt
I am
输出第四个字节以后的内容
[root@linzhongniao ~]# cut -b 4- text.txt
m linzhongniao my qq is 120989098
(2)-c参数以字符为单位切割
英文中一个字符就等于一个字节,汉语中一个字符相当于两个英文字符。
英文中-c参数和-b参数是一样的。
[root@linzhongniao ~]# cut -c 4- text.txt
m linzhongniao my qq is 120989098
汉语中
[root@linzhongniao ~]# cut -c 3-5 text.txt
am
节放假
(3)-d参数指定分隔符
默认以tab键为分隔符,可以提前用cat –T查看是否是以tab键为分隔符,空格和tab键是看不出来的。自定义分隔符用-d参数指定分隔符,-f参数指定打印第几栏的内容。
[root@linzhongniao ~]# head -1 /etc/passwd|cut -d : -f4
0
默认以tab键为分隔符
[root@linzhongniao ~]# cat -T text.txt
I am linzhongniao my qq is 120340987
中秋节放假
I^Iam^Ilisi
[root@linzhongniao ~]# cut -f 3 text.txt
I am linzhongniao my qq is 120989098
中秋节放假
lisi
指定以空格为分隔符
[root@linzhongniao ~]# cut -d " " -f 2 text.txt
am
中秋节放假
I am lisi
37.date
date –s “ ”修改时间
date +%F 输出这样的“2018-07-31”年月日格式
date +%Y%m%d%H%M输出这样的“201809020834”年月日小时分钟的格式
[root@linzhongniao ~]# echo `date +%F`
2018-07-31
[root@linzhongniao ~]# echo $(date +%F)
2018-07-31
38.ln命令
ln无参数常见创建硬链接,很少用到一般就是备份文件。演示见下文创建硬链接和软连接。
硬链接:ln 源文件 目标文件
软连接:ln –s 源文件 目标文件(目标文件不能事先存在)
39.rename
rename重命名文件
rename from to file
rename
form 代表需要替换或要处理的字符文件的一部分,文件的扩展名
to 把前面from代表的内容替换为to代表的内容即重命名处理后的结果
file 接要处理的文件
格式:
rename "需要重命名的内容" "重命名完了的内容" (指定要修改的文件也可以是,所有内容)
修改文件名用rename
当前目录下有文件如下所示:
[root@linzhongniao test]# ls
stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finished.jpg
要求用rename命令重命名,效果为stu_102999_1_finished.jpg==>stu_102999_1.jpg,即删除文件名的_finished
[root@linzhongniao test]# rename "_finished" "" *
[root@linzhongniao test]# ls
stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
40.basename(了解)
basename-从文件名中去掉目录路径和文件后缀
去掉目录路径
[root@linzhongniao test]# basename /root/test/stu_102999_1.JPG
stu_102999_1.JPG
去掉文件的后缀
[root@linzhongniao test]# basename stu_102999_1.jpg .jpg
stu_102999_1
41.dirname(了解)
dirname——从文件名中去掉文件后缀,与basename命令互补
[root@linzhongniao test]# dirname /root/test/stu_102999_1.JPG
/root/test
42.file
file – 确定文件类型,多个文件用空格分开
[root@linzhongniao ~]# file /etc/init.d/sshd
/etc/init.d/sshd: Bourne-Again shell script text executable
[root@linzhongniao ~]# file ett.txt
ett.txt: ASCII text
[root@linzhongniao ~]# file id.txt sd1.txt
id.txt: ASCII text
sd1.txt: ASCII text
43.md5sum
md5sum - compute and check MD5 message digest计算和检查md5摘要。
参数:-c 从文件中读取MD5值并检查是否一样。
计算和校验文件的md5值,md5值是唯一的;如果两个文件的md5值一样那么这两个文件就是一个文件,如下面text.soft是text.txt的软连接文件
[root@linzhongniao ~]# ln -s text.txt text.soft
[root@linzhongniao ~]# md5sum text.txt
d41d8cd98f00b204e9800998ecf8427e text.txt
[root@linzhongniao ~]# md5sum text.soft
d41d8cd98f00b204e9800998ecf8427e text.soft
校验文件的MD5值,用md5sum –c命令,来检测网络传输的文件数据是否丢失,因为受网络波动的影响数据会有丢失或文件受损。
[root@linzhongniao ~]# md5sum text.txt >md5.log
[root@linzhongniao ~]# cat md5.log
d41d8cd98f00b204e9800998ecf8427e text.txt
[root@linzhongniao ~]# md5sum -c md5.log
text.txt: OK
往文件中插入内容,文件的md5值会发生改变,模拟网络波动
[root@linzhongniao ~]# echo "111" >> text.txt
[root@linzhongniao ~]# md5sum -c md5.log
text.txt: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
44.dumpe2fs
dumpe2fs - 显示ext2/ext3/ext4文件系统信息。
dumpe2fs命令语法:dumpe2fs [ -bfhixV ] [ -o superblock=superblock ] [ -o blocksize=blocksize ] device
语法看起来比较复杂,看不懂的直接看下面的常用命令选项和实例。
dumpe2fs命令描述
显示device中文件系统的超级块和块组信息。
查看文件系统的超级块和组块的信息,超级块记录了文件系统的管理信息,inode和block的大小,元数据。
[root@linzhongniao ~]# dumpe2fs /dev/sdb1|egrep -i "super"
dumpe2fs 1.41.12 (17-May-2010)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Primary superblock at 1, Group descriptors at 2-2
Backup superblock at 8193, Group descriptors at 8194-8194
Backup superblock at 24577, Group descriptors at 24578-24578
Backup superblock at 40961, Group descriptors at 40962-40962
Backup superblock at 57345, Group descriptors at 57346-57346
Backup superblock at 73729, Group descriptors at 73730-73730
[root@linzhongniao ~]# dumpe2fs /dev/sdb1|egrep -i "inode count|block count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count: 25896
Block count: 103424
Reserved block count: 5171
45.xargs
xargs 从标准输入(管道或stdin)获取数据,并将数据转换成命令行的参数,创建和执行命令,通常和find以及“|”管道一起使用。
参数:
-n 数字,分组
[root@linzhongniao ~]# xargs -n 2 <linzhongniao.txt
1 2
3 4
5 6
7 8
-i和-I参数(了解)
[root@linzhongniao ~]# find . -type f -name "*.txt"|xargs -i mv {} /tmp/k/
[root@linzhongniao ~]# cd /tmp/k/
[root@linzhongniao k]# ls
2018-07-20.txt b.txt fff.txt linzhongniao.txt test1.txtuserpasswd3.txt usersm.txt
20180806.txtceshi.txt f.txtperson.txttext.txt userpasswd.txt users.txt
201808.txt ddd.txtggg.txt sdsd.txt userpasswd1.txt usersm1.txt user.txt
a.txt ett.txtkkk.txt sss.txt userpasswd2.txt usersm2.txt
[root@linzhongniao k]# find . -type f -name "*.txt"|xargs -I {} mv {} /tmp/l/
[root@linzhongniao k]# cd /tmp/l/
[root@linzhongniao l]# ls
2018-07-20.txt b.txt fff.txt linzhongniao.txt test1.txtuserpasswd3.txt usersm.txt
20180806.txtceshi.txt f.txtperson.txttext.txt userpasswd.txt users.txt
201808.txt ddd.txtggg.txt sdsd.txt userpasswd1.txt usersm1.txt user.txt
a.txt ett.txtkkk.txt sss.txt userpasswd2.txt usersm2.txt
46.tr
tr 对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。
tr 选项 参数
(1)将输入大写字符逐个(不是整个字符)替换成小写字符
[root@linzhongniao ~]# echo "HELLO WORLD"|tr ‘A-Z‘ ‘a-z‘
hello world
‘A-Z‘ 和 ‘a-z‘都是集合,集合是可以自己制定的。例如:‘ABD-}‘、‘bB.,‘、‘a-de-h‘、‘a-c0-9‘都属于集合,集合里可以使用‘\n‘、‘\t‘,可以使用其他ASCII字符。
(2)-s参数
-s,squeeze-repeats 替换重复字符的每个输入序列
[root@linzhongniao ~]# echo "HEELLO WWORLDD"|tr -s ‘A-Z‘ ‘a-z‘
helo world
(3)使用tr删除字符
-d参数删除所有属于字符集的字符
[root@linzhongniao ~]# echo "hello 123 world 456"|tr -d ‘0-9‘
hello world
(4)删除不在补集中所有字符
-c,取代所有不属于第一字符集的字符,例删除除了0-9就的所有内容
[root@linzhongniao ~]# echo "hello$%^^&1 2 3/.(^&world 4 5 6"|tr -d -c ‘0-9 \n‘
1 2 3 4 5 6
也可以结合xargs
[root@linzhongniao ~]# echo "hello$%^^&1 2 3/.(^&world 4 5 6"|tr -c ‘0-9‘ ‘ ‘|xargs
1 2 3 4 5 6
47.seq
sequence==seq序列
seq命令(sequence序列),它可以打印数字的序列从低到高。例如从低到高打印数字10。横着打印10个数字,用seq –s参数,它可以指定分隔符,默认分隔符是回车\n。
参数:
-s 指定分隔符
-w 用前导零来平衡宽度,以01..02..03的形式打印
(1)打印1到10横着打印或竖着打印,以1.2…..的方式
(2)-w 用前导零来平衡宽度
竖着打印1到10以01 02 …….的方式
[root@linzhongniao ~]# seq -w 10
01
02
03
04
05
06
07
08
09
10
横着打印1到10以01 02 …….的方式,以空格为分隔符
[root@linzhongniao ~]# seq -w -s " " 10
01 02 03 04 05 06 07 08 09 10
(3)从数字2到10,打印数字10
(4)从1开始以2为等差,竖着打印数字10
从1开始以2位等差,横着打印数字10
[root@linzhongniao ~]# seq -s " " 1 2 10
1 3 5 7 9
48.strace命令跟踪排查
strace 跟踪系统调用和信号
参数:
-tt 在每行的输出的前面,显示毫秒级别的时间
-T 显示每次系统调用所花费的时间
-o 把strace的输出单独写到指定的文件
-p 指定要跟踪进程的pid,要同时跟踪多个pid,重复多次-p选项即可
–f 跟踪目标进程,以及目标进程创建的所有子进程。
[root@linzhongniao ~]# strace -f rm -f ddd/
strace –p(pid)跟踪进程排查,分析任务进程占用cpu过高的方法。僵尸进程strtace是没有权限追踪的。
[root@linzhongniao ~]# strace -p 1387
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
用top或者ps命令找到可疑的id,也可以直接用top –H找出占用线程最高的id
[root@linzhongniao ~]# ps -ef|grep sshd
root 1527 1 0 09:01 ?00:00:00 /usr/sbin/sshd
root 1641 1527 0 09:02 ?00:00:00 sshd: root@pts/0
root 2116 1645 0 09:26 pts/000:00:00 grep --color=auto sshd
[root@linzhongniao ~]# strace -p 1527
49.查看进程命令
查看进程静态的用ps动态的用top,也可以用htop效果更佳华丽一点
49.1 ps命令查看静态进程
ps:将某个时间点的进程情况选取下来
参数(了解):
-A 所有进程都显示出来,与-e有相同的作用
a 不与terminal(终端)有关的程序
u 有效用户相关的进程
x 通常与a参数一起使用可列出较完整信息,输出格式规划
-l 列表,更详细的将pid列出
-j 列出工作的格式(jobs)
-f 做一个更为完整的输出
常用命令(记住):
ps aux查看系统所有的进程信息(重要)
ps –l(小写的L)只列出与自己有关的进程(重要)
ps –lA 也能查看系统的所有进程信息
ps axjf 连同部分进程树一起查看
(1)ps aux基础页面详解
USER 该进程属于哪个用户
PID 进程的PID标识
%CPU 该进程使用的cpu资源百分比
%MEM 该进程所占用的物理内存百分比
VSZ 该进程用掉的虚拟内存量
RSS 该进程占用的固定的内存量
TTY 该进程是哪个终端机上面的,若与终端机无关则显示?,若为tty1-tty6是本机上面的登录程序,若pst/0等则表示由网络连接该主机的进程。
STAT 进程当前的状态与ps –l的状态相同
START 进程被触发启动的时间
TIME 该进程实际使用cpu运行的时间
COMMAND 该进程的实际命令
(2)ps –l基础页面详解
[root@linzhongniao ~]# ps -l
F S UIDPID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1695 1691 0 82 2 - 27146 do_wai pts/000:00:00 bash
4 T 0 18825 1695 0 82 2 - 34790 do_sig pts/000:00:00 vim
4 R 0 21270 1695 0 82 2 - 27035 - pts/000:00:00 ps
F:代表进程的标志说明这个进程的权限,常见号码有:
若为4表示此进程的权限为root。
若为1 则表示此进程仅可进行复制(fork)而无法实际执行(exec)
S:代表这个进程的状态,主要状态有:S R D T Z
R(running)该进程正在运行中
S(sleep)该进程目前正在睡眠状态,但可以被唤醒
D 不可被唤醒的睡眠状态
T 停止状态(stop)可能是工作控制(后台暂停)或除错状态
Z (Zombe)“僵尸”状态该进程已经停止但无法被删除至内存外
UID|PID|PPID 代表此进程被该UID拥有|进程的PID号|此进程的父进程的PID号
C 代表CPU使用率,单位为百分比
PRI /NI Priority/Nice的缩写,代表此进程被CPU所执行的优先级,数值越小代表该进程越快被cpu执行
49.2 top查看动态进程
参数:
-d 接数字。整个进程更新的秒数
-p 指定某个pid查看
在执行top命令中可以使用的按键命令
?:显示top当中可以输入的按键命令
P :以cpu使用的资源排序
M:以内存的使用资源显示
N:以pid进行排序
T:由该进程使用的cpu时间积累(TIME+)排序
k:给予某个PID一个信号,杀死进程
r:给予某个PID重新制定一个nice值,先输入PID值回车再输入nice值
q:离开top软件
top命令基础界面详解
[root@linzhongniao ~]# top
top - 16:30:50 up 8:38, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1003008k total, 348588k used, 654420k free,82488k buffers
Swap: 1535996k total,0k used, 1535996k free,89592k cached
第一行:任务队列信息
16:30:50 当前时间
up 8:38 系统运行时间8小时38分钟
3 users 当前登录几个用户
load average: 0.00, 0.00, 0.00 系统负载即任务队列的平均长度,三个数值分别为1分钟、5分钟、15分钟前系统负载的平均值(重要),也可以用w命令查看或者cat /proc/loadavg
第二行:进程数信息
Tasks: 131 total 进程总数
1 running 一个正在运行的进程数
130 sleeping 130个睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
第三行:CPU状态
0.0%us 用户进程占用的百分比
0.1%sy 系统进程占用的百分比
0.0%ni 用户进程空间内改变过优先级的进程占cpu的百分比
99.9%id 空闲cpu百分比
0.0%wa IO等待占用CPU的百分比
0.0%hi 硬中断占用cpu的百分比
0.0%si 软中断占用cpu的百分比
第四行:内存状态
1003008k total 物理内存量
348588k used 使用的物理内存总量
654420k free 空闲内存总量
82488k buffers 用作内核缓存的内存量
第五行:swap交换状态
1535996k total 交换区总量
0k used 使用的交换区总量
1535996k free 空闲的交换区总量
89592k cached 缓冲的交换区总量
第七行:各进程的状态监控
PID 进程ID
user 用户
PR 优先级
NInice值负值表示高优先级,正值表示低优先级
VIRT 使用的虚拟内存的总量
RES 进程使用的、未被换出的物理内存大小,单位kb
SHR 共享内存大小
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
50.vi/vim命令考察
退出保存 wq
强制退出保存 wq!
强制退出不保存 q!
光标移动到文件的最后一行 G
光标移动到文件的第一行 gg或者:0
移动到指定行 ngg比如21gg
从光标所在位置将光标移动到当前行的开头 “^”尖括号或者home键
从光标所在位置将光标移动到当前行的结尾 “$”或者end键
取消上一次的操作 u
删除一行 dd ndd
向下搜索 /
向上搜索 ?
向上或下继续搜索 n
向上或下反向搜索 N
51.tac命令(了解)
tac反向查看与cat相反,以行为单位反向读取,不是每一行反向读取,即从最后一行开始读取
[root@linzhongniao ~]# tac ddd/20180806.txt
erwer
dfsadfdf
DS
ds
sdsddjkjk dsjk
djskd
DSDSDS
[root@linzhongniao ~]# cat ddd/20180806.txt
DSDSDS
djskd
sdsddjkjk dsjk
ds
DS
dfsadfdf
erwer
52.rev命令(了解)
rev也是反向读取,行的顺序不会变,一行内容的首尾相反
[root@linzhongniao ~]# echo "123456"|rev
654321
[root@linzhongniao ~]# rev ddd/20180806.txt
SDSDSD
dksjd
kjsd kjkjd dsds
sd
SD
fdfdasfd
rewre
53.more
more命令以滚动的方式查看文件,空格键向下一屏回车键向下一行,小b向上查看,按等于号显示行号。/反斜线可以搜索。按小写的v进入vi编辑器和vi编辑器是一样的。vi编辑器的命令参数more同样适用。小写q退出。
more –“接数字”例如more -10,以10行为单位查看
54.less命令
less命令也是分页查看,查显示行号用less –N
55.paste 命令
paste单词的意思是粘贴的意思,该命令主要用来将多个文件的内容合并,与cut命令的功能正好相反。
粘贴两个不同来源的数据时首先需将其分类,并确保两个文件的行数相同。paste按行合并文件。默认情况下,paste连接用空格或tab键分隔新行中的不同文本,除非指定-d选项指定域分隔符。
paste的格式为:
paste 参数 –file1 –file2
选项含义如下:
-d 指定不同于空格或tab键的域分隔符。例如用@符号分隔域,使用- d “@”。
-s 将每个文件每列按行合并而不是按行粘贴,即每个文本的每列,合并后单独是一行。
“-” 使用标准输出。例如ls -l |paste ,即只在一列上显示输出。
[root@linzhongniao ~]# paste ggg.txt fff.txt
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
要创建不同于空格或tab键的域分隔符,使用-d选项。下面的例子用冒号做域分隔符。
[root@linzhongniao ~]# paste -d ":" ggg.txt fff.txt
1:2
2:3
3:4
4:5
5:6
6:7
7:8
8:9
9:10
10:11
11:12
12:13
13:14
14:15
15:16
16:17
17:18
18:19
19:20
20:21
交叉合并的例子结合tr命令
[root@linzhongniao ~]# head svn.txt svnpass.txt
==> svn.txt <==
stu119594
stu25054
stu320718
stu424819
stu53033
stu62799
stu725987
stu83282
stu917554
stu1020697
==> svnpass.txt <==
be8e0041
aee8414e
5203ac06
24dbff8a
19390195
bc2c5d29
b1e4a85d
af48f59d
5360caec
38d7a4ff
[root@linzhongniao ~]# paste svn.txt svnpass.txt|tr "\t" "\n"
stu119594
be8e0041
stu25054
aee8414e
stu320718
5203ac06
stu424819
24dbff8a
stu53033
19390195
stu62799
bc2c5d29
stu725987
b1e4a85d
stu83282
af48f59d
stu917554
5360caec
stu1020697
38d7a4ff
-s参数的用法
[root@linzhongniao ~]# head new.txt newac
==> new.txt <==
1
2
3
4
5
6
==> newac <==
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
[root@linzhongniao ~]# paste -s new.txt newac
1 2 3 4 5 6
# 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
实例:
已知SVN服务器账号及密码字符串如下:
提示:stu开头的为账号,对应的为密码
[root@linzhongniao ~]# cat svnpass1.txt
stu119594
be8e0041
stu25054
aee8414e
stu320718
5203ac06
stu424819
24dbff8a
stu53033
19390195
stu62799
bc2c5d29
stu725987
b1e4a85d
stu83282
af48f59d
stu917554
5360caec
stu1020697
38d7a4ff
问题:账号和密码合并成一行,并用等号分离
stu119594=be8e0041
stu25054=aee8414e
stu320718=5203ac06
解答:方法一:
[root@linzhongniao ~]# paste -sd "=\n" svnpass1.txt
stu119594=be8e0041
stu25054=aee8414e
stu320718=5203ac06
stu424819=24dbff8a
stu53033=19390195
stu62799=bc2c5d29
stu725987=b1e4a85d
stu83282=af48f59d
stu917554=5360caec
stu1020697=38d7a4ff
方法二:
[root@linzhongniao ~]# paste -d "=" - - <svnpass1.txt
stu119594=be8e0041
stu25054=aee8414e
stu320718=5203ac06
stu424819=24dbff8a
stu53033=19390195
stu62799=bc2c5d29
stu725987=b1e4a85d
stu83282=af48f59d
stu917554=5360caec
stu1020697=38d7a4ff
56.chpasswd命令
chpasswd以批量处理的方式更新用户密码
chpasswd命令是批量更新用户口令的工具,是把一个文件的内容重新定向添加到/etc/shadow中。
参数:
-e:输入的密码是加密后的密文
-h:显示帮助信息并退出
-m:当被支持的密码未被加密时,使用MD5加密代替DE5加密。
实例:
先创建用户密码对应文件,格式为username:passwd, 如users1:users1b2b9,必须以这种格式来写(涉及合并两个文件可以用paste命令)并且不能空行保存成文本,然后执行chpasswd命令。列如chpasswd<usersm2.txt。
57.dd命令
dd命令用于复制文件并对源文件的内容进行转换和格式化处理。dd命令可以用来备份裸设备,建议有需要的时候使用dd对物理磁盘操作。还可以创建文件和文件系统。
语法:dd(选项)
选项:
bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数;
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
--help:帮助;
--version:显示版本信息。
实例:
(1)创建文件
[root@linzhongniao ~]# dd if=/dev/zero of=nnn.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00102039 s, 1.0 GB/s
[root@linzhongniao ~]# du -sh nnn.txt
1.0Mnnn.txt
if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
bs 代表字节为单位的块大小。
count 代表被复制的块数。
/dev/zero 是一个字符设备,会不断返回0值字节(\0)。
(2)创建文件系统
[root@linzhongniao ~]# dd if=/dev/zero of=/dev/sdc bs=10M count=100
dd: writing `/dev/sdc‘: No space left on device
48+0 records in
47+0 records out
498610176 bytes (499 MB) copied, 8.26442 s, 60.3 MB/s
58.查看本地网卡信息
ethtool 是一个linux下的网络驱动程序的诊断工具,可以获取网络设备的相关信息包括连接状态、驱动版本。
查看机器上网的速度:查看千兆还是百兆的用ethool eth0,操作完毕后输出信息中“speed”这一项就指示了网卡的速度。
如果机器上安装了两块网卡,怎么确定eth0对应那快网卡呢?执行下面命令看那快的led灯亮就是那个
[root@linzhongniao ~]# ethtool -p eth0 10
将千兆网卡的速度将为百兆
ethtool –s eth0 speed 100
59.sh命令
sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取,和内核进行沟通。
参数:
-i:实现脚本交互。
-n:进行shell脚本的语法检查。
-x:实现shell脚本逐条语句的跟踪。
演示:
(1)-x参数,逐条跟踪监本的执行过程
[root@linzhongniao ~]# sh -x chuangjianrizhi.sh
++ seq 15
+ for n in ‘`seq 15`‘
+ date -s 2018/07/1
Sun Jul 1 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-01.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/2
Mon Jul 2 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-02.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/3
Tue Jul 3 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-03.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/4
Wed Jul 4 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-04.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/5
Thu Jul 5 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-05.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/6
Fri Jul 6 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-06.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/7
Sat Jul 7 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-07.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/8
Sun Jul 8 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-08.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/9
Mon Jul 9 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-09.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/10
Tue Jul 10 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-10.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/11
Wed Jul 11 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-11.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/12
Thu Jul 12 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-12.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/13
Fri Jul 13 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-13.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/14
Sat Jul 14 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-14.log
+ for n in ‘`seq 15`‘
+ date -s 2018/07/15
Sun Jul 15 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-15.log
+ date -s 2018/07/16
Mon Jul 16 00:00:00 CST 2018
(2)-n参数,检查是否有语法错误
如果有语法错误执行脚本就会报错,不是很重要如果脚本有错误也不会执行
[root@linzhongniao ~]# sh -n chuangjianrizhi.sh
chuangjianrizhi.sh: line 3: syntax error near unexpected token `do‘
chuangjianrizhi.sh: line 3: `do‘
(3)-i参数,实现脚本的交互
[root@linzhongniao ~]# sh -i chuangjianrizhi.sh
Sun Jul 1 00:00:00 CST 2018
Mon Jul 2 00:00:00 CST 2018
Tue Jul 3 00:00:00 CST 2018
Wed Jul 4 00:00:00 CST 2018
Thu Jul 5 00:00:00 CST 2018
Fri Jul 6 00:00:00 CST 2018
Sat Jul 7 00:00:00 CST 2018
Sun Jul 8 00:00:00 CST 2018
Mon Jul 9 00:00:00 CST 2018
Tue Jul 10 00:00:00 CST 2018
Wed Jul 11 00:00:00 CST 2018
Thu Jul 12 00:00:00 CST 2018
Fri Jul 13 00:00:00 CST 2018
Sat Jul 14 00:00:00 CST 2018
Sun Jul 15 00:00:00 CST 2018
Mon Jul 16 00:00:00 CST 2018
60.echo命令
echo显示一行文本
参数:
-n 不输出后面的换行符
-e 支持对反斜杠转义的解释
[root@linzhongniao ~]# echo "dhfjd\ndfjsd"
dhfjd\ndfjsd
[root@linzhongniao ~]# echo -e "dhfjd\ndfjsd"
dhfjd
dfjsd
-E 禁用反斜杠转义(默认)
[root@linzhongniao ~]# echo -E "dhfjd\ndfjsd"
dhfjd\ndfjsd
echo $RANDOM输出随机数通常用于为用户设置密码
[root@linzhongniao ~]# echo $RANDOM
26292
61.free命令
free –m查看物理内存
第一部分Mem行:
total内存总数:979M
used 已经使用的内存数:182M
free 空闲的内存数:797M
shared 当前已经废弃不用,总是0
buffers 缓冲区内存数:16M
cached 缓存内存数:44M
关系:total(979M)=used(182M)+free(797M)
第二部分(-/+ buffers/cache):
(-buffers/cache)used内存数:121M(指的是读一部分Mem行中的used-buffers-cached)
(+buffers/cache)free内存数:858M(指的是读一部分Mem行中的free+buffers+cached)
提示:
1.buffers为写入缓冲区,“sync;”将缓冲区数据写入磁盘
2.cache为读取数据的缓存区
案例:取出剩余的物理内存
[root@linzhongniao ~]# free -m|awk -F " " ‘NR==3{ print $4}‘
852
62.sync命令
同步-刷新文件系统缓冲区buffer,将缓冲区数据写入磁盘
[root@linzhongniao ~]# sync;
63.split命令
cut命令是对文件的一行进行切割。split 的功能使把文件分成几部分,按指定行数大小进行切割
语法:
split 选项 输入的文件 输出的文件_后缀
参数:
-l(小写的L) 指定行数
-a 使用长度为N(N为数字)的后缀(默认2),及后缀的长度
-d - d,numeric-suffixes 使用数字后缀而不是字母
-b 指定输出文件字节大小
每个输出文件放置大小字节
实例:
(1) -l(L)参数
[root@linzhongniao ~]# split -l 10 /etc/inittab new
[root@linzhongniao ~]# ls n
newaa newab newac nishishei nnn.txt
[root@linzhongniao ~]# head newaa newab newac
==> newaa <==
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
==> newab <==
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
==> newac <==
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
[root@linzhongniao ~]# wc -l ne*
10 newaa
10 newab
6 newac
26 total
(2)-a参数举例说明
[root@linzhongniao ~]# split -l 10 -a 3 /etc/inittab new2
[root@linzhongniao ~]# wc -l new2*
10 new2aaa
10 new2aab
6 new2aac
26 total
(3)-d参数举例
[root@linzhongniao ~]# split -l 10 -a 4 -d /etc/inittab inittabb
[root@linzhongniao ~]# wc -l inittabb*
10 inittabb0000
10 inittabb0001
6 inittabb0002
26 total
64.diff和vimdiff命令
(1)diff比较两个文件的不同
[root@linzhongniao ~]# diff chuangjianrizhi.sh chuangjianrizhi.ori.sh
0a1 《==add增加的意思
> #!/bin/bash
2c3 《==change改变的意思
< for n in `seq 15`
---
> for n in `seq 20`
7d7 《==del删除的意思
< date -s ‘2018/07/16‘
除了比较文件的不同还可以比较目录的不同
[root@linzhongniao ~]# diff /etc/rc3.d/ /etc/rc4.d/
Only in /etc/rc3.d/: K60nfs
Only in /etc/rc4.d/: S30nfs
(2)以编译的方式查看多个(最多四个)文件的不同
用diff命令不显眼。可以用vimdiff可视化工具。vimdiff相当于vim -d
65.tee多重重定向命令
从标准输入读取并写入标准输出和文件,把输出的结果在屏幕显示并重定向到文件中。
参数:-a 将输出的结果追加重定向到文件中
[root@linzhongniao ~]# ls|tee /tmp/tee.txt
a
anaconda-ks.cfg
b
backup_2018-08-04-14-00.tar.gz
backup_201808042059.tar.gz
backup_201808042100.tar.gz
.....
install.log
......
sd4.txt
sd5.txt
server
soft_file
sort.txt
.......
woshishei
woshishei_hard_link
[root@linzhongniao ~]# wc -l /tmp/tee.txt
62 /tmp/tee.txt
-a参数举例,将内容追加重定向到文件中
[root@linzhongniao ~]# ls|tee -a /tmp/tee.txt
a
anaconda-ks.cfg
b
......
,,,,,,,,
id.txt
inittab100
inittab101
inittab102
......
Pictures
Public
r
sd1.txt
sd2.txt
sd3.txt
sd4.txt
.......
text.soft
useradd
Videos
woshishei
woshishei_hard_link
[root@linzhongniao ~]# wc -l /tmp/tee.txt
124 /tmp/tee.txt