linux

1.静默模式:泛指计算机程序发生特定情况时自行进行处理而不惊动用户的模式

2.chattr 常用命令:

  chatter: 锁定文件,不能删除,不能更改
        +a:  只能给文件添加内容,但是删除不了
              chattr +a  /etc/passwd

        加锁:chattr +i  /etc/passwd       文件不能删除,不能更改,不能移动
        查看加锁: lsattr /etc/passwd      文件加了一个参数 i 表示锁定
        解锁:chattr -i /home/omd/h.txt    - 表示解除

3.grep常用命令:

  grep -i:忽略字符大小写

4.持久化:
持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC就是一种持久化机制。文件IO也是一种持久化机制。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。总结来说持久化就是以某种技术,将需要的数据保存下来,以便以后使用。

5.句柄

句柄就是给对象起一个名字,类似引用的概念。
6.tracert
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个"Ping"的过程实际上就是ICMP协议工作的过程。还有其他的网络命令跟踪路由的Tracert命令也是基于ICMP协议的。
命令: windows tracert
   linux traceroute
7.硬件一般都安装在dev文件夹下;/boot分区下linux启动的信息文件
 
8.linux系统中的/proc文件系统有什么用?
   /proc文件系统是一个基于内存的文件系统,这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。
 
 9.假设Apache产生的日志文件名为access_log,在apache正在运行时,执行命令mv access_log access_log.bak,执行完后,请问新的apache的日志打印到哪里,为什么?
解答:
新的日志会打印在access_log.bak中,因为apache启动时会找到access_log文件,随时准备向文件中加入日志信息。
虽然此时文件被改名,但是由于服务正在运行,因为它的inode节点的位置没有变,程序打开的fd(文件描述符)仍然会指向原来那个inode,不会因为文件名的改变而改变。apache会继续向改名的文件中追加日志,但是若重启apache服务,系统会检查access_log文件是否存在,没有就会创建。

10.系统日志:/var/log/message

  /var/log/messages 存放的是系统的日志信息,它记录了各种事件,基本上什么应用都能往里写日志,在做故障诊断时可以首先查看该文件内容

[root@test_192.168.0.110 ~]# tail /var/log/messages Dec 18 23:27:07 localhost kernel: [33100840.027421] possible SYN flooding on port 3873. Sending cookies. Dec 18 23:30:11 localhost sz[31090]: [root] 1.txt/ZMODEM: 8144 Bytes, 16520 BPS Dec 19 16:29:29 localhost kernel: [33162181.801121] possible SYN flooding on port 3873. Sending cookies. Dec 19 17:15:05 localhost sz[16756]: [root] ConfigActivity.xml/ZMODEM: 653205 Bytes, 393989 BPS Dec 19 17:38:55 localhost sz[17617]: [root] ConfigActivity.xml/ZMODEM: 287531 Bytes, 337878 BPS
可以分为几个字段来描述这些事件信息:
  1. 事件的日期和时间
  2. 事件的来源主机
  3. 产生这个事件的程序[进程号] 
  4. 实际的日志信息
如:Dec 19 17:39:06 localhost sz[17833]: [root] ConfigActivity.xml/ZMODEM: 287531 Bytes, 343933 BPS
  1. 产生这个事件的时间是:Dec 19 17:39:06
  2. 事件的来源主机为:localhost
  3. 产生这个事件的程序和进程号为:sz[17833]
  4. 这个事件实际的日志信息为:[root] ConfigActivity.xml/ZMODEM: 287531 Bytes, 343933 BPS
 
 11.linux命令之md5sum
  1)在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。
    2)md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。
    3)md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。 
    4)在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。
举例:md5sum 文件 

 特殊说明

1)md5sum 是校验文件内容,与文件名是否相同无关

2)md5sum值逐位校验,所以文件越大,校验时间越长。

总结
通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。 
 
12.UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突UUID。相当于自己给自己一个标识符号。

1)Unix/Linux环境中大都有一个名为uuidgen的小工具,运行即可生成一个UUID到标准输出

2)读取文件/proc/sys/kernel/random/uuid即得UUID

 

13.tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件.

 显示最后10行 tail notes.log

 不断刷新最后10行:tail -f notes.log

14.Linux 执行脚本时&和&&

1)  &表示在后台执行脚本,比如 ./ppp & 。
2)  &&表示前一条指令执行成功后再运行下一条指令,如果前一条指令执行失败,则后面的指令不执行。
 
15./bin/bash和/bin/sh的区别
1)/bin/sh是/bin/bash的软连接,在一般的linux系统当中,使用sh调用执行脚本相当于打开了bash的POSIX标准模式,也就是说 /bin/sh 相当于 /bin/bash --posix
2)/bin/sh执行过程中,若出现命令执行失败,则会停止执行;/bin/bash执行过程中,若命令执行失败,仍然会继续执行
3)假设test.sh
 
#!/bin/bash
echo hello
 
(1)sh test.sh :即使在脚本中指定了#!/bin/bash,但仍然是使用/bin/sh执行test.sh
(2)chmod u+x test.sh;./test.sh :这种执行方式会按照脚本第一行指定的shell执行
 
16.可以在shell脚本中使用哪些类型的变量?
答:在shell脚本,我们可以使用两种类型的变量:
  • 系统定义变量
  • 用户定义变量
系统变量是由系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。
用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。
 
