1.如何查看http的并发请求数与其TCP连接状态?
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'2.如何查看/var/log目录下的文件数?
文件是-开头的权限,目录是d开头
ls /var/log/ -1R |grep "-"|wc -l3.如何查看Linux系统每个ip的连接数?
netstat -n|awk '/^tcp/ {print $5}'|sort|uniq -c|sort -rn4.shell下生成32位随机数
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n15.如何查看二进制文件的内容?
进制查看工具
hexdump、xxd与od
hexdump -C XXX(文件名)
不同的参数有不同的意义
-C 是比较规范的 十六进制和ASCII码显示
-c 是单字节字符显示
-b 单字节八进制显示
-o 是双字节八进制显示
-d 是双字节十进制显示
-x 是双字节十六进制显示
6.介绍下Linux系统的开机启动顺序
加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init依据inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)
–>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了。7.符号链接与硬链接的区别
我们可以把符号链接,也就是软连接 当做是 windows系统里的 快捷方式。
硬链接 就好像是 又复制了一份,举例说明:
ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4都会跟着变,若删除3,4不受任何影响。
ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改4,3也会都跟着变,若删除3,4就坏掉了。不可以用了。8.保存当前磁盘分区的分区表
dd 命令是以个强大的命令,在复制的同时进行转换
dd if=/dev/sda of=./mbr.txt bs=1 count=5129.修改内核参数
vi /etc/sysctl.conf 这里修改参数
sysctl -p 刷新后可用10.限制apache每秒新建连接数为1,峰值为3
#每秒新建连接数 一般都是由防火墙来做,apache本身好像无法设置每秒新建连接数,只能设置最大连接:
iptables -A INPUT -d 172.16.100.1 -p tcp –d port 80 -m limit –limit 1/second -j ACCEPT11.FTP的主动模式和被动模式
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。
于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。
于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。12.显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行
grep "^#[ ^]\{1,\}" /etc/inittab13.显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
grep "\:[0-9]\{1\}:" a.txt 13.怎么把脚本添加到系统服务里,即用service来调用?
vi /etc/init.d/servicename
#!/bin/bash
# chkconfig: 345 85 15
# description: httpd
然后保存
在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
chkconfig --add servicename 创建系统服务
现在就可以使用service 来 start or restart14.写一个脚本,实现批量添加20个用户,用户名为user01-20,密码为user后面跟5个随机字符
#!/bin/bash
#description useradd
for i in `seq -f"%02g" 1 20`;do
useradd user$i
echo "user$i- `echo $RANDOM|md5sum|cut -c 1-5`"|passwd --stdin user$i >/dev/null 2>&1
done15.写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
for ip in `seq 1 255`
do
ping -c 1 10.0.0.$ip &>/dev/null
if [ $? -eq 0 ];then
action "10.0.0.$ip " /bin/true
else
action "10.0.0.$ip" /bin/false
fi
done16.写一个脚本,要求如何:
创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
#bin/bash
url=$1
dir=$2
download(){
cd $dir &>/dev/null
if [ $? -ne 0 ];then
read -p "$dir No such file or directory,create?(y/n)" answer
if [ "$answer" == "y" ];then
mkdir -p $dir
cd $dir
wget $url &>/dev/null
else
return "51"
fi
else
wget $url &>/dev/null
fi
if [ $? -ne 0 ];then
return "52"
fi
}
download17.如何让history命令显示具体时间?
HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S”
export HISTTIMEFORMAT
重新开机后会还原,可以写/etc/profile18.如何过滤出已知当前目录下oldboy中的所有一级目录(不包含子目录,即只能是一级目录)
方法1:find ./ -type d -maxdepth 1
方法2:ls -F
方法3:ls -l | grep ^d19.一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件,如何看?
ls -lrt /etc #最底部的就是最新更新的文件
参数说明:
-r, –reverse #翻转排序
-t #按照修改时间排序20.服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决?
find /app/logs/* -mtime +7 -type f -name “*.log” -exec rm -f {} \; #查找7天以前的日志并删除之21.打印配置文件nginx.conf内容的行号及内容,该如何做?
方法1:cat -n nginx.conf
方法2:less -N nginx.conf
方法3:grep -n . nginx.conf #此处的.(点)号,表示任意单个字符,-n是给过滤出的每一行加行号22.如何查看/etc/services文件有多少行?
方法1:直接使用命令wc
wc -l /etc/services
方法2:给文件内容加行号
cat -n /etc/services | tail -1
方法3:使用sed命令
sed -n ‘$=’ /etc/services
方法4:使用grep命令
grep -n $ /etc/services | tail -123.请过滤出ifconfig中的ip地址?
方法1:ifconfig eth1|grep “inet add”|cut -d’:’ -f2|cut -d’ ‘ -f1
方法2:ifconfig eth1|grep “inet addr”|awk -F: ‘{print $2}’|awk ‘{print $1}’
方法3:ifconfig eth0|awk -F '[ :]+' 'NR==2{print $3}'
方法4:ifconfig eth0|sed -n ‘2p’|sed ‘s#^.*addr:##g’|sed ‘s# Bc.*$##g’24.打印出kaka文件中除掉空行的内容
方法1:grep -v “^$” kaka
方法2:sed ‘/^$/d’ kaka25.打印3天前的日期,格式如:2016-05-06
方法1:date “+%F” -d “3 day ago”
方法2:date “+%F” -d “-3 day”26.编写脚本实现以下功能
每天早上5点开始做备份
要备份的是/var/mylog里所有文件和目录可以压缩进行备份
备份可以保存到别一台器上192、168、1、2 FTP帐号 aaa 密码 bbb
要示每天
的备份文件要带有当天的日期标记
#!/bin/bash
bakdir=mylog
date=`date +%F`
cd /var
tar zcf ${bakdir}_${date}.tar.gz ${bakdir}
sleep 1
ftp -n <<- EOF
open 192.168.142.129 #远程ftp服务器IP
user aaa bbb
put mylog_*.tar.gz
bye
EOF
#添加crontab:
crontab -e
00 05 * * * /bin/bash /root/mylogbak.sh #每天早上5点开始执行备份脚本27.避免从互联网访问MySQL数据库,确保特定主机才拥有访问特权
> GRANT ALL ON *.* TO 'root'@'%';
这其实是完全放开了对root的访问。所以,把重要的操作限制给特定主机非常重要:
> GRANT ALL ON *.* TO 'root'@'localhost';
> GRANT ALL ON *.* TO 'root'@'IP'
> FLUSH PRIVILEGES
此时,你仍有完全的访问,但只有指定的IP(不管其是否静态)可以访问。
创建用户
CREATE USER 'user1'@'%' IDENTIFIED BY 'yourpasswd';28.MySQL设置root用户的口令并改变其登录名
在MySQL控制台中执行:
> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
> UPDATE user SET user="another_username" WHERE user="root";
$ mysqladmin -u root password new_password29.MySQL移除匿名账户和废弃的账户
DROP USER "";
或
DELETE FROM user WHERE user="";30.mysql 主从复制原理
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;31.将文件/etc/a 下中除了 b文件外的所有文件压缩打包放到/home/a下,名字为a.gz
tar -zvcf a.gz /etc/a –exclude=/etc/a/b32.如何查看test进程所打开的所有文件
lsof -u test33.请用iptables控制来自192.168.1.2主机的80端口请求
iptables -A INPUT -p tcp -s 192.168.1.2 –dport 80 -j ACCEPT34.请用shell脚本创建一个组class、一组用户,用户名为stdX X从01-30,并归属class组
groupadd class&&for a in {1..30};do useradd std$a -g class;done35.把文件file1和file2连在一起,然后输出到屏幕上。
cat -n file1file236.patch命令是什么?如何使用?
顾名思义,patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码,
只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里。
创建一个diff文件给patch使用,
# diff -Naur old_file new_file > diff_file
旧文件和新文件要么都是单个的文件要么都是包含文件的目录,-r参数支持目录树递归。
一旦diff文件创建好,我们就能在旧的文件上打上补丁,把它变成新文件:
# patch < diff_file37.cpio命令是什么?
cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表,还可以从中提取文件。38.linux系统中的/proc文件系统有什么用?
/proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。
这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。39.find操作
如何在/usr目录下找出大小超过10MB的文件?
find /usr -size +10M
如何在/home目录下找出120天之前被修改过的文件?
find /home -mtime +120
如何在/var目录下找出90天之内未被访问过的文件?
find /var \! -atime -90
将/usr/local/test目录下大于100K 的文件转移到/tmp 目录下。
find /usr/local/test -type f -size +100k -exec mv {} /tmp \;40.tee 过滤器有什么作用 ?
tee 过滤器用来向多个目标发送输出内容。如果用于管道的话,它可以将输出复制一份到一个文件,并复制另外一份到屏幕上(或一些其它程序)。
linuxtechi@localhost:~$ ll /etc | nl | tee /tmp/ll.out
在以上例子中,从ll输出可以捕获到 /tmp/ll.out 文件中,并且同样在屏幕上显示了出来。41.Linux文件系统变成只读的解决方法
1、重启看是否可以修复(很多机器可以的)。
2、以光盘启动进入救援模式(linux rescue),执行"fsck.ext3 -y /dev/sda2" (假如只读的分区类型为ext3,分区为/dev/sda2)42.在这个月内,每天的早上 6 点到 12 点中,每隔 2 小时创建一个test.txt文件,内容为ok,如何实现?
a、crontab -e 进入编辑模式
b、添加以下内容 0 6-12/2 * 4 * /bin/echo "ok" > test.txt (以4月为例)
c、启动服务 service crontab start;chkconfig crontab on43.Linux下nfs在客户端无法挂载,请写出排查步骤?
a、检查是否是防火墙或selinux的影响
b、检查语法与服务器地址是否错误(只能挂载目录,不能挂载文件)
c、在服务端检查配置文件是否正确及客户端是否有权限访问44.swaSp交换分区是干什么的,如何设置它的大小,500G的内存,swap应设为多少
SWAP交换分区,就是我们课本说讲过的虚拟内存的概念。
当Linux系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
一般来说可以按照如下规则设置swap大小:
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。
实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置SWAP的值。
系统在什么情况下才会使用SWAP?
实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。
cat /proc/sys/vm/swappiness
60
该值默认值是60.
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
现在服务器的内存动不动就是上百G,所以我们可以把这个参数值设置的低一些,让操作系统尽可能的使用物理内存,降低系统对swap的使用,从而提高系统的性能。
如何修改swappiness参数?
临时性修改:
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
这里我们的修改已经生效,但是如果我们重启了系统,又会变成60.
永久修改:
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=1045.查看某个进程是否使用了swap空间
awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps
查看swap空间都被哪些进程使用
#!/bin/bash
function getswap {
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"
}
getswap
#getswap|egrep -v "Swap used: 0"46.raidOl 和 raidlO 的区别
RAID 1+0 (RAID 0 over RAID 1)即先组建RAID 1,然后把组建好的RAID 1 再组建成 RAID 0
RAID 0+1 (RAID 1 over RAID 0)即先组建RAID 0,然后把组建好的RAID 0 再组建成 RAID 1
由于RAID 0+1时,先做RAID 0,没有数据备份,因此数据可靠性来说比RAID 1+0要更差。
由于数据库对磁盘的读写性能和可靠性都有很高的要求,因此采用RAID 1+0 更为合适。47.查看磁盘io的几种方法
第一种:用 top 命令 中的cpu 信息观察
wa 的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。
第二种:用vmstat
vmstat 命令报告关于线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
vmstat 2 5
IO
如果发现等待的进程和处在非中断睡眠状态的进程数非常多,并且发送到块设备的块数和从块设备接收到的块数非常大,那就说明磁盘io比较多。
第三种:用iostat
iostat -dx
r/s 和 w/s 分别是每秒的读操作和写操作,而rKB/s 和wKB/s 列以每秒千字节为单位显示了读和写的数据量
如果这两对数据值都很高的话说明磁盘io操作是很频繁。48.系统负载,1,5,15,参数的合理范围
什么样的Load Average值得警惕(单核)?
Load < 0.7时:系统很闲,马路上没什么车,要考虑多部署一些服务
0.7 < Load < 1时:系统状态不错,马路可以轻松应对
Load == 1时:系统马上要处理不多来了,赶紧找一下原因
Load > 1时:马路已经非常繁忙了,进入马路的每辆汽车都要无法很快的运行
三种Load Average值,应该看哪个(单核)?
通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。
,"load average"一共返回三个平均值:1分钟系统负荷、5分钟系统负荷,15分钟系统负荷;
如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。
如果15分钟内,平均系统负荷大于1.0(调整CPU核心数之后),表明问题持续存在,不是暂时现象。所以,你应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。49.redis单线程为什么效率高
Redis采用的是基于内存的采用的是单进程单线程模型的key/value数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现的。
redis的io模型主要是基于epoll实现的,不过它也提供了 select和kqueue的实现,默认采用epoll。
epoll到底是个什么东西呢? 其实只是众多i/o多路复用技术当中的一种而已,但是相比其他io多路复用技术(select, poll等等),epoll有诸多优点:
1. epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大 ,具体数目可以 cat /proc/sys/fs/file-max 察看。
2. 效率提升, Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select 和 poll 。
3. 内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了。
epoll与select/poll的区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪,能够通知程序进行相应的操作。
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。
poll与select不同,通过一个pollfd数组向内核传递需要关注的事件,故没有描述符个数的限制,pollfd中的events字段和revents分别用于标示关注的事件和发生的事件,故pollfd数组只需要被初始化一次。
epoll还是poll的一种优化,返回后不需要对所有的fd进行遍历,在内核中维持了fd的列表。select和poll是将这个内核列表维持在用户态,然后传递到内核中。与poll/select不同,epoll不再是一个单独的系统调用,而是由epoll_create/epoll_ctl/epoll_wait三个系统调用组成,后面将会看到这样做的好处。epoll在2.6以后的内核才支持。
select/poll的几大缺点:
1、每次调用select/poll,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
2、同时每次调用select/poll都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
3、针对select支持的文件描述符数量太小了,默认是1024
4.select返回的是含有整个句柄的数组,应用程序需要遍历整个数组才能发现哪些句柄发生了事件;
5.select的触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次select调用还是会将这些文件描述符通知进程。
相比select模型,poll使用链表保存文件描述符,因此没有了监视文件数量的限制,但其他三个缺点依然存在。50.运维填空题整理
- 在Linux 系统 中,以文件方式访问设备 。
- Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 。
- Linux 文件系统中每个文件用indoe节点来标识。
- 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i 节点表块 和 数据存储块 。
- 链接分为:硬链接 和 符号链接 。
- 超级块包含了i 节点表 和 空闲块表 等重要的文件系统信息。
- 系统管理的任务之一是能够在分布式 环境中实现对程序和数据的安全保护、备份、恢复和更新。
- 系统交换分区是作为系统虚拟存储器 的一块区域 。
- 内核分为进程管理系统 、 内存管理系统 、 I/O 管理系统 和 文件管理系统 等四个子系统。
- 在Linux 系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统 。
- 硬连接只能建立对文件 链接。符号链接可以跨不同文件系统创建。
- 进程的运行有两种方式,即 独立运行 和 使用父进程运行 。
- 在shell 编程时,使用方括号表示测试条件的规则是:方括号两边必须有空格 。
- 路由选择 协议(RIP)的跳数表示到达目的地之前必须通过的网关 数,RIP 接受的最长距离是 15 跳 。
- /sbin 目录用来存放系统管理员使用的管理程序。
- ping 命令用于测试网络的连通性,ping 命令通过 ICMP 协议(internet 控制信息协议)来实现。
转载并修改自
https://www.cnblogs.com/benjamin77/category/1117956.html
https://www.cnblogs.com/byfboke/articles/8992049.html
https://blog.csdn.net/weixin_41846313/article/details/85199364
https://blog.csdn.net/jiajiren11/article/details/90381703
https://blog.csdn.net/wxy941011/article/details/80274233