马哥教育考试题基础题

马哥教育考试题

1、wc 统计文件行数的选项是( C )

A、-L B、-w C、-l D、-c
2、linux 用户创建命令( A )

A、useradd B、chown C、chmod D、groupadd
3、有一些文件某普通用户无法读取,说明其权限位缺少哪个权限( D )

A、w B、s C、x D、r
4、bash脚本首行通常为( D )

A、无实意 B、#!/bin/ksh C、#!/usr/bin/python D、#!/bin/bash
5、修改文件的属性为:属主有读写权限,属组有读权限,其他用户无权限,以下权限介绍正确的是( B )

A、-r-xrwx— B、0640 C、0750 D、-rw-r- - - -
6、linux 上bash 重定向描述正确的是( D )

A、0 表示标准输入 B、1 表示标准输出

C、2 表示标准错误输出 D、|表示管道
7、在windows的“记事本”或“写字板”窗口中,对当前编辑的文档进行存储,可以用( C )快捷键

A. Alt+F B. Alt+S C. Ctrl+S D. Ctrl+F
8、哪一个是的文本编辑器工具( D )

A、sed B、cat C、cut D、vim
9、linux 的CLI 中如何快速中断执行的命令?( D )

A、ctrl+a B、ctrl+w C、ctrl+u D、ctrl+c
10、删除文件得命令是( B )

A、mkdir B、rm C、cp D、mv
11、默认情况下grep 只搜索当前目录,如果搜索此目录下的子目录可以使用的参数( C )

A、-v B、-d C、-r D、-i
12、linux 系统中有很多别名命令,在命令下怎么使用命令本身且不改变别名( A )

A、\command B、!command C、*command D、command
13、 计算机中字节是常用单位,它的英文名字是( B )

A. Bit B. byte C. Bout D. baut
14、用于解析域名的协议是( B )

A. HTTP B. DNS C. FTP D. SMTP
15、查看当前Linux 各分区的大小及使用情况的命令是什么?( B )

A、u -lh B、df -lh C、ls -lh D、fdisk -l /dev/sd[a-z]
16、可以查看系统内存情况的命令有哪些( A )

A、free B、top C、ps D、netstat 
17、一个字节由几个二进制数组成( B )

A、4 B、8 C、24 D、64
18、若十进制数为57,则其二进制数为( D )。
A、111011 B、111010 C、110001 D、111001
19、 在Windows中剪贴板是用来在程序和文件间传递信息的临时存储区,此存储区是( C )

A. 回收站的一部分 B. 硬盘的一部分

C. 内存的一部分 D. C盘的一部分
20、操作系统是一种( A )

A. 系统软件 B. 应用软件 C. 工具软件 D. 管理软件
21、找出 /etc/passwd 中的两位或三位数

  cat /etc/passwd |egrep "\<[0-9]{2,3}\>"
22、找出 /etc/rc.d/init.d/functions 文件中所有的函数名称,名称包含 _ 和 ()

  cat /etc/rc.d/init.d/functions |grep "() {" |sed -n "s/{//p"
 23、拷贝 /etc/rc.d/init.d/functions 文件到 /tmp 中,文件通常使用 '#' 作为注释的开始,请你使用 vim 的搜索替换功能打卡所有的注释
cp /etc/rc.d/init.d/functions /tmp
vim /tmp/functions
:%s/^#//g

24、Linux系统中,删除/data/fifiles目录下1周前修改过且大于10MB的文件?

①find /data/fifiles -type f -mtime +7 -size +10M -exec rm {} \;
②find /data/fifiles -type f -mtime +7 -size +10M |xargs rm
③rm -f `find /data/fifiles -type -mtime +7 -size +10M`  

25、linux系统上软件安装包,有哪几种形式?每种形式的安装如何安装?这几种安装形式各有什么优

点?

有两种形式:第一种yum安装,第二种源码包安装 
yum安装直接查找你要安装的软件名
源码包安装是把软件下载到本地去编译安装
yum安装的优点是能自动加载应用的依赖包,是快速高效的方式。
源码包安装的优点是可以自定义安装路径,还有各方面的参数能根据自己的需求安装自己想要的部分。

26、把httpd包解压到/home/source/目录

tar xf httpd -C /home/source

27、sed将文件test中第50行中的haiwao改为haiwai?

sed -ie '50s/haiwao/haiwai/g' test

28、替换一个文件/etc/passwd里的这root❌0:0:root:/root:/bin/bash一行第二个root为test? 

[root@oldboyedu-lnb~]# cat /etc/passwd| sed '/^root/!d'|sed 's/root/test/2' (默认是1,可以更改为2 更改为3等等)
root:x:0:0:test:/root:/bin/bash 

29、打印九九乘法表

\#!/bin/bash

for i in {1..9};do
 
 for j in `seq $i`;do

echo -e "${j}x$i=$((i*j))\t\c"

done

echo

done 

30、打印等腰三角形

\#!/bin/bash
read -p "请输入三角形的行数: " line
for((i=1;i<=line;i++));do
   for((k=0;k<=line-i;k++));do
   echo -e ' \c'
done
for((j=1;j<=2*i-1;j++));do
  echo -e '*\c'
done
echo
done

第三周作业

  1. 使用 sed 命令打印出 /etc/passwd 文件中的奇数行内容
 sed -n '1~2p' /etc/passwd
  1. 使用 sed 命令将 /etc/passwd 文件从 2 到 10 行中的 bin 替换成 linux ?
  sed -r '2,10s#\<bin\>#linux#g' /etc/passwd
  1. 使用 sed 命令显示 /etc/passwd 文件的最后一行信息内容
[root@oldboyedu-lnb~]# sed -n '$p' /etc/passwd
stu10:x:1053:1053::/home/stu10:/bin/bash
  1. 使用 sed 命令删除 /etc/fstab 文件中所有以 '#' 为注释的行和其后面紧挨着的空白字符,达到去除注释的目的
 sed -r '/^#[ :space: ]*/d' /etc/fstab
  1. 使用 sed 命令将 /etc/passwd 前三行信息保存至 /root/file.txt 文件中
[root@oldboyedu-lnb~]# sed -n '1,3w /root/file.txt' /etc/passwd
[root@oldboyedu-lnb~]# cat /root/file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

6、使用rpm命令安装、卸载、更新ntp-0.7.12x86_64.rpm软件包?  

 rpm -ivh ntp-0.7.12x86_64.rpm

 rpm -e ntp-0.7.12x86_64.rpm 

 rpm -Uvh ntp-0.7.12x86_64.rpm

7、哪个命令可查看安装openssl.x86.rpm包的依赖关系,查询会安装哪个文件,分别到哪个目录,不实际安装?如何查询openssl安装的时间?如何查询/usr/lib/libssl.so.6属于哪个包安装的?