17.如何将标准输出和错误输出同时重定向到同一位置?
答:这里有两个方法来实现:
方法一:
2>&1 (# ls /usr/share/doc > /dev/null 2>&1 )
方法二:
&> (# ls /usr/share/doc &> /dev/null )
  
18.shell脚本中“$?”标记的用途是什么?
检查前一个命令的执行状态,如果为0表示执行成功,其他表示执行失败
 
19.shell脚本中break、continue命令的作用 ?
break退出执行循环,continue退出本次循环,但是不退出整个循环,可用于while循环中
 
20.如何调试shell脚本 ?
答:使用’-x’参数(sh -x myscript.sh)可以调试shell脚本。
 
21.shell脚本中if---test用于比较字符串
test命令可以用来比较字符串。str1 = str2 比较是否相同,test 比较会将大小写,标点符号都考虑进去,
#!/bin/sh
testing=root
if [ $USER = $testing ]
then
echo "Yes,wining"
else
echo "NO, i am no"
fi
 
22.Bourne shell(bash) 中有哪些特殊的变量 ?
$0 脚本名称 $#命令行参数数量 $*命令行参数显示 $@命令行参数显示
 
23.shell脚本中if ---test用于比较文件
test命令可以用来比较文件:
-d 文件名 如果文件存在,并且是目录,返回true
-f 文件名 如果文件存在,并且是普通文件,返回true
 
24.如何让 shell 就脚本得到来自终端的输入?
使用read命令可以读取键盘的数据,read命令得到用户的输入并且置于你给的变量中。
 
25.如何执行算术运算 ?
1)expr可以用于基本运算操作,表达式中的每部分都要用空格隔开
例如:expr 4 + 2
[root@djw script]# expr 4 + 2
6
2)bc是一个数学运算的高级工具,这个精密计算器包含了大量选项。可以用于浮点数计算
格式: echo "参数;表达式" |bc
[root@djw script]# echo 5*2.11 |bc
10.55
 
26.shell脚本中如何定义,调用函数?(function可以省略)
function 函数名(){
command1
command2
}
函数名
 
27.ps 命令查看哪些进程正在运行
ps命令中,最常用的是 ps -ef 和ps aux 两者由于历史原因而产生,目前已经兼容,两者命令的执行效果基本一致。
UID:用户进程ID,显示用户名
PID: 进程号ID
TTY:终端号,该进程在哪个终端上运行,如果和终端无关,则为?,如果是pts/0等,则表示由网络连接主机进程
CMD:命令的名称和参数
 

 

 28.kill 和 pkill killall的命令区别

1)kill 命令是杀死某一个进程 (kill -9 进程号ID)
2)killall命令是杀死某一类进程(killall -9 服务名称)
killall -9 httpd:杀死httpd服务的所有进程
3)pkill命令踢出某个终端(pkill -9 -t 踢出该终端)
pkill -9 -t pts/0 表示踢出终端号是0的终端
 
29.zip和unzip命令
1)把/home目录下面的mydata目录、123.txt 文件压缩为mydata.zip
  zip -r   mydata.zip   mydata 123.txt #压缩mydata目录
  -r 表示递归处理
2)把/home目录下面的mydata.zip解压到mydatabak目录里面
unzip mydata.zip -d ./mydatabak
-d 指明将文件压缩到哪个目录下
 
30.ping命令详解
不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。
-c :表示ping的次数
-W:以毫秒为单位,设置ping超时的时间
 
31.netstat命令详解
Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。
-p 显示建立相关链接的程序名
 
ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了, The socket has an established connection. 代表一个打开的连接,数据可以传送给用户。
LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN, The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 。
 
32.通过echo ${#string}的方式(注意:这里的string是该字符串的变量名)
name=abc echo ${#name}
 
33.mysqldump命令详解
1)mysqldump备份的原理
利用mysqldump备份数据库的过程,实际上就是把数据从mysql库里以逻辑sql语句的形式直接输出或生产备份的文件的过程
2)常见参数
-B 表示指定多个库;如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。
-A 备份所有的库和表
-F 刷新二进制日志
-R 导出存储过程以及自定义函数
-d 只备份表结构
-t 只备份数据
-x 提交请求锁定所有数据库中的所有表,以保证数据的一致性。
3)总结:
mysqldump -uroot -p'' 数据库名" > 自定义文件名 #备份单个库
mysqldump -uroot -p' -A  -B "数据库名1"  "数据库名2" >自定义文件名 #备份所有的库
 
34.wget命令
  Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget命令用来从指定的URL下载文件。wget非常稳定,wget工具体积小但功能完善,它支持断点下载功能。
  wget –spider测试下载链接:当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加–spider参数进行检查。
  -T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。
 
35.curl命令
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称curl为下载工具。
-s 静音模式。不输出任何东西
-I 只显示文档信息
-w 什么输出完成后
-o 把输出写到该文件中 -O 把输出写到该文件中,保留远程文件的文件名
测试网页返回值
curl -o /dev/null -s -w %{http_code} www.linux.com
 
36.定时任务
定时任务有2种:
1)系统的在 /etc/|grep cron 下可以查看
2)用户执行的crond,依赖服务crond,且没有端口,因为不对外提供服务。
编译定时任务:
crontab -e =vi /var/spool/cron/用户名
查看定时任务:
crontab -l =cat /var/spool/cron/用户名
工作中出错:系统的定时任务:/etc/crontab,如果发现定时任务在执行,但是你找不到,极有可能是“猪”队友写在了这里,注意看下。
定时任务注意事项;在定时任务中有一点要注意的地方:定时任务只能识别较少的全局环境,如果脚本中有全局环境变量,就要注意了。
编写案例模板:
每天14点10分执行一次bak.sh脚本
#bak scripts
10 14 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
 
