1.mkdir(make directory创建目录)

例子: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 < 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< 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

15.企业面试题:

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

16.查看man帮助

用man 命令—help查看命令的帮助信息

Linux内置的命令用man查不到,可以用help 查看。比如cd命令,就要用help cd 查看帮助。

下图为linux自带的命令

Linux内置命令是查不到全路径的,用which查看命令路径

17.特殊符号讲解

(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两个参数。

18.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 如果长时间光标被锁定,可以解除锁定。

19.查看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

20.touch

它可以创建新文件,更新旧文件的时间戳。创建文件名,touch命令加文件名,touch更改旧文件的时间戳。

-a (change only the access time)改变访问时间执行touch –a ddd.txt,我们发现访问时间和改变时间发生了变化。

用touch –a只有访问时间和change时间改变了,修改文件时间没有变,那我们对ddd.txt文件进行编辑;再用stat命令查看文件属性,时间戳就改变了。

用stat命令查看详细的文件属性,access访问时间,modify修改操作时间对文件进行编辑时间就会改变,change发生改变的时间只要是访问了文件时间就发生了变化。

21.连接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

22.使用rz和sz注意事项

只能上传下载文件而不能是目录,如果是目录需要打包成文件再上传。
上传的文件可以是电脑里的任意文件,下载的文件会下载到SecureCRT配置的对应下载路径目录中。如图。

执行rz命令回车后出现的的窗口下面的,一定不要勾选最下方的“以ASCLL方式上传文件”,否则会遇到问题如图

23.添加普通用户

添加用户并设置密码

[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 ~]#

24.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”这两个服务关闭这是在系统优化时犯的错误

25.linux关机重启命令

(1)关机用shutdown命令,还有halt或者init 0,poweroff

我们一般用shutdown –h 后面接时间,shutdown –h now表示现在关闭,
设置指定时间后关机,比如1分钟后关机

(2)重启

重启用reboot(init 6)或者shutdown –r now,或者shutdown –r +时间

26.linux系统开机显示的版本信息的文件

如果开机不希望显示这些信息可以清除掉,我们也可以编写内容

27.motd显示用crt登录后的信息

在/etc/motd里面设置

28.profile

/etc/profile全局环境变量

29.显示总行数wc

为每个文件打印新行、字符和字节计数

参数:

-c 打印字节数

-l 打印行数

-m 打印字符数

-w 打印单词,统计

-L 打印最长的行的长度,应用它可以知道字符串的长度

举例:

建立测试数据:

[root@linzhongniao ~]# cat >>wc.txt< 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

30.设置开机自启动

chkconfig --list 查看列表显示所有,显示某一个直接指定就可以了不用grep

--level 接运行级别 接服务 off[on] (指定哪些运行级别受到影响)

--add 加到chkconfig管理,自己写的程序脚本才会用到

chkconfig原理:

它的工作原理就是将服务加入开机自启动或者关闭自启动之后会在/etc/rc.d/rc3.d目录下创建一个连接文件;开机自启动以S开头,关闭开机自启动以K开头。设置启动级别可以在启动文件中设置例如下图,通常在自己写的脚本中会用到,不必对其他启动文件做任何修改。具体操作在开机自启动优化中。

31.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引导。

32.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

33.查看文件目录的大小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/

34.命令路径加入的方法

临时:

[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全局配置文件里。

35.查看二进制命令所在路径

用which查看,从PATH变量所在的路径查找

[root@linzhongniao ~]# which cp
alias cp='cp -i'
/bin/cp

36.搜索文件的全路径命令

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"

37.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

38.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

39.ln命令

ln无参数常见创建硬链接,很少用到一般就是备份文件。演示见下文创建硬链接和软连接。

硬链接:ln 源文件 目标文件

软连接:ln –s 源文件 目标文件(目标文件不能事先存在)

40.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

41.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

42.dirname(了解)

dirname——从文件名中去掉文件后缀,与basename命令互补

[root@linzhongniao test]# dirname /root/test/stu_102999_1.JPG
/root/test

43.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

44.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

45.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

46.xargs

xargs 从标准输入(管道或stdin)获取数据,并将数据转换成命令行的参数,创建和执行命令,通常和find以及“|”管道一起使用。

参数:

-n 数字,分组

[root@linzhongniao ~]# xargs -n 2 

-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

47.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

48.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

49.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

50.查看进程命令

查看进程静态的用ps动态的用top,也可以用htop效果更佳华丽一点

50.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执行

50.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  命令名/命令行

51.vi/vim命令考察

退出保存 wq

强制退出保存 wq!

强制退出不保存 q!

光标移动到文件的最后一行 G

光标移动到文件的第一行 gg或者:0

移动到指定行 ngg比如21gg

从光标所在位置将光标移动到当前行的开头 “^”尖括号或者home键

从光标所在位置将光标移动到当前行的结尾 “$”或者end键

取消上一次的操作 u

删除一行 dd ndd

向下搜索 /

向上搜索 ?

向上或下继续搜索 n

向上或下反向搜索 N

52.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

53.rev命令(了解)

rev也是反向读取,行的顺序不会变,一行内容的首尾相反

[root@linzhongniao ~]# echo "123456"|rev
654321
[root@linzhongniao ~]# rev ddd/20180806.txt
SDSDSD
dksjd
kjsd kjkjd  dsds
sd

SD
fdfdasfd

rewre

54.more

more命令以滚动的方式查看文件,空格键向下一屏回车键向下一行,小b向上查看,按等于号显示行号。/反斜线可以搜索。按小写的v进入vi编辑器和vi编辑器是一样的。vi编辑器的命令参数more同样适用。小写q退出。

more –“接数字”例如more -10,以10行为单位查看

55.less命令

less命令也是分页查看,查显示行号用less –N

56.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 "=" - - 

57.chpasswd命令

chpasswd以批量处理的方式更新用户密码

chpasswd命令是批量更新用户口令的工具,是把一个文件的内容重新定向添加到/etc/shadow中。

参数:

-e:输入的密码是加密后的密文

-h:显示帮助信息并退出

-m:当被支持的密码未被加密时,使用MD5加密代替DE5加密。

实例:

先创建用户密码对应文件,格式为username:passwd, 如users1:users1b2b9,必须以这种格式来写(涉及合并两个文件可以用paste命令)并且不能空行保存成文本,然后执行chpasswd命令。列如chpasswd

58.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

59.查看本地网卡信息

ethtool 是一个linux下的网络驱动程序的诊断工具,可以获取网络设备的相关信息包括连接状态、驱动版本。

查看机器上网的速度:查看千兆还是百兆的用ethool eth0,操作完毕后输出信息中“speed”这一项就指示了网卡的速度。

如果机器上安装了两块网卡,怎么确定eth0对应那快网卡呢?执行下面命令看那快的led灯亮就是那个

[root@linzhongniao ~]# ethtool -p eth0 10

将千兆网卡的速度将为百兆

ethtool –s eth0 speed 100

60.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

61.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

62.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

63.sync命令

同步-刷新文件系统缓冲区buffer,将缓冲区数据写入磁盘

[root@linzhongniao ~]# sync;

64.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

65.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

66.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

67.od命令

od命令用户查看二进制文件

68.sort命令(重要)

sort将文件进行排序默认从小到大排序,并将排序结果标准输出,sort命令既可以从特定的文件,也可以从stdin中获取输入。

语法:

sort 参数 文件

参数:

-u 压缩相同行

-n是按照数字大小排序

-r是以相反顺序排序

-k是指定需要排序的栏位

-t指定分隔符

实例:

sort将文件或者文本的每一行作为一个单位,相互比较,比较原则是从首字母向后依次按ASCII码值进行比较,最后将他们按升序输出。

[root@linzhongniao ~]# cat id.txt 
 10.0.0.5
 10.0.0.1
 10.0.0.2
 10.0.0.3
 10.0.0.4
 10.0.0.5
 10.0.0.5
[root@linzhongniao ~]# sort id.txt
 10.0.0.1
 10.0.0.2
 10.0.0.3
 10.0.0.4
 10.0.0.5
 10.0.0.5
 10.0.0.5

压缩相同行使用-u选项或者uniq也可以压缩相同行的数据。uniq 报告或忽略重复的相邻行它只能压缩相邻行,
uniq –c命令统计相邻相同行单词出现的次数,可以用来计算单词出现的次数。

[root@linzhongniao ~]# cat id.txt 
 10.0.0.5
 10.0.0.1
 10.0.0.2
 10.0.0.3
 10.0.0.4
 10.0.0.5
 10.0.0.5

sort –u和uniq对比

[root@linzhongniao ~]# sort -u id.txt 
 10.0.0.1
 10.0.0.2
 10.0.0.3
 10.0.0.4
 10.0.0.5
[root@linzhongniao ~]# uniq id.txt  
 10.0.0.5
 10.0.0.1
 10.0.0.2
 10.0.0.3
 10.0.0.4
 10.0.0.5

uniq –c命令演示

[root@linzhongniao ~]# uniq -c id.txt 
  1 10.0.0.5
  1 10.0.0.1
  1 10.0.0.2
  1 10.0.0.3
  1 10.0.0.4
  2 10.0.0.5

sort的-n、-r、-k、-t选项的使用

将第二列的数字按照从小到大的顺序排列

[root@linzhongniao ~]# sort -nk 2 -t: sort.txt 
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5

将第三例数字从大到小排列``

[root@linzhongniao ~]# sort -nrk 3 -t: sort.txt  
eee:50:5.5
eee:50:5.5
ddd:40:4.4
ccc:30:3.3
bbb:20:2.2
aaa:10:1.1

69.查询命令讲解

(1)用户及日志查询

w命令 显示谁登陆了,他们在做什么,查看系统负载平均值信息

who命令 显示谁登录了

[root@linzhongniao ~]# w
 09:05:58 up 11:08,  3 users,  load average: 0.00, 0.00, 0.00
USER TTY  FROM  LOGIN@   IDLE   JCPU   PCPU WHAT
root tty1 -07Aug18 389days  0.06s  0.06s -bash
root pts/1zbf666   07Aug18  0.00s  0.48s  0.00s w
root pts/2zbf666   00:029:05m  0.05s  0.01s -bash
[root@linzhongniao ~]# who
root tty1 2018-08-07 08:54
root pts/12018-08-07 10:19 (administrator)
root pts/22018-09-01 00:02 (administrator)

(2)显示谁登录

last ,lastb命令显示最后登录的用户列表

(3)lastlog命令

lastlog 显示最近系统用户的登录情况它会读/var/log/lastlog文件

(4)finger

finger查找用户信息

参数说明:

-l 多行显示

-s 单行显示

[root@linzhongniao ~]# finger -l 
Login: root Name: root
Directory: /rootShell: /bin/bash
On since Tue Sep  3 05:26 (CST) on tty11 day 4 hours idle  登录时间
On since Tue Sep  3 05:26 (CST) on pts/0 from 192.168.18.3  登录的窗口
On since Tue Sep  3 06:07 (CST) on pts/1 from 192.168.18.3 登录的窗口
   3 hours 2 minutes idle
On since Wed Sep  4 05:07 (CST) on pts/2 from 192.168.18.3
   4 hours 37 minutes idle
New mail received Tue Sep  3 07:41 2019 (CST)
 Unread since Thu Jun 28 17:01 2018 (CST)
No Plan.
[root@linzhongniao ~]# finger -s
Login Name   Tty  Idle  Login Time   Office Office Phone
root  root   tty1   1d  Sep  3 05:26
root  root   pts/0  Sep  3 05:26 (192.168.18.3)
root  root   pts/13:02  Sep  3 06:07 (192.168.18.3)
root  root   pts/24:37  Sep  4 05:07 (192.168.18.3)

70.企业面试题2

1.如何过滤出已知当前目录下linzhongniao中的所有一级目录(提示:不包含linzhongniao目录下面目录的子目录及隐藏目录,即只能是一级目录)

创建模拟数据

[root@linzhongniao ~]# mkdir linzhongniao
[root@linzhongniao ~]# cd linzhongniao
[root@linzhongniao linzhongniao]# ls
[root@linzhongniao linzhongniao]# mkdir ext/linzhongniao test zhangsan lisi wanger -p 
[root@linzhongniao linzhongniao]# touch nishishei linzhongniao wodi.gz nimei.gz

分析过程:要完成此题,要先想如何区分目录和文件?

方法:

(1)根据颜色区分文件和目录

(2)ls –l输出结果中以d(全拼directory)开头的就是目录。

(3)通过给目录加标识,然后过滤带标识的,就过滤出目录(ls –F或ls -p)-F表示不同的文件加不同的标识,-p表示只给目录加斜线。

(4) 通过find查找指定类型的文件(-d 就是目录)

实战:方法一:

[root@linzhongniao linzhongniao]# ls -l
total 20
drwxr-xr-x. 3 root root 4096 Jul  3 15:29 ext
 -rw-r--r--. 1 root root0 Jul  3 15:31 linzhongniao
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 lisi
 -rw-r--r--. 1 root root0 Jul  3 15:31 nimei.gz
 -rw-r--r--. 1 root root0 Jul  3 15:31 nishishei
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 test
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 wanger
 -rw-r--r--. 1 root root0 Jul  3 15:31 wodi.gz
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 zhangsan
[root@linzhongniao linzhongniao]# ls -l|grep "^d" 《==尖括号表示以什么开头
drwxr-xr-x. 3 root root 4096 Jul  3 15:29 ext
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 lisi
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 test
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 wanger
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 zhangsan

方法二:

[root@linzhongniao linzhongniao]# ls -F
ext/  lisi/ nishishei  wanger/  zhangsan/
linzhongniao  nimei.gz  test/  wodi.gz
[root@linzhongniao linzhongniao]# ls -F|grep "/$"   《== “/$”以斜杠结尾
ext/
lisi/
test/
wanger/
zhangsan/

方法三:

-maxdepth 1深度为1,最底层目录,因为第二层也会有目录那么不用这个参数有可能不准确,查找文件也是可以用的。

[root@linzhongniao linzhongniao]# find ./ -maxdepth 1 -type d  ! -name "." 
./ext
./wanger
./test
./zhangsan
./lisi

方法四:awk的过滤功能

[root@linzhongniao linzhongniao]# ls -l|awk '/^d/'
drwxr-xr-x. 3 root root 4096 Jul  3 15:29 ext
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 lisi
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 test
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 wanger
drwxr-xr-x. 2 root root 4096 Jul  3 15:29 zhangsan

方法五:

[root@linzhongniao linzhongniao]# ls -F|sed -n '/\/$/p'
ext/
lisi/
test/
wanger/
zhangsan/

2.删除apache日志

已知apache服务的访问日志文件按天记录在服务器本地目录/app/logs下,由于磁盘紧张,现在要求只能保留最近7天的访问日志。请问如何解决?

模拟数据

[root@linzhongniao ~]# cat chuangjianrizhi.sh 
for n in `seq 15`
do
date -s "2018/07/$n"
touch /app/logs/access_www_$(date +%F).log
done
date -s '2018/07/16'
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
 -rw-r--r--. 1 root root 0 Jul  1 00:00 access_www_2018-07-01.log
 -rw-r--r--. 1 root root 0 Jul  2 00:00 access_www_2018-07-02.log
 -rw-r--r--. 1 root root 0 Jul  3 00:00 access_www_2018-07-03.log
 -rw-r--r--. 1 root root 0 Jul  4 00:00 access_www_2018-07-04.log
 -rw-r--r--. 1 root root 0 Jul  5 00:00 access_www_2018-07-05.log
 -rw-r--r--. 1 root root 0 Jul  6 00:00 access_www_2018-07-06.log
 -rw-r--r--. 1 root root 0 Jul  7 00:00 access_www_2018-07-07.log
 -rw-r--r--. 1 root root 0 Jul  8 00:00 access_www_2018-07-08.log
 -rw-r--r--. 1 root root 0 Jul  9 00:00 access_www_2018-07-09.log
 -rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
 -rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
 -rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
 -rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
 -rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
 -rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log

解答:删除七天前的

先查看一下七天前的日志文件

[root@linzhongniao ~]# find /app/logs/ -type f -mtime +7
/app/logs/access_www_2018-07-07.log
/app/logs/access_www_2018-07-05.log
/app/logs/access_www_2018-07-08.log
/app/logs/access_www_2018-07-02.log
/app/logs/access_www_2018-07-03.log
/app/logs/access_www_2018-07-01.log
/app/logs/access_www_2018-07-04.log
/app/logs/access_www_2018-07-06.log

删除七天前的日志文件

方法一:fine结合xargs

[root@linzhongniao ~]# find /app/logs/ -type f -mtime +7|xargs rm -f
[root@linzhongniao ~]# ls -lrt /app/logs/ 
total 0
 -rw-r--r--. 1 root root 0 Jul  9 00:00 access_www_2018-07-09.log
 -rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
 -rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
 -rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
 -rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
 -rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
 -rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log

方法二:find结合-exec

[root@linzhongniao ~]# find /app/logs/ -type f -mtime +7 -exec rm -f {} \;
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
 -rw-r--r--. 1 root root 0 Jul  9 00:00 access_www_2018-07-09.log
 -rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
 -rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
 -rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
 -rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
 -rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
 -rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log

方法三:先用find查找出来在用rm删除

[root@linzhongniao ~]# rm -f `find /app/logs/ -type f -mtime +7`
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
 -rw-r--r--. 1 root root 0 Jul  9 00:00 access_www_2018-07-09.log
 -rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
 -rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
 -rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
 -rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
 -rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
 -rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log

3.装完系统后,希望让网络文件NFS,仅在3级别上开机自启动,该如何做?

第一种文件配置方法,可以把要重启的服务器的命令放在/etc/rc.local里。

解答:全部关掉然后开启需要的级别的服务。

[root@linzhongniao ~]# chkconfig nfs on
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off   1:off   2:on3:on4:on5:on6:off
[root@linzhongniao ~]# chkconfig nfs off
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@linzhongniao ~]# chkconfig --level 3 nfs on
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off   1:off   2:off   3:on4:off   5:off   6:off

也可以将2345都开启

[root@linzhongniao ~]# chkconfig --level 2345 nfs on
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off   1:off   2:on3:on4:on5:on6:off