依赖关系:rpm -qpR openssl.x86.rpm

安装哪几个文件:rpm -qpl openssl.x86.rpm

安装的时间:rpm -qi openssl.x86.rpm

属于哪个包: rpm -qf /usr/lib/libssl.so.6

8,实现开机自动挂载光盘  

 使用命令echo "/dev/sr0 /media iso9660 defaults 0 0" >> /etc/fstab

9、查看系统是否安装reids软件

   rpm -ql reids

马哥教育第二次月考

第二阶段考试

一 、判断题10道、一题3分。

1、DNS默认端口号是多少?( D )

A、443 B、80 C、25 D、53
2、docker中以下那个命令不正确 ?( B )

A、docker run B、docker file C、docker exec D、docker images
3、在shell脚本中以下那个选项不是关键字 ( C )

A、if B、for C、watch D、while
4、打印/etc/passwd的奇数行? (A)

A、sed -n '1~2p' /etc/passwd

B、sed -c '1~2p' /etc/passwd

C、sed -n '1~3p' /etc/passwd
5、Linux下查看服务程序占用的端口命令是什么?( D )

A ps -aux

B netstat –apn

C watch

D lsof
6、 在linux系统中,用来存放系统所需要的配置文件和子目录是( A )

A /etc

B /var

C /root

D /home
7、(多选)下面哪些命令可以查看file1文件的第300-500行的内容?(BC )

A cat file1 | tail -n +300 | head -n 200

B cat file1| head -n 500 | tail -n +300

C sed -n ‘300,500p’ file1
	方法一:
tail -n +K是输出从第K行开始的内容。
先输出从第300行开始的内容,然后输出前200行。
cat file1 | tail -n +300 | head -n 200
方法二:
tail -n K是输出最后K行的内容。
先输出前500行,然后输出其中从第300行开始的内容。
cat file1| head -n 500 | tail -n + 300
方法三:
直接通过sed -n命令获取指定范围的内容,其中p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。
sed -n ‘300,500p’ file1
8、Linux下查看磁盘使用情况的命令是?( B )

A dd

B df

C top

D netstat
9、linux查看系统活跃进程的命令是?( A  )

A ps 

B netstat

C df

D ifconfig
10、在shell 中变量的赋值有四种方法,其中,采用name=12 的方法称 (   A  )

A 直接赋值

B 使用read 命令

C 使用命令行参数

D 使用命令的输出

二、填空题10道、一题3分。

1、在linux中,某文件的权限为:drw-r–r–,该权限用数值形式表示为(    644   ),修改文件权限用(    chmod  )命令。
2、在Linux 系统 中,以(  文件  )方式访问设备 。
3、链接分为:(  软连接  ) 和 (  硬链接  )。

4、(     DHCP    )可以实现动态 IP 地址分配。

5、DNS 实际上是分布在internet 上的主机信息的 数据库 ,其作用是(  IP地址 )和(  域名  )之间的转换。

6、当LAN 内没有条件建立DNS 服务器,但又想让局域网内的用户可以使用计算机名互相访问时,应配

置 (    hosts    ) 文件。

7、DHCP 是动态主机配置协议的简称,其作用是:(   动态分配IP地址 ) 。

8、 唯一标识每一个用户的是 (  UID    ) 和 (  用户名    ) 。

9、docker和虚拟机的区别在于虚拟机有(    独立的内核    )。

10、docker采用了一种(  数据卷   )挂载的方式实现了可写层

三、操作题一共5道、一题8分。

1、简述Raid0、Raid1、Raid5、Raid10的区别?