37.什么是linux的内核?
我们在说linux的时候,就是说的linux内核,linux开放源码,故有些公司就是在内核的基础上设计了各自的版本,所以市面上就有了红帽、centos、unbento等等,根据自身需要,在内核上实现各自的功能。内核就像身体的心脏,是连接应用和裸机的中间抽象层。比如微波炉内核,也许就几个KB,就那么几个功能就可以了,如果装上linux或者windows的内核,就支持很多功能,也许黑客就把你家的微波炉黑了,发生大火等等。(企业根据自身需求,选择合适的版本或者品牌),其实本质上就是选择不同的实现功能,因此会需要选择不同的版本。
 
38.关于linux发展史、内核的理解?
如上所说,linux单单就是指的linux的内核,内核是用C语言编写的,内核和GNU(包括vim、界面x、gcc等等)共同组成了linux,如centos、红帽、GNU linux等等。
 
39.在centos7之后,多了一个硬盘接口,是NVMe接口,是用来增强或者说提升SSD硬盘的性能等。
 
40.什么时候用到swap分区?救援模式的单词是什么?关机命令?虚拟机快照?
1)在内存不够用的时候,会用到swap分区,传统的swap是内存的1.5到2倍,但是如果内存本身很大,就不需要swap或者swap很小,如果用到了swap,那么本身就是有问题的。
2)救援模式单词是rescue。
3 ) 关机命令是init 0 或者 halt。
4 ) 虚拟机快照在关机的情况下快照比开机所占用的磁盘要少,因为开机情况下,内存的情况也要写入到磁盘中,相对来说占用的磁盘空间更大。
 
41.虚拟机网络使用技巧
  vmware 为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
  桥接模式:就是将主机网卡不虚拟机虚拟的网卡利用虚拟网桥迚行通信。
  在桥接的作用下,类似亍把物理主机虚拟为一个交换机,所有桥接设置的虚拟机违接到这个交换机的
一个接口上,物理主机也同样揑在这个交换机当中。
      虚拟机 ip 地址需要不主机在同一个网段,如果需要联网,则网关不 DNS 需要不主机网卡一致。

 

 

  NAT(地址转换模式):在 NAT 模式下,虚拟主机需要借劣虚拟 NAT 设备和虚拟 DHCP 朋务器,使得虚拟机可以联网。虚拟机和物理机共有一个 IP 地址。(相当于在物理机的内部网中,不是静态NAT的话,虚拟机IP随时变化)
注:虚拟机使用 NAT 模式时,Linux 系统要配置成动态 IP。

 

 

Host-Only 模式:将虚拟机不外网隑开,使得虚拟机成为一个独立的系统,只不主机相亏通讯。相当亍 NAT 模式去除了虚拟 NAT 地址转换功能。
注:虚拟机使用 Host-Only 模式时,Linux 系统要配置成动态 IP。

 

 

41.zero 空文件?
/dev/zero 在类 UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空
字符(NULL, ASCII NUL, 0x00)。典型用法是用它来产生一个特定大小的空白文件。
例:使用 dd 命令产生一个 50M 的文件
参数:
if 代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。
of 代表输出文件。如果不指定 of,默认就会将 stdout 作为默认输出。
bs 代表字节为单位的块大小。
count 代表被复制的块数。
[root@xuegod63 mnt]# dd if=/dev/zero of=b.txt bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.228653 s, 229 MB/s
[root@xuegod63 mnt]# du -sh b.txt
50M b.txt
 
42.tee 命令
tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件
 
43.which-whereis-locate-grep-find 查找命令
查找文件一般有以下几个命令:
which 查看可执行文件的位置
whereis 查看可执行文件的位置及相关文件
locate 配合数据库缓存,快速查看文件位置
grep 过滤匹配,它是一个文件搜索工具
find 查找相关文件
locate
  locate 命令和 find -name 功能差不多,是它的另外一种写法,但是这个要比 find 搜索快的多,因为 find 命令查找的是具体目录文件,而 locate 它搜索的是一个数据库/var/lib/mlocate/mlocate.db,这个数据库中存有本地所有的文件信息;这个数据库是 Linux 自动创建并每天自动更新维护。相关的配置信息在/etc/updatedb.conf
 

 

 

44.查看当前的仿真终端命令是tty,仿真终端可以形象的理解为shell(内核和外部命令的桥梁),解释器。exit退出仿真终端shell==Ctrl+D
 
45.ls命令中,排序查看文件大小 是ls -Sl。
 
46.内部命令和外部命令的理解。
内部命令:在系统启动时就调用到内存中,是常驻内存的,所以执行效率高
外部命令:在系统软件的功能,用户需要时才从硬盘中调入内存中。
 
47.4个配置文件分别是,各个用户下的 .bashrc .bash-profile 和etc目录下的 profile和bashrc
1)临时别名设置;
[root@xuegod63 ~]# alias vimens33="vim /etc/sysconfig/network-scripts/ifcfg-ens33"
[root@xuegod63 ~]# vimens33
2)永久在某个用户或者全局设置,在4个文件中配置即可,source一下,重新加载
 
48.linux下的时间管理有两个:centos7之后,hwclock和date时间是一样的
1)BLOS下的硬件时钟hwclock
2)系统时钟kernel,使用的date
date -d 'xxx':显示由字符描述的时间
测试一个命令的运行时间用time
real:cpu执行的时间 user用户状态下 sys 内核状态下的
一个命令的执行时间:real+user+sys
 