[复制代码](javascript:void(0)😉

RAID俗称磁盘冗余阵列,简称为磁盘阵列.区别在于:
  raid0:至少需要俩块磁盘;优点是读写速度块,性能最佳;缺点是没有冗余,磁盘一旦损坏,容易丢失数据
  raid1:需要双数磁盘(2,4,6...);优点是镜像冗余,可以最多损坏一半数据也不会丢失;缺点是写入速度较慢.适合做系统盘.
  raid5:至少需要三块磁盘;优点是具有一定的性能和冗余,可以最多损坏一个数据也不会丢失,读性能相对比较好;缺点是:写入性能不高.
  raid10:也叫raid01,至少需要四块磁盘,先按raid0分为俩组,再分别对俩组按raid1做镜像冗余;优点是既兼顾了冗余,又提高了性能;缺点是:花费高

[复制代码](javascript:void(0)😉

2、通过shell脚本部署一个httpd服务。

[复制代码](javascript:void(0)😉

#!/bin/bash
##thi sh is  make install apache
yum install apr-devel  apr-util-devel gcc pcre-devel openssl-devel redhat-rpm-config wget make curl -y &> /dev/null
id apache
[ $? -ne 0 ] && useradd -r apache -s /sbin/nologin -d /var/www -u 48
[ -d /apps ] || mkdir /apps &> /dev/null
[ -d /etc/httpd ] && rm -rf /etc/httpd
cd /usr/local/src
[ -e httpd-2.4.43.tar.bz2 ] || wget https://mirror.bit.edu.cn/apache//httpd/httpd-2.4.43.tar.bz2
[ -d httpd-2.4.43 ] && rm -rf httpd-2.4.43 
tar xf httpd-2.4.43.tar.bz2
cd httpd-2.4.43/
./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl &>/dev/null
make &>/dev/null
make install &>/dev/null
echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
. /etc/profile.d/httpd.sh
sed -i 's/daemon/apache/g' /etc/httpd/httpd.conf
sed -i 's/^#ServerName.*/ServerName localhost:80/p' /etc/httpd/httpd.conf
apachectl
[ $? -eq 0 ] && echo  -e "`curl 127.0.0.1:80` \nApache 安装成功" || echo "Apache 安装失败"

[复制代码](javascript:void(0)😉

3、通过dockerfile实现nginx的部署

构造底层cento7.8镜像

[复制代码](javascript:void(0)😉

[root@ubuntu18044 /dockerfile/centos]#tree 
.
├── build.sh
└── Dockerfile

0 directories, 2 files
[root@ubuntu18044 /dockerfile/centos]#cat Dockerfile 
FROM     centos:centos7.8.2003
LABEL     maintainer="huangguangrui <158086268@qq.com>"

RUN     yum install -y wget && rm -f /etc/yum.repos.d/* \
        && wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \
        && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
        && sed -i /mirrors.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo \
        && sed -i /mirrors.cloud.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo \
        && yum install -y vim-enhanced tcpdump lrzsz tree telnet bash-completion net-tools bzip2 lsof \
            zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel \
            system-devel zlib-devel \
        && yum clean all \
        && rm -f /etc/localtime \
        && ln -s ../usr/share/zoneinfo/Asia/Shanghai  /etc/localtime \
        && useradd -u 88 www

[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);)

[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);)

[root@ubuntu18044 /dockerfile/centos]#bash build.sh v2
Sending build context to Docker daemon  3.584kB
Step 1/3 : FROM     centos:centos7.8.2003
 ---> afb6fca791e0
Step 2/3 : LABEL     maintainer="huangguangrui <158086268@qq.com>"
 ---> Using cache
 ---> bb2d0951cf40
Step 3/3 : RUN     yum install -y wget && rm -f /etc/yum.repos.d/*             && wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo            && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo      && sed -i /mirrors.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo         && sed -i /mirrors.cloud.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo         && yum install -y vim-enhanced tcpdump lrzsz tree telnet bash-completion net-tools bzip2 lsof             zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel             system-devel zlib-devel         && yum clean all         && rm -f /etc/localtime         && ln -s ../usr/share/zoneinfo/Asia/Shanghai  /etc/localtime         && useradd -u 88 www
 ---> Using cache
 ---> 53ddfb263e3e
Successfully built 53ddfb263e3e
Successfully tagged centos7.8:v2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7.8           v2                  53ddfb263e3e        4 minutes ago       399MB

  基于centos7.8部署nginx.

.[root@ubuntu18044 /dockerfile/nginx]#tree.
├── build.sh
├── Dockerfile
├── index.html
└── nginx-1.16.1.tar.gz

0 directories, 4 files
[root@ubuntu18044 /dockerfile/nginx]#cat Dockerfile 
FROM    centos7.8:v2
LABEL   maintainer="huangguangrui <158086268@qq.com>"

ADD     nginx-1.16.1.tar.gz /usr/local/src

RUN     cd /usr/local/src/nginx-1.16.1 \
        && ./configure --prefix=/apps/nginx \
        && make && make install \
        && rm -rf /usr/local/src/nginx* 

COPY    nginx.conf /apps/nginx/conf/
COPY    index.html /apps/nginx/html/

EXPOSE  80 443

CMD     ["/apps/nginx/sbin/nginx"]

[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);)

[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);)

[root@ubuntu18044 /dockerfile/nginx]#bash build.sh v1
Sending build context to Docker daemon  1.037MB
[WARNING]: Empty continuation line found in:
    RUN     cd /usr/local/src/nginx-1.16.1         && ./configure --prefix=/apps/nginx         && make && make install         && rm -rf /usr/local/src/nginx* COPY    nginx.conf /apps/nginx/conf/
[WARNING]: Empty continuation lines will become errors in a future release.
Step 1/7 : FROM    centos7.8:v2
 ---> 53ddfb263e3e
Step 2/7 : LABEL     maintainer="huangguangrui <158086268@qq.com>"
 ---> Running in 7eded2fde31c
Removing intermediate container 7eded2fde31c
 ---> bb694b405bd8
Step 3/7 : ADD     nginx-1.16.1.tar.gz /usr/local/src
 ---> 2e9fa1ceb851
Step 4/7 : RUN     cd /usr/local/src/nginx-1.16.1         && ./configure --prefix=/apps/nginx         && make && make install         && rm -rf /usr/local/src/nginx* COPY    nginx.conf /apps/nginx/conf/
 ---> Running in 493f60b288a0

...

Removing intermediate container a043cefe19a8
 ---> 857ba4e06075
Successfully built 857ba4e06075
Successfully tagged nginx-centos7.8:v3
REPOSITORY          TAG                 IMAGE ID            CREATED                  SIZE
nginx-centos7.8     v1                  21bdd2a2cd1c        3 minutes ago            409MB
centos7.8           v2                  53ddfb263e3e        13 minutes ago           399MB
centos              centos7.8.2003      afb6fca791e0        3 months ago             203MB

[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);)

[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);)

[root@ubuntu18044 /dockerfile/nginx]#docker run -d -P  nginx-centos7.8:v1 
73c15f016987a4cee2bd396bbedf3dfd4b5298d677bb5f7edccc53d5330c74f1
[root@ubuntu18044 /dockerfile/nginx]#docker port gallant_easley 
443/tcp -> 0.0.0.0:32775
80/tcp -> 0.0.0.0:32776
[root@ubuntu18044 /dockerfile/nginx]#curl 127.0.0.1:32776

nginx in docker for dockerfile

4、简述TCP三次握手的过程?

三次握手,也叫TCP连接的建立.这个连接必须是一方主动打开,另一方被动打开的.
握手之前双方都是CLOSED阶段,首先由主动打开连接的客户端结束CLOSED阶段,被动打开连接的服务器端也结束CLOSED阶段,并进入LISTEN阶段,随后开始三次握手.第一次握手:客户端向服务器端发送一段TCP报文,其中包括:标志位为SYN,表示请求建立新连接;序列号为seq=x;随后客户端进入SYN-SENT阶段第二次握手:服务器端收到来自客户端的TCP报文后,结束LISTEN阶段,并返回一段TCP报文,其中包括:  标志位为SYN和ACK,表示 服务器端同意建立新连接;序列号为seq=y;确认号为ack=x+1,表示 确认已经收到客户端的序号seq,并将seq的值加1作为确认号ack的值;随后服务器端进入SYN-RCVD阶段第三次握手:客户端收到来自服务器端的确认数据的TCP报文后,结束SYN-SENT阶段,并返回最后一段报文,其中包括:标志位为ACK,表示确认收到服务器端的同意连接信号;  序号为seq=x+1,表示收到服务器端的ack号,并将ack的值加1作为自己序号seq的值;确认号为ack=y+1,表示已经收到服务器端的seq序号,并将seq序号的值加1作为自己确认号ack的值;随后客户端进入了ESTABLISHED阶段;服务器收到最后的一段报文后,也结束了SYN-RCVD阶段,进入ESTABLISHED阶段.此后客户端和服务器端就可以正常的进行数据传输了,这就是三次握手的过程.

5、docker容器时间跟本地时间不一致怎样解决

时间不一样可以通过更改时区来解决:首先进入容器内:   docker exec -it 容器ID/名字 bash 删除默认配置的时区:  rm -f /etc/localtime 把上海的时区软连接到/etc/localtime   ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime

一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

<1>命令:CP

概念:用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

语法:cp(选项)(参数)

选项:

  •  -a:此参数的效果和同时指定”-dpR”参数相同;
     -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
     -f:强行复制文件或目录,不论目标文件或目录是否已存在;
     -i:覆盖既有文件之前先询问用户;
     -l:对源文件建立硬连接,而非复制文件;
     -p:保留源文件或目录的属性;
     -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
     -s:对源文件建立符号连接,而非复制文件;
     -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
     -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
     -b:覆盖已存在的文件目标前将目标文件备份;
     -v:详细显示命令执行的操作。
    
例如:
① :cp file /usr/men/tmp/file1 (将文件file复制到目录/usr/men/tmp下,并改名为file1)
②:cp -r /usr/men /usr/zh(将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中)
③:cp -i /usr/men m*.c /usr/zh(交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中)
④:cp aaa/* /bbb
 (复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。)
⑤:cp -r aaa/* /bbb
 (这次依然需要按Y来确认操作,但是没有忽略子目录。)
⑥:cp -r -a aaa/* /bbb
(依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。)
⑦:\cp -r -a aaa/* /bbb
 (成功,没有提示按Y、传递了目录属性、没有略过目录。)

<2>命令:mv

概念:用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

语法:mv(选项)(参数)

选项:

  •  –backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
     -b:当文件存在时,覆盖前,为其创建一个备份;
     -f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
     -i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
     –strip-trailing-slashes:删除源文件中的斜杠“/”;
     -S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
     –target-directory=<目录>:指定源文件要移动到目标目录;
     -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
    

例如:

①:mv ex3 new1 (将文件ex3改名为new1)

②:mv /usr/men/* . (将目录/usr/men中的所有文件移到当前目录(用.表示))

<3>命令:rm

概念:删除一个目录中的一个或多个目录或文件

语法:rm (选项)(参数)

选项:

  •  -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
     -f:强制删除文件或目录;
     -i:删除已有文件或目录之前先询问用户;
     -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
     –preserve-root:不对根目录进行递归操作;
     -v:显示指令的详细执行过程。
    

例如:

①:rm -i test example  (交互式删除当前目录下的文件test和example)

②:rm -r * (删除当前目录下除隐含文件外的所有文件和子目录)

二、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
1、命令执行的状态结果:

 bash通过状态返回值来输出此结果:
 成功:0
 失败:1-255
 命令执行完成之后,其状态返回值保存于bash的特殊变量$?中

2、bash基础特性:

 命令补全:
 给定的打头字符串如果能惟一标识某命令程序文件,则直接补全;
 不能惟一标识某命令程序文件,再击tab键一次,会给出列表;

3、路径补全:

 在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件:
 tab:
 如果能惟一标识,则直接补全;
 否则,再一次tab,给出列表;
快捷键:
 Ctrl+a:跳转至命令行行首
 Ctrl+e:跳转至命令行行尾
 Ctrl+u:删除行首至光标所在处之间的所有字符;
 Ctrl+k:删除光标所在处至行尾的所有字符;
 Ctrl+l:清屏,相当于clear

三、请使用命令行展开功能来完成以下练习:
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d:

mkdir -pv /tmp{a,b}_{c,d}

(2)、创建/tmp/mylinux目录下的:

图片3

总结vim命令行模式常见快捷方式,以及vim查找,替换的方法

1.直接vim+文件名  进入普通模式 ,光标可以移动查看
单词间跳转:
 w:下一个单词的词首
 ^或者数字0  光标所在行首
 $ 			 光标所在行尾
 当前页跳转:
 H:页首 M:页中间行 L:页底
x: 删除光标处的字符
 \#x: 删除光标处起始的#个字符
 xp: 交换光标所在处的字符及其后面字符的位置
删除命令:本质是剪贴,后面可配合p(paste)剪切粘贴使用
 d: 删除命令,可结合光标跳转字符,实现范围删除
 d:从光标删除到行尾−−−−−−−−−>>*D*:从当前光标位置一直删除到行尾,等同*d*
:从光标删除到行尾−−−−−−−−−>>D:从当前光标位置一直删除到行尾,等同d
 d0:从光标删除到行首
 dd: 删除光标所在的行
 \#dd:多行删除
 dG:从光标删除到文件尾部
 dgg:从光标删除到文件首部
复制命令(y, yank)   配合P(paste)使用
 y: 复制,行为相似于d命令
 y$
 y0
 y^
 yy:复制行
 \#yy: 复制多行
 Y: 复制整行

在这里插入图片描述
在这里插入图片描述

y 复制、d 删除、gU 变大写、gu 变小写

2.按i建进入插入模式 输入好以后按ESC键 返回普通模式
在这里插入图片描述

3.像Windows一样,比如我们要复制一些内容,按v键进入可视模式,

在这里插入图片描述

光标移动就可以选中行,比普通模式选中的更加直观
在这里插入图片描述

在扩展模式下 输入!+命令 可以不退出查看命令结果
在这里插入图片描述
在这里插入图片描述

:r!uname -r
文件中直接写入命令结果

扩展命令模式:查找并替换

在这里插入图片描述

2.总结脚本中运算符、逻辑运算以及用法
算术运算
(1) let var=算术表达式
(2) var=算术表达式var=

算术表达式var=((算术表达式))
(4) var=$(expr arg1 arg2 arg3 …)
(5) declare –i var = 数值
(6) echo ‘算术表达式’ | bc

逻辑运算
true(真), false(假)
1 0
与:
1 与 1 = 1
1 与 0 = 0
0 与 1 = 0
0 与 0 = 0
或:
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0

非:!
! 1 = 0 假
! 0 = 1 真
短路运算
短路与
第一个为0,结果必定为0
第一个为1,第二个必须要参与运算
短路或
第一个为1,结果必定为1
第一个为0,第二个必须要参与运算
异或:^
异或的两个值,相同为假,不同为真

cmd2 cmd3 真
cmd1 && cmd2 || cmd3
如果cmd1为真,cmd2执行,cmd3不执行
如果cmd1为假,cmd2不执行,cmd3执行

cmd2 cmd3 真
cmd1 || cmd2 && cmd3
如果cmd1为真,cmd2不执行,cmd3执行
如果cmd1为假,cmd2执行,cmd3执行

3.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中

#!/bin/bash
 cp -rv /etc  /root/etc`date +%F`

4.编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统

nologin.sh](http://nologin.sh)
 \#!/bin/bash
 id=`id -u $1`
 [ “id” -ge 1000 ]&&{ passwd -l $1 &> /dev/null;echo $1 nopermmit to access system;}
 unset id

[login.sh](http://login.sh)
 \#!/bin/bash
 id=`id -u $1`
 [ “id” -ge 1000 ]&&{ passwd -u $1 &> /dev/null;echo $1 permmit to access system;}
 unset id

5.编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

#!/bin/bash
 echo  “`df -h | grep "/dev/sd"|tr -s " " "%"|cut -d% -f5|sort -nr|head -1`”

马哥教育第五周作业

4月4日课程:磁盘储存和文件系统管理

1.创建设备文件:mknod (b是文件类型、8主设备编号、1次编号此类型下第几个文件)

例子:

img

* 同设备类型下,主设备编号、次设备编号相同的两个设备文件为同一个!

2.硬盘接口类型:

IDE 早期家用电脑 SCSI 早期服务器 SATA 家用电脑 SAS 服务器 USB M.2

注意: 速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的

3.机械硬盘(HHD)、固态硬盘(SSD)

相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD

的2倍。

相较于SSD,HDD在价格、容量占有绝对优势,硬盘有价,数据无价,目前SSD不能完全取代HHD

4.硬盘储存术语CHS

head:磁头 track:磁道 sector:扇区 cylinder:柱面

img

*机械硬盘访问数据时间=磁头寻道时间+硬盘转速+读取扇区时间

*越外圈磁道数据访问越快(磁道编号越小就在外圈)

5.由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方

式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式(只寻扇区48位,最大8T)

6.识别SSD和HHD类型:

​ 1表示机械,0表示SSD

img

7.磁盘分区

  • - 优化I/O性能
    - 实现磁盘空间配额限制
    - 提高修复速度
    - 隔离系统和程序
    - 安装多个OS
    - 采用不同文件系统
    

8.分区方式:

MBR   

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)

MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5

分区结构:

img

img

分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4

*分区表被破坏,系统无法启动,需要进去救援模式恢复对应的分区表

9.备份分区表

dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446    (skip跳过if后面的文件字节、seek跳过of后面文件字节) 

10.临时配ip地址(救援模式下):

ip a a   /   ip addr add 10.0.0.8/24 dev 网卡名

11.scp

其他主机ip10.0.0.0:文件路径     /当前主机目录  (从它机拷文件) scp  文件路径   其他主机ip10.0.0.1:/保存路径(向它机拷文件)

12.GPT分区:支持128个分区,64位,支持8Z,使用128位UUID(Universally Unique Identififier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位

  • UEFI (Unifified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
    
    - GPT头
    - 分区表
    - GPT分区
    - 备份区域
    

13.管理分区:

lsblk 列出块设备

创建分区命令:fdisk 管理MBR分区、gdisk 管理GPT分区、parted 高级分区操作,可以是交互或非交互方式

parted命令:实时操作小心使用

parted /dev/sdb mklabel gpt|msdos 创建分区表

parted /dev/sdb print 查看分区表

parted /dev/sdb mkpart primary 1 200 (默认M)创建分区

parted /dev/sdb rm 1  删除分区,对应编号  也可以用 dd if=/dev/zero of=/dev/sdb bs=1 count=66 seek=466 删除分区表

parted –l   列出所有硬盘分区信息

fdisk、gdisk 命令:主要选项 n 添加分区(p主分区、e扩展分区、l 逻辑分区)  p 显示分区表 d 删除 (逻辑分区删除名字会相互替代,扩展分区删除里面的逻辑分区会删除)v>

p 分区列表,t 更改分区类型,v 校验分区,u 转换单位,w 保存并退出,q 不保存并退出

centos6

识别新增分区:partx -a /dev/DEVICE
删除分区更新:partx -d --nr M-N /dev/DEVICE

其他版本:partprobe

14.文件系统

支持的文件系统: ls /lib/modules/`uname -r`/kernel/fs
Linux 常用的文件系统:ext 2.3.4            xfs                swap             iso9660光盘      btrfs              reiserfs
Windows 常用的文件系统:FAT32                NTFS                  exFAT

15.创建文件系统

mkfs命令:
  ①mkfs.     FS_TYPE(ext4 .xfs. btrfs. vfat ) /dev/DEVICE
  ②mkfs -t   FS_TYPE(ext4 .xfs. btrfs. vfat ) /dev/DEVICE
  -L   'LABEL' 设定卷标
*mke2fs : ext 系列文件专用的管理工具

img

16.查看和管理分区

  • - blkid -U 根据UUID查   -L根据LABEL查找 查看块设备属性
    - e2label: 管理ext系列文件系统LABEL
    - findfs  查找分区
    - tune2fs 重新设定ext系列文件系统
    

img

  • xfs_info:显示示挂载或已挂载的 xfs 文件系统信息
    

17.文件系统检测修复 注意:一定不要在挂载状态下执行下面命令修复

fsck: File System Check
常用选项:
e2fsck:ext系列文件专用的检测修复工具
      fsck.FS_TYPE
      fsck -t FS_TYPE                 -a 自动修复                 -r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
         -y 自动回答为yes
         -f 强制修复
         -p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
         -f 修复文件,而设备
         -n 只检查
        -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

18.挂载 mount

 mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint 
 mountpoint:挂载点目录必须事先存在,建议使用空目录

​ 挂载规则:

  • - 一个挂载点同一时间只能挂载一个设备
    - 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
    - 一个设备可以同时挂载到多个挂载点
    - 通常挂载点一般是已存在空的目录(如果目录内有文件挂载后查看不到此目录下文件内容)
      给分区加卷标:e2label /dev/sdXX   /xx/xx
       umount  设备名  |  挂载点
    查看挂载情况:cat /etc/mtab
    ​           cat /proc/mounts
    查看当前挂载点使用者:
    fuser -v  /mnt/mnt-point     lsof /
    杀掉其他使用者:
    fuser -km /mnt/mnt-point
     持久挂载:保存到/etc/fstab 中
    mount -a 挂载文件内设定好的挂载信息
    mount -o remount  / / 重新挂载 
    uuidgen 随机生成uuid
    tune2fs -U 改uuid  ext4文件系统
    文件挂文件夹:
    centos 7.8 可以直接挂载
    CentOS 6 必须加上 mount -o loop (卸载文件/etc/fstab内 选项内 写 loop 否则挂不上)
    文件夹挂文件夹:
    /etc/fstab 写法  文件系统:none            bind
    

4月15日

  1. swap : 是系统RAM的补充,支持虚拟内存,大小应适合当前用户需求(可以用分区挂,也可以直接用小的硬盘直接挂)
  • 启用swap分区:swapon  -a   -p 指定优先级(在/etc/fstab 文件中 选项 写pri=10  之后重新挂载生效)
    
    创建交换分区:
    
    - 创建交换分区或者文件 fdsik 
    - 使用mkswap写入特殊签名
    - 在/etc/fstab文件中添加适当的条目
    - 使用swapon -a 激活交换空间 
    

2.内存空间

缓冲区   buffer : cache write cache     
缓存      cache :read cache
centos7 之后合并 buffer/cache
删除硬盘:fdisk d    或者 dd 清除分区表(适合mbr)
eject 弹出光盘 -t  探入光盘
Sync  确认内存信息是否写入硬盘 
du -sh /  查看目录大小 查看文件内容大小
df -h 查看分区使用情况真实使用空间大小

3.RAID:主流使用

 0 :最少2块硬盘,无校验位
 1 :最好2块硬盘,一块备份 
 5 :最少3块硬盘,1个校验位
 6 :最少4块硬盘,2个校验位
 10: 由1和0组成, 
 五种

4.逻辑卷(提前安装 lvm2 )

  • - 将设备指定为物理卷 : pvs | pcdisplay 显示物理卷信息,pvctrate 创建   pvremove 删除
    - 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的: vgs | vgdisplay 显示卷组,vgcreate 创建卷组,vgremove 删除卷组,vgextend 卷组扩容
    - 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成:lvs | lvdisplay 显示逻辑卷,lvcreate 创建逻辑卷,vgremove 删除逻辑卷 ,lvextend 逻辑卷扩容
    
  • 可以在逻辑卷上创建文件系统并挂载

1. #创建物理卷:pvcreate /dev/sda3    
2. \#为卷组分配物理卷:vgcreate vg0(卷组名字) /dev/sda3 (可硬盘可分区可多个)
3. \#从卷组创建逻辑卷:lvcreate  -L 256M(大小)| -l X(分X个PE)  -n data(名字) vg0(卷组名)
4. \#mkfs.xfs   /dev/vg0/data
5. \#挂载:mount /dev/vg0/data /mnt/data

扩逻辑卷容量:

​ lvextend -r -l +100%free 把卷组的剩余内存都分给逻辑卷

​ 扩展之后需要同步文件系统:ext4系统用 resize2fs /逻辑卷名

​ xfs系统 xfs_growfs /挂载点

缩减逻辑卷容量:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减

​ 取消挂载:umount

​ 文件系统检查:fack -f

​ 缩文件系统:resize2fs / 大小

​ 缩逻辑卷: lvreduce -L 大小 /

​ 重新挂载:mount -a

卡主机迁移卷组:

1 在旧系统中,umount所有卷组上的逻辑卷

2 禁用卷组:vgchange -a n 

3 导出卷组:vgexport ,pvs查看位于哪个硬盘

4 拆下旧硬盘在目标计算机上,并导入卷组:vgimport

5 启用:vgchange -ay 

6 挂载卷组上的逻辑卷

逻辑卷快照

原理: 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

​ 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中

​ 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据

特点:

​ 备份速度快,瞬间完

​ 应用场景是测试环境,不能完成代替备份

​ 快照后,逻辑卷的修改速度会一定有影响

创建范例:xfs系统不允许两个相同设备用相同的uuid -nouudi 不检查uuid唯一性挂载

img

挂载后 LL快照文件,显示的内容为逻辑卷的内容,实际未改动时里面没有内容。

pvmone /dev/sdX 移走这块盘上的PE 到这个卷组的其他逻辑卷

lvreduce 卷组 /dev/sdX 删掉卷组内的 sdx

彻底删除逻辑卷:先移除逻辑卷,再移除卷组,再移除物理卷,清除物理卷分区等,拆除硬盘

网络协议和管理(4月17日)

网络分层:

img

第7层 应用层

应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等

第6层 表示层

主条目:表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式

第5层 会话层

会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。

第4层 传输层

传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。

第3层 网络层

网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。网络表头包含了网络数据。例如:互联网协议(IP)等。

第2层 数据链接层

数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框(Data Frame)。

数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。

例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Media access control,MAC)子层

第1层 物理层

物理层(Physical Layer)在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等

2.三种通讯模式

unicast 单播

broadcast 广播

multicast 组播

3.冲突域和广播域

冲突域:两个网络设备同时发送数据,如果发生了冲突,则两个设备处于同一个冲突域,反之,则各自处于不同的冲突域

广播域:一个网络设备发送广播,另一个设备收到了,则两个设备处于同一个广播域,反之,则各自处于不同的广播域

4.三种通讯机制

单工通信:只有一个方向的通信

半双工通信:通信双方都可以发送和接收信息,但不能同时发送,也不能同时接收

全双工通信:通信双方可以同时发送和同时接收

5.查看网络状态 mii-tool -v erhtool -i

6.局域网:

特点:网络为一个单位所拥有,地理范围和站点数目均有限

主要功能:资源共享和数据通信

优点:能方便地共享昂贵的外部设备、主机以及软件、数据。从一个站点可以访问全网

​ 便于系统的扩展和逐渐演变,各设备的位置可灵活的调整和改变

​ 提高系统的可靠性、可用性和易用性

IEEE802标准

中国国家无线网络标准:WAPI

7.组网设备:网络线缆和接口、网络适配器、中继器、集线器、网桥、交换机、路由器

8.以太网

9.虚拟局域网 VLAN

1,显示当前时间,格式为:2019-06-18 10:20:30

答案:

date “+%F,%T” 或者 date “+%F %H:%M:%S”

2,显示前天是星期几?

答案:

date -d “-2 day” +%A

知识点:一 ,date +%s 是把当前时间转化为秒数 二, date -d @”1523604170″ 把秒数转化回来

3,今天18:30自动关机,并提示用户。

答案:

shutdown -h 18:30 “dao dian guan ji,18:30” 如果想取消此操作输入: shutdown -c

4,在本机字符终端登录时,除显示原有信息外,在显示当前登录终端号,主机名和当前时间。

答案:

vim /etc/profile.d/kaiji.sh 进去后输入:#********************************************************************

echo your hostname is hostname
who am i

5,显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录。

答案:

ls /var/l*[0-9]*[[:lower:]]

6,显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录。

答案:

ls /etc/[0-9]*[^0-9]

7,显示/etc/目录下以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或目录。

答案:

ls /etc/[^[:alpha:]][a-zA-Z]*

8,显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其他为任意字符的文件或目录。

答案:

ls /etc/rc[0-6]*

9,显示/etc目录下,所有以.d结尾的文件或目录。

答案:

ls /etc/*.d

10,显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录。

答案:

ls /etc/[m,n,r,p]*.conf

11,只显示/root下的隐藏文件和目录。 只显示/etc下的非隐藏目录

答案:

ls -d /root/.* ls /etc/[^.]*/ -d

12,定义别名命令baketc,每天将/etc/目录下的所有文件,备份到/app独立的子目录下,并要求子目录格式为backupYYYY-mm-dd备份过程可见。

答案:

alias baketc=”cp -av /etc /data/backupdate +%F”

13,创建/app/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限。

答案:

mkdir -p /app/rootdir cp -a /root /app/rootdir/

14,如何创建/testdir/dir1/x,/testdir/dir/y,/testdir/dir/x/a,/testdir/dir/x/b,/testdir/dir/y/a,/testdir/dir/y/b.

答案:

mkdir -p /testdir/dir1/{x,y}/{a,b}

15,如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b.

答案:

mkdir -p /testdir/dir2/{x/{a,b},y}

16,如何创建/testdir/dir3,/testdir/dir4,/testdir/dir5,/testdir/dir5/dir6,/testdir/dir5/dir7.

答案:

mkdir -p /testdir/{dir3,dir4,dir5/{dir6,dir7}}

17,将/etc/issue文件中的内容转化为大写后保存至/tmp/issue.out文件中。

答案:

cat /etc/issue | tr “[a-z]” “[A-Z]” > /tmp/issue.out

18,将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中。

答案:

who | tr “[a-z]” “[A-Z]” >/tmp/who.out

19,一个linux用户给root发邮件,要求邮件标题为” help”,邮件正文如下:Heello,i am 用户名,The system version is here ,please help me to check it,thanks! 操作系统版本信息

答案:

mail -s “help” root <<123
>Hello,I am $USER
>The system version is here,please help me to check it,thanks!
>cat /etc/centos-release
>123

20,将/root/下文件列表,显示成一行,并文件名之间用空格隔开。

答案:

ls /root | tr “\n” ” ”

21,计算1+2+3+..+99+100的总和。

答案:

echo {1..100}|tr ” ” “+”|bc

22,删除Windows文本文件中的^M字符

答案:

tr -d “\15” win.txt

23,处理字符串 “xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4” ,只保留其中的数字和空格。

答案:

echo “xt.,l 1 jr#hostnamemn 2 c*/fe 3 uz 4” |tr -dc “[:digit:][:space:]”

24,将PATH变量每个目录显示在独立的一行。

答案:

echo $PATH |tr “:” “\n”

25,将指定文件中0-9分别代替成a-j

答案:

先创建文件touch f1 给f1 vim 输入0-9 cat f1 | tr “[0-9]” “[a-j]”

26,将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行。

答案:

cat /etc/centos-release |tr -c “[:alpha:]” ” ” |tr -s ” ” “\n”

27,创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为”Gentoo Distribution”.

答案:

useradd -G bin,root -s /bin/csh -c “Gentoo Distribution” gentoo

28,创建下面的用户,组和组成员关系

名字为webs的组 用户nginx使用webs作为附加组 用户varnish,也使用webs作为附加组

用户mysql,不可交互登录系统,且不是webs的成员,nbinx,varnish,mysql密码都是magedu

答案:

groupadd webs       useradd -G webs nginx        useradd -G webs varnish         useradd -s /sbin/nologin masql

echo magedu |passwd –stdin nginx;
echo magedu |passwd –stdin varnish;
echo magedu |passwd –stdin mysql;

29,当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?

答案:

不能cd进去,不能查看文件详细属性,也不能去访问目录里的文件内容(即使有读权限)。

30,当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?

答案:

不能对目录下的文件进行访问。

31, 当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

答案:

不能,因为对目录没有权限,所以不能。文件能不能删,不由文件决定,而由目录决定。

32,当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?

答案:

可以修改和删除

33,复制/etc/fstab 文件到/var/tmp 下,设置文件所有者为tomcat 读写权限,所属组为apps组有读写权限,其他人无权限。

答案:

(一)cp -a /etc/fstab /var/tmp 
(二) useradd tomcat 
(三) groupadd apps 
(四) chown  tomcat /var/tmp 
(五) chgrp apps /var/tmp 
(六) chmod 660 /var/tmp

34,误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性。

答案:

rm -rf /home/git ;    
mkdir /home/git;         
cp -a  /etc/skel/.[^.]* /home/git;        
chown -R git:git  /home/git;

35,在/testdir/dir 里创建的新文件自动属于webs组,组apps的成员如:tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其他用户(不属于webs,apps,dbs)不能访问文件夹。

答案:

mkdir -p /testdir/dir                       chgrp webs /testdir/dir                         chmod g=s /testdir/dir
setfacl -m g:apps:rw /testdir/dir              setfacl -m g:dbs:r  /testdir/dir

chmod o= /testdir/dir

36,备份/testdir/dir 里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限。

答案:

getfacl -R /testdir/dir > /root/acl.txt         setfacl -b /testdir/dir
setfacl -R –set-file=acl.txt /testdir/dir

37, 找出ifconfig “网卡名” 命令结果中本机的IPv4地址。

答案:

(方法一)ifconfig ens33 | grep netmask | tr -s ” ” “:” |cut -d: -f3
(方法二)ifconfig ens33 |egrep -o  \<“(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])”\>
(方法三)ifconfig ens33 | sed -n “2p” | sed -r s’@(.*inet)(.*)( netmask.*)@\2@’

38,查出分区空间使用率的最大百分比值。

答案:

(方法一)df | grep ^/dev | tr -s ” ” “:” | cut -d: -f5 |cut -d% -f1 | sort -nr | head -n1
(方法二) df | grep -o “[0-9]\{1,3\}%” |grep -o “[0-9]\+” |sort -nr |head -n1

39,查出用户UID最大值得用户名,UID及shell类型。

答案:

cat  /etc/passwd |sort -nr -t: -k3 |head -n1 |cut -d: -f1,3,7

40,查出/tmp的权限,以数字方式显示

答案:

stat  /tmp |head -n4|tail -n1|cut -d/ -f1|cut -d'(‘ -f2

41, 统计当前连接本机的每个远程主机IP的连接数,并从大到小排序。

答案:

先从桌面获取rz 获取文件,再进行处理。                 cat  access_log |egrep -o  “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”|sort|uniq -dc|sort -nr

42,显示/proc/meminfo 文件中以大小s开头的行(要求:使用两种方法)

答案:

(方法一)cat /proc/meminfo |egrep -oi ^s.*
(方法二)cat /proc/meminfo |egrep ^[Ss].*

43,显示/etc/passwd文件中不以/bin/bash结尾的行。

答案:

cat  /etc/passwd |egrep -v /bin/bash$

44,显示用户rpc默认的shell程序。

答案:

(方法一)cat  /etc/passwd |egrep rpc|cut -d: -f1,7
(方法二)cat  /etc/passwd |egrep rpc|sed -r ‘s/(.*:)([^:]+:?$)/\2/’

45,找出/etc/passwd 中的两位或三位数

答案:

cat  /etc/passwd | egrep -o “[0-9]{2,3}”

46,显示Centos7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行。

答案:

cat  /etc/grub2.cfg |egrep ^[[:space:]][^[:space:]].*$

47,找出”netstat -tan” 命令结果中以LISTEN后跟任意多个空白字符结尾的行。

答案:

netstat -tan |egrep .*LISTEN[[:space:]]+

48, 显示Centos7上所有系统用户的用户名和UID。

答案:

cat  /etc/passwd |egrep .*/sbin/nologin$ |cut -d: -f1,3

49,添加用户bash,testbash,basher,sh,nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行。

答案:

cat  /etc/passwd | egrep “^(.*)(:.*)\1$”

50,利用df和grep,去出磁盘各分区利用率,并从大到小排序。

答案:

df |grep ^/dev |tr -s ” ” “:”|cut -d: -f5 |cut -d% -f1 |sort -nr|head -n1

51,显示三个用户root,mage,wang的UID和默认shell.

答案:

cat /etc/passwd |egrep ^”(root|mage|wang)” |cut -d: -f1,3,7

52,找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行。

答案:

cat /etc/rc.d/init.d/functions | egrep “^[a-zA-Z_]+.*”

53,使用egrep取出/etc/rc.d/init.d/functions中其基名。

答案:

echo /etc/rc.d/init.d/functions |egrep -o “[^/]*/?$”

54,使用egrep取出上面 路径的目录名。

答案:

(方法一)echo /etc/rc.d/init.d/functions |egrep -o “/.*/”
(方法二)echo /etc/rc.d/init.d/functions |egrep -o “(/).*\1”

55,统计last命令中以root登录的每个主机IP地址登录次数。

答案:

  last |egrep root |egrep  “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”|tr -s ” ” “:”|sort -t: -k3|cut -d: -f3|uniq -dc

56,利用扩展正则表达式分别表示0-9,10-99,100-199,200-249,250-255.

答案:

 [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

57,显示ifconfig命令结果中所有IPV4地址。

答案:

ifconfig | egrep -o  “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”

58,将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的放在最前面。

答案:

echo “welcometomagedulinux” |grep -o “.”|sort|uniq -c|sort -nr

59,复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符。

答案:

cp /etc/profile /tmp/   vim  /tmp/profile       命令模式下按“:”进入扩展模式输入 %s/^[[:space:]]*//g

60, 复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号。

答案:

cp /etc/rc.d/init.d/functions /tmp
vim  /tmp/functions     命令模式下按“:”进入扩展模式输入         %s/^[[:space:]] */#&/   或者   %s/[[:space:]]\+.∗/#\1/g

61, 在VIM中设置tab缩进为4个字符。

答案:

 vim /etc/vimrc
在文件最后添加:
set ts=4
set expandtab
set autoindent
:wq

62,复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log.

答案:

cp  /etc/rc.d/init.d/functions /tmp                 vim /tmp/functions       命令模式下按“:”进入扩展模式输入                %s@\/etc\/sysconfig\/init@\/var\/log@

63, 删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号。

答案:

vim /tmp/functions       命令模式下按“:”进入扩展模式输入          
%s@^#”“\+.∗@\1@

64, 编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPV4,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

答案:

 vim /root/bin/systeminfo.sh
#********************************************************************
echo hostname
echo ifconfig ens33 | egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

)\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"|head -n1
echo cat /etc/centos-release
echo uname -r
echo lscpu |grep "^Model name.*" |cut -d: -f2|tr -s " "
echo cat /proc/meminfo |head -n1
echo lsblk |grep '^sda'|tr -s " " "%"|cut -d% -f4
:wq

65, 编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYY-mm-dd中。

vim /root/bin/backup.sh cp -a /etc /root/etcdate +%F          
:wq

66,编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值。

答案:

e=df|egrep ^/dev |tr -s " " ":"|cut -d: -f5|cut -d% -f1|sort -nr|head -n1
echo $e                 :wq

67, 编写脚本/root/bin/links.sh ,显示正连接本主机的每个远程主机的IPV4地址和连接数,并按连接数从大到小排序。

​ 答案:

vim /root/bin/linsk.sh   a=cat access_log  |egrep -o  "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"|sort|uniq -c|sort -nr                     echo $a

68, 编写脚本/root/bin/sumid.sh ,计算/etc/passwd 文件中的第10个用户和第20用户的ID之和。

答案:

vim /root/bin/sumid.sh   a=cat /etc/passwd | head -n10 |tail -n1|cut -d: -f3
b=cat /etc/passwd | head -n20 |tail -n1|cut -d: -f3
let c=a+b 或 d=$[ a+b ] echo $d

69, 编写脚本/root/bin/sumspace.sh ,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和。

答案:

  vim /root/bin/sumspace.sh   a=cat f1 |egrep  ^[[:space:]]*$ |wc -l   b=cat f2 |egrep ^[[:space:]]*$ |wc -l
let c=a+b

70, 编写脚本/root/bin/sumfile.sh ,统计/etc ,/var,/usr 目录中共有多少个一级子目录和文件。

答案:

vim /root/bin/sumfile.sh  a=ls /etc/ |wc -l       b=ls /var/ |wc -l 
c=ls /usr/ |wc -l
let d=a+b+c

71, 编写脚本/root/bin/argsnum.sh ,接受一个文件路径作为参数;如果参数个数小于1,则提示用户 “至少应该给一个参数”,并立即退出;如果参数个数不少于1,则显示第一个参数所指向的文件中的空白行数。

答案:

vim /root/bin/argsnum.sh [ $# -lt 1] &&  echo “At least one parameter should be given” && exit

[ $# -ge 1 ] &&  echo egrep "^[[:space:]]*$"  $1|wc -l

73, 编写脚本/root/bin/hostping.sh ,接受一个主机的IPV4地址做为参数,测试是否可连通。如果能ping通,则提示用户 “该IP地址可以访问” ;如果不可ping通,则提示用户 “该IP地址不可访问”。

答案:

  vim /root/bin/hostping.sh   [[ $1 =~  “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]]])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>” ]] || echo { “IP error”;exit; }            ping $1 && echo  “This address can be accessed”|| echo “This address cannot be accessed”

74, 编写脚本/root/bin/checkdisk.sh , 检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满。

答案:

  vim /root/bin/checkdisk.sh   a=df |egrep ^/dev |tr -s " " ":"  |cut -d: -f5 |cut -d% -f1|sort -nr|head -n1
[[ $a -ge 80 ]] && echo “zhao huo la ” || echo { “yi qie zheng chang”;exit; }

75, 编写脚本/bin/per.sh ,判断当前用户对指定参数文件,是否不可读并且不可写。

答案:

 [ -not -r $1 -a -not -w $1 ] && echo “bu ke du ”
[ −r$1−o−w$1 ] || echo “ke du ”

76,编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件。

答案:

  vim /root/bin/excute.sh     [[ $1 =~ .*sh$ ]] && chmod +x $1 || echo "bu shi jiao ben wen jian "
posted @ 2021-03-06 14:31  上善若水~小辉  阅读(581)  评论(0编辑  收藏  举报