49.默认运行级别:centos8开始不再使用/etc/inittab
50.可以通过在服务器BOIS中进行设置服务器来电后自动开机也可以在BOIS中设置服务器定时开机。
 
51.LVM的理解:在生产环境中,如果一个磁盘不够用了,只能换一个更大的盘,并将数据导入到新的盘符中,但是如果在不够用了,怎么办能,所以比如邮件系统等的扩容,就可以用LVM进行动态扩容操作,LVM又叫逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,将底层的物理硬盘封装起来,呈现给上层应用已逻辑卷的形式,底层设备必须初始化为物理卷。
总结:多个磁盘/分区/raid--->多个物理卷---》多个vg卷组---》从vg划分出逻辑卷--》格式化LV挂载使用
RAID+LVM 一起用:LVM 是软件的卷管理方式,而 RAID 是磁盘管理的方法。对于重要的数据,使用 RAID用来保护物理的磁盘不会因为故障而中断业务,再用 LVM 用来实现对卷的良性的管理,更好的利用磁盘资源。
 
52.vim总结:
u 撤销 r 替换 Ctrl+r 恢复 gg 行首 G 行尾 yy 复制 p粘贴 :e! 不保存,恢复原样
ctrl +V 可视化模块:
1)选中,写I,加入内容,e sc后,全部加入
2)选中,小写d,删除内容
比较文件,vimdiff ,文件切换:ctrl+w , 退出 :qa
整体全文替换:
/ % s/旧内容/新内容/gi ---i表示不区分大小写
3):r 文件 进行文件的追加
 
53.在进行分区的时候,partx -a /dev/sdb 进行获取新的分区表
 
54.为什举我们创建的文件的权限默认是 644 呢?我们创建文件的默认权限是怎举来的?
umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)
存在一个相应的 umask 值中的数字。文件默认权限=666 ,目彔默认权限=777。
注: UID 大于 199 丏用户的组名和用户名一样,那举 umask 值为 002,否则为 022.
注: -gt 在 shell 中表示大于; id -g 显示用户组 ID ,id -gn 显示组名。
权限科学的计算方法步骤:
1)将默认权限(目彔 777,文件 666)和 umask 值都转换为 2 迚制
2)对 umask 取反
3)将默认权限和 umask 取反后的值做不运算
4)将得到的二进制值再转换 8 进制,即为权限
 
55.Linux读写文件所需要的权限,查看stat文件后最后三行日期的含义与修改
总结:
  Access最近访问的时间。
  Modify是最近更改的时间,是指最近修改文件内容的时间。
  Change式最近的改动时间,是指最近修改INode的时间,例如文件类型目录、符号链接,一般修改文件内容后同步修改这个时间,Inode也是需要访问的。
 
56.history 命令的二种用法
1)!+序号
2) Ctrl + R 进行搜索
 
57.$! 表示上一条命令的最后一个参数 ,例如:vim $!
 
58.文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL
文件的特殊权限:suid sgid sticky:
1) SUID(set uid 设置用户 ID):限定:只能设置在二迚制可执行程序上面。对目彔设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限
2) SGID:限定:既可以给二迚制可执行程序设置,也可以对目彔设置
功能:在设置了 SGID 权限的目彔下建立文件时,新创建的文件的所属组会,继承上级目彔的所属组
3) Stickybit:粘滞位权限是针对目彔的,对文件无效,也叫防删除位
这 3 个特殊权限对应的数值为:
SUID:u+s 戒 u=4
SGID:g+s 戒 g=2
Stickybit:o+t 戒 o=1
4)acl:扩展权限
给文件增加扩展权限: setfacl -m u:user1:rwx /opt/a.txt
给目录增加扩展权限:setfacl -m d:u:user1:rwx /opt/test
给目录下所有文件增加扩展权限:setfacl -R -m u:user1:rwx /opt/test
去掉单个用户的权限:setfacl -x u:user1 /opt/a.txt
去掉所有用户的权限:setfacl -b /opt/a.txt
 
 
59.文件描述符(fd)
用户通过操作系统处理文件的过程中使用到的交互设备文件,例如:鼠标、键盘、显示器等。查看一个进程有多少个文件描述符的命令是 cat /proc/进程ID/fd
 
60.关于EOF
EOF 本意是 End Of File,表明到了文件末尾。”EOF“通常与”<<“结合用,“<<EOF“表示后续的输入作为子命令或子 shell 的输入,直到遇到”EOF“,再次返回到主调 shell,可将其理解为分界符(delimiter)。
 
61.linux计划任务
在linux下,我们通常通过crontab和at来实现一些周期性的工作,主要是用来生产备份使用的,crond是为了等待处理周期性事件而存在的。
调度任务有两种:系统任务调度和用户任务调度。
at任务的服务是atd,一次性定时任务。
cron 是一个 linux 下的定时执行工具,可以在无需人工干预的情况下运行作业。 crond 命令定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
系统调用系统级别的定时任务的配置文件:/etc/crontab
工作中备份的文件不要放到/tmp,因为过一段时间,系统会清空备/tmp 目录
 
62.日志的管理
在 centos8 中,系统日志消息由两个服务负责处理:systemd-journald 和 rsyslog
系统日志文件概述:/var/log 目录保管由 rsyslog 维护的,里面存放的一些特定于系统和服务的日志文件。
/var/log/wtmp 也是一个二进制文件,记录每个用户的登录次数和持续时间等信息。可以用 last 命令输出 wtmp 中内容: last 显示到目前为止,成功登录系统的记录。
/var/log/btmp 文件是记录错误登录系统的日志。如果发现/var/log/btmp 日志文件比较大,大于1M,就算大了,就说明很多人在暴力破解 ssh 服务,此日志需要使用 lastb 程序查看。
 
63.1)RAID0的应用场景:不太重要,但是访问频繁的数据可以用RAID0
2)RAID1同时写入两个盘,也称为热备,木桶效应。
3 ) 通过type查看一个命令是否是内部命令,还是外部命令
4)exit 退出当前的shell
5 ) export 局部变量变全局变量;env查看系统的环境变量
6)wget -q 安静模式,不输出任何信息的下载
7)在/etc/servers下可以查看所有端口信息
 
64.查找某个命令在某个包
yum --help:找到provides
yum provides 加命令
 
65. df 命令是用来检查linux服务器的文件系统的磁盘空间占用情况
列出文件系统的类型: df-T
用容易读取的形式展示:df -h
以容易读的inode模式展示磁盘:df -ih
66、du 命令是查看linux 文件、目录磁盘空间的占用情况
查看指定文件的大小:du 文件名
查看指定目录的大小:du 目录名
查看总和(s)并且是容易读取的方式:du -sh
容易读取的方式查看所有的文件:du -ah
查看当前文件下所有子目录的文件大小,并且容易读:su -h --max-depth=1
67.sort是在Linux里非常常用的一个命令,管排序的
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后:sort 文件名
数字比较,要用n,倒序用r:sort -nr
68.sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具:
sudo rm -f 123
69. 在linux中有很多方式可以替换大小写字母,你可以选择一个能记住的命令使用,这里选择tr.
tr用于转换或删除文件中的字符。
70.内核参数设置,禁止和开启ping
开启ping:
echo net.ipv4.icmp_echo_ignore_all=0 >> /etc/sysctl.conf
sysctl -p 配置文件生效
禁止ping:
echo net.ipv4.icmp_echo_ignore_all=1>>/etc/sysctl.conf
sysctl -p 配置文件生效
71.如何将终端命令保存到文件中
find / -iname '*.conf' 2>error.txt >true.txt
72.awk的实用例子
1)awk的正则匹配可以用//包含起来;整个文件可以用$0引用
2)显示一个或者多个数字开头的记录
3)BEGIN:用于在处理记录之前执行的操作
END:用于在处理记录之后执行的操作
NF:最后一个数字
73. 计算从1加到100之和
seq 100|awk '{i=i+$1}END{print i}'
 
74.写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。
logname和 who i am 表示当前登陆的用户,如果是$LOGNAME, 如下是大写,表示当前用户
who am i 表示 当前用户
 
75.两个整数求和,没有输入2个数字就退出
 
76.你应该直接用终端,而不是依靠任何shell脚本来进行实数计算。你会怎么做?
解答:echo 1.212 + 2.323|bc
 
77.Shell中uniq与sort -u文本去重的区别
uniq去重,仅作用于相邻行;sort -u去重,作用于全局
 
78.某个目录下有两个文件a.txt和b.txt,文件格式为(ip username),例如:
 
a.txt
127.0.0.1 zhangsan
127.0.0.1 wangxiaoer
127.0.0.2 lisi
127.0.0.3 wangwu
 
b.txt
127.0.0.4 lixiaolu
127.0.0.1 lisi
 
每个文件至少有100万行,请使用linux命令行完成如下工作:
 
1)两个文件各自的ip数,以及总ip数
2)出现在b.txt而没有出现在a.txt的ip
3)每个username出现的次数,以及每个username对应的ip数
 
解答1)
两个文件各自的ip数字:
cat a.txt|awk '{print $1}'|sort|uniq|wc -l
cat b.txt|awk '{print $1}'|sort|uniq|wc -l
总的ip数字:
cat a.txt b.txt|awk '{print $1}'|sort -u|wc -l
解答2)
cat a.txt |awk '{print $1}'>A.txt
cat b.txt |awk '{print $1}'>B.txt
diff B.txt A.txt|grep \<|awk '{print $2}'
解答3)
 awk '{print $2}' 1.txt > name.txt         //先把名字列提出到一个新文件name.txt中
 uniq -c name name.txt                 //再使用uniq命令对name.txt进行重复行统计
sort -u 1.txt | awk '{print $2}' > name1.txt     //先对原ip文件进行Ip和用户名结合去重,并把结果的名字一列写到新文件name1.txt中
 sort name1.txt | uniq -c                      //对name1.txt进行排序,然后运用uniq即可得出结果
 
79.employee文件中记录了工号和姓名
employee.txt:
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
 
bonus文件中记录工号和工资
bonus.txt:
100 $5,000
200 $500
300 $3,000
400 $1,250
要求把两个文件合并并输出如下
 
处理结果:
400 ashok sharma $1,250
100 jason smith $5,000
200 john doe $500
300 sanjay gupta $3,000
 
解答:paste employee.txt bonus.sh |awk '{print $1, $2, $4, $5}'|tr [:upper:] [:lower:]|sort -k 2
 
80.
1)写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
解答:
#!/bin/bash
for filename in `find /tmp -type f -name "yum*"|head -n 100`
do
sed -n '1p' $filename>>/dangjingwei/script/new
done
2)写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
解答: 
diff b.txt a.txt |grep \>|awk '{print $2}' >c.txt
wc -l c.txt
 
81.将域名取出并进行计数排序
解答:awk -F "/" '{print $3}' http.txt |sort -nr|uniq -c
 
82.在shell环境下,如何查看远程linux系统运行了多少时间?
ssh user@ip uptime
 
83.用shell写一个脚本,对文本中无序的一列数字排序,并计算和
sort -n number.txt| awk '{a+=$0;print $0}END{print "sum="a}'
 
84.Shell脚本是什么、它是必需的吗?
答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。
 
85.什么是默认登录shell,如何改变指定用户的登录shell
答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。
chsh 用户名 -s new_default_shell
  
86、监控内存和磁盘容量,小于给定值时报警
 
#!/bin/bash
# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
# 提取根分区剩余空间
disk_size=$(df / | awk '/\//{print $4}')
# 提取内存剩余空间mem_size=$(free | awk '/Mem/{print $4}')
while :
do
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
if [ $disk_size -le 512000 -a $mem_size -le 1024000 ]
then mail ‐s "Warning" root <<EOF
Insufficient resources,资源不足
EOF
fi
done
 
87.写一个脚步查找最后创建时间是3天前,后缀是*.log的文件并删除。
find / -name '*.log' -mtime +3 |xargs rm -f
find / -name '*log' -mtime +3 -exec rm -f {} \;
 
88.写一个脚步将当前目录下大于100K的文件移动至/tmp下。
find ./ -name -size 100k -type f -exec mv {} /tmp/ \;
(xargs -i 参数配合{}即可进行文件的操作)
find ./ -name -size 100k -type f |xargs -i mv {} /tmp/
 
89.写一个脚步将数据库备份并打包至远程服务器 192.168.1.1 /backup 目录下。
dates = `date +%F`
mysqldump -uroot -p123456>/tmp/data/db_$dates.sql
tar -czf /tmp/data/db_$dates.sql.tar.gz /tmp/data/db_$dates.sql
rsync -avz /tmp/data/db_$dates.sql.tar.gz rsync_backup@192.168.1.1::/backup/
 
90.写一个脚步在系统中新建20个用户,用户名是数字1-20
for i in `seq 20`
do
useradd $i
done
 
91.在Linux下,写个shell脚步,统计某目录(如/turbomail/accounts 目录)下所有文件的个数,包括所包含的所有层次子目录。
find /turbomail/accounts -type f|wc -l
 
92.一个目录下有100个文件, 将所有文件中的hello换成hi
sed -i s/hello/hi/g ./*
 
93.用Shell编程,判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下。
read -p "Input a filename : " filename
if [ -b "$filename" -o -c "$filename" ]
then
       echo "$filename is a device file" && cp $filename /dev/ &
else
       echo "$filename is not a device file" && exit 1
fi
 
94.在shell脚本中如何比较两个数字 ? (gt只能比较整数)
#!/bin/bash
if [ $1 -gt $2 ]
then
echo "$1 is greater"
else
echo "$2 is greater"
fi
 
95.比较两个数大小的经典案例
1)传参的方式:
#!/bin/sh
num1=$1
num2=$2
[ $# -ne 2 ] && echo "please enter 2 number2" && exit 1
expr 1 + $num1 &>/dev/null
[ $? -eq 2 ] && echo "please enter one number int" && exit 2
expr 1 + $num2 &>/dev/null
[ $? -eq 2 ] && echo "please enter two number int" && exit 2
[ $num1 -gt $num2 ]&& echo "$num1 > $num2" && exit 0
[ $num1 -eq $num2 ]&& echo "$num1 = $num2" && exit 0
echo "$num1 < $num2"
2)read读入的方式:
#/bin/sh
read -p "enter one number:" num1
read -p "enter tow number:" num2
expr 1 + $num1 &>/dev/null
[ $? -eq 2 ]&& echo "you enter one number is not int" && exit 2
expr 1 + $num2 &>/dev/null
[ $? -eq 2 ]&& echo "you enter two number is not int "&& exit 2
[ $num1 -lt $num2 ]&& echo "$num1 < $num2" && exit 0
[ $num1 -eq $num2 ]&& echo "$num1 = $num2" && exit 0
echo "$num1 > $num2"
 
96.筛选符合长度的单词案例.
利用bash for循环打印下面这句话中字母数不大于6的单词(某企业面试真题)。
  I am oldboy teacher welcome to oldboy training class
#!/bin/sh
for word in I am oldboy teacher welcome to oldboy training class
do
if [ ${#word} -le 6 ]
then
echo $word
fi
done
 
97.批量生成随机字符文件名案例
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下:
#!/bin/sh
[ ! -d /oldbooy ] && mkdir -p /oldboy/
for mulu in {1..10}
do
mid=uuidgen|cut -c 1-10
touch /oldboy/${mid}_oldboy.html
done
 
98.批量改名特殊案例
将以上面试题中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写
#!/bin/sh
for filename in `ls /oldboy/*.html`
do
mv $filename `echo $filename | sed 's#oldboy.html#oldgirl.HTML#g'`
done
 
99.批量创建特殊要求用户案例
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)
#!/bin/sh
for i in {1..10}
do
pass=`uuidgen|cut -c 1-10`
id oldboy$i &>/dev/null
if [ $? -ne 0 ];then
useradd oldboy$i
echo $pass|passwd --stdin oldboy$i &>/dev/null
echo -e "user:oldboy$i pass:$pass">>/tmp/user.log
else
echo "oldboy$i 已存在"
fi
done
 
100.扫描网络内存活主机案例
写一个Shell脚本,判断10.0.0.0/24网络里,当前在线的IP有哪些?
#!/bin/sh
. /etc/init.d/functions
for n in {1..254}
do
ping -c2 -W1 10.0.0.$n &>/dev/null
if [ $? -eq 1 ];then
action 10.0.0.$n /bin/true
fi
done
 
101.脚本实现MySQL数据库分库备份
#!/bin/sh
Myuser=root
Mypass=123456
Mycmd="mysql -u$Myuser -p$Mypass"
Mydump="mysqldump -u$Myuser -p$Mypass -B -R -F -x"
Dlist=`$Mycmd -e "show databases;"|sed '1,2d'|grep -Ev "_schema|mysql"`
for database in $Dlist
do
$Mydump $database |gzip >/tmp/${database}_$(date +%F).sql.gz &>/dev/null
done
 
102.菜单自动化软件部署经典案例
综合实例:打印选择菜单,按照选择一键安装不同的Web服务。
示例菜单:
[root@oldboy scripts]# shmenu.sh
    1.[install lamp]
    2.[install lnmp]
    3.[exit]
    pls input the num you want:
要求:
1、当用户输入1时,输出“startinstalling lamp.提示”然后执行/server/scripts/lamp.sh,脚本内容输出"lampis installed"后退出脚本,工作中就是正式lamp一键安装脚本;
2、当用户输入2时,输出“startinstalling lnmp.提示” 然后执行/server/scripts/lnmp.sh输出"lnmpis installed"后退出脚本,工作中就是正式lnmp一键安装脚本;
3、当输入3时,退出当前菜单及脚本;
4、当输入任何其它字符,给出提示“Input error”后退出脚本;
5、要对执行的脚本进行相关的条件判断,例如:脚本文件是否存在,是否可执行等判断,尽量用上前面讲解的知识点。
#!/bin/sh . /etc/init.d/functions cat<<EOF
===================================
1.[install lamp] 2.[install lnmp] 3.[install nfs] 4.[exit]
===================================
EOF
while true
do
read -p "pls input the num you want:" num
case $num in
1) /bin/sh /server/scripts/lamp.sh
action "startinstalling lamp..." /bin/true
;;
2) /bin/sh /server/scripts/lnmp.sh
action "startinstalling lnmp..." /bin/true
;;
3) /bin/sh /server/scripts/nfs.sh
action "startinstalling nfs..." /bin/true
;;
4) exit ;;
*) echo "对不起,输入错误,请重新输入"
esac
done
 
102.Web服务异常监测案例(任何服务的监控都可以想到端口、进程、wget和curl测试网页运行状态)
1)通过端口
#!/bin/sh
. /etc/init.d/functions
port=`lsof -i:80|grep nginx|wc -l`
if [ $port -ge 2 ];then
action "Nginx is running" /bin/true
else
action "Nginx is not running" /bin/false
/application/nginx/sbin/nginx
action "starting Nginx" /bin/true fi 
2)通过进程
#!/bin/sh
. /etc/init.d/functions
port=`ps -ef|grep nginx|grep -v grep|wc -l`
if [ $port -ge 2 ];then
action "Nginx is running" /bin/true
else
action "Nginx is not running" /bin/false
/application/nginx/sbin/nginx
action "starting Nginx" /bin/true
fi
3)gwet命令
#!/bin/sh
. /etc/init.d/functions
port=`wget -T 5 --spider http://www.baidu.com &>/dev/null`
if [ $? -eq 0 ];then
action "sshd is running..." /bin/true
else
action "sshd is not running" /bin/false
action "sshd is reboot..." /bin/true
fi
4)curl测试网页(测试网页常用命令:curl -s -I -w "%{http_code}\n" -o /dev/null)
#!/bin/sh
. /etc/init.d/functions
port=`curl -s -I -w "%{http_code}\n" -o /dev/null`
if [ $port == "200" ];then
action "ssh is running" /bin/true
else
action "ssh is not running" /bin/false
action "ssh is reboot..." /bin/true
fi
 
103.开发脚本入侵检测与报警案例
监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次。
#/bin/sh
file="/dangjingwei/script/script/djw_2020-06-13"
file_md5=$file/md5.txt
file_boolean=$file/file_boolean.txt
 
function save_file(){
find ${file} -type f -name "scr*"|xargs md5sum >>${file_md5}
}
function check_file(){
count=$(md5sum -w -c ${file_md5}|grep FAILED|wc -l)
}
 
if [ ! -f ${file_md5} ]
then
save_file
check_file
else
check_file
fi
if [ ${count} -gt 0 ]
then
echo "this is not ok $(date +%F-%T)">>${file_boolean}
else
echo "md5 is ok $(date +%F-%T)">>${file_boolean}
fi
定时任务:crontab -l
#*/1 * * * * /bin/sh /dangjingwei/script/script/djw_2020-06-13/script12.sh &>/dev/null
 
104.破解RANDOM随机数案例
已知下面的字符串是通过RANDOM随机数变量md5sum后,再截取一部分连续字符串的结果,请破解这些字符串对应的使用md5sum处理前的RANDOM对应的数字?
21029299
00205d1c
a3da1677
1f6d12dd
890684b
生成密码字典:
#!/bin/sh
for i in {0..32767}
do
   screct=`echo $i|md5sum`
  echo "$i $screct" >>/tmp/file.txt
done
过滤出对应密码字符串:
egrep '21029299|00205d1c|a3da1677|1f6d12dd|890684b' /tmp/file.txt
 
105.创建一个让 root 都无法删除的文件
chattr +i/a 无法修改/只能追加,不能删除
lsattr进行查看
 
106.用shell处理以下内容
1)按单词出现频率降序排序!
2)按字母出现频率降序排序!
the squid project provides a number ofresources to assist users design,implement and support squid installations.Please browse the documentation and support sections for more infomation,byoldboy training.
如下:
1)cat script14.sh |xargs -n1|awk '{f[$1]++} END {for (i in f)print i,f[i]}'|sort -rnk2
2) egrep -o "[a-z]" script14.sh |awk '{f[$1]++} END {for (i in f) print i ,f[i]}'|sort -nrk2

 

107.xfs 文件系统的备份和恢复
  XFS 提供了 xfsdump 和 xfsrestore 工具协助备份 XFS 文件系统中的数据。xfsdump 按 inode顺序备份一个 XFS 文件系统。扩展:
完全备份:每次都把挃定的备份目彔完整的复制一遍,丌管目彔下的文件有没有变化; 如:cp
增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件迚行备份;
差异备份:每次都将第一次完整备份以来有变化的文件迚行备份。如: rsync 备份
1)指定备份时免交互操作,方便后期做定时备份
xfsdump -f /opt/dump_sdb1_v2 /dev/sdb1 -L dump_sdb1_v2 -M sdb1_is_bigdata
2)指定只备份分区中某个目彔
xfsdump -f /opt/xuegod_dump1 -s xuegod /dev/sdb1 -L dump_xuegod -M sdb1
3)查看备份信息不内容
xfsdump -I(字母大写 I)
4)恢复
xfsrestore -f /opt/dump_sdb1 /test/
xfsrestore -f /opt/xuegod_dump1 -s xuegod /var/test/
5)增量备份(先备份,在做如下等级为1的备份)
xfsdump -l 1 -f /opt/test-back1 /test -L test-bak1 -M sdb1
6)增量备份恢复,按着顺序恢复
xfsrestore -f /opt/test-full /test/
xfsrestore -f /opt/test-back1 /test/
 
108.window下打开正常,linux下中文乱码的问题
iconv -f 原编码(gb2312) -t 新编码(utf8) 文件 -o 新创建的文件
 
109.windows和linux串行的问题(软件包lrzsz;上传rz;下载sz)
使用unix2doc或者 doc2unix进行解决
 
110.命令保存在/bin和/sbin目录中,应用程序保存在/usr/bin和/usr/sbin目录中,应用程序文档文件 /usr/share/doc ,应用程序手册页文件 /usr/share/man
 
111.sort   -d   -f   -u fruits.txt       -d  仅考虑字母、数字、空格      -f  忽略大小写    -u 去重
    sort  -t :  -k3  -n /etc/group    -t 字段分界符   -k  可选排序字段  -n 数字进行排序
 
112.fmt:格式化文本段落,使文本不要超过可见的屏幕范围。
  cat  linux.wiki | fmt -w 66  -s     不能查过66个字符,超过不分开字符,自动换行
 
113.join命令: join  empbyee.txt   bonus.txt -a1左连接显示两个文件的内容
 
114.wc -l(行数)    -w(字数)   -c(字符数)
 
115.cut  -d ' ' -f 2,3 record.txt 按空格提取2,3段
 
116.一行行读取文件:while read line; do echo "this is $line";done<文件.sh
 
117.通配符和正则很相似,一个区别是,通配符匹配的是文件名;正则匹配的是文件的内容。
 
118.chgrp  改变文件的用户组
 
119.创建文件或者目录有默认的权限,修改是umash  777,则创建的权限是000,常见的是022,027,077,002对应的是755,750,700,775;文件则是6相减。
 
120.文件比较的命令:comm\diff\vimdiff
 
121.fdosk/cfdisk查看、修改分区表。
 
122.dd if=/dev/zero of=file  bs=50size  count=5
 
123.sed匹配范围
  例子:匹配main函数:sed -n -e ' /main[[:space:]]*(/,/^}/p'   abc.txt|more
124.在sed中为了配置特殊字符,需要用【::】包围起来,因此有【:/:】和【:::】
 
125.awk模式匹配:awk  -F":" '/bash/{print $1}/'   /etc/passwd
 
126.前台转后台,ctrl+z,bg
 
127.日志产生目录,在系统的日志刚刚产生时,存放在/var/log/下面。/var实际是一个硬盘上不存在的目录,位于内存中,这个目录下放了需要的日志,系统运行时,会首先将日志写到这个文件下。
 
128.rpm常用命令:rpm -ivh / rpm -qa  /rpm -e 
 
129.iptables -F清除所有规则来暂时停止防火墙
 
129.自动换行和TAB键设置:vim ~/.vimrc    set ts=2  ai
 
130.伪静态的作用:使搜索引擎,更快更好的搜索。
 
131.curl -i  -s ip地址(-i请求头 -s 静音模式,不输出任何东西)
 
132.Linux killall 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程。kill 命令杀死指定进程 PID,需要配合 ps 使用,而 killall 直接对进程对名字进行操作,更加方便。
 
133.buffer写入缓存,cache读取缓存。
 
134.grep "physical id" /proc/cpuinfo   ;       查看cpu个数(核数)top 按 1
 
135.理解什么是运维?
字面意思是运营、维护。更深层的理解是管理、规范、制度的制定和推广、监督的角色。运维的核心是运维思想,非运维技术本身。比如上百台服务器没有好的管理制度、规范是无法协调工作的。运维宗旨是7*24小时网络稳定、用户体验良好。
 

posted @ 2020-12-06 16:04  小熊尤里  阅读(572)  评论(0编辑  收藏  举报