Linux面试题完整修订附加答案
册一:
1、Linux挂载Winodws共享文件夹
第一步:先在Windows上创建一个共享目录
Windows系统IP是172.16.18.56;共享文件夹:E:\test
第二步:在linux中运行如下命令:
mount -t cifs -o username=user,password=pass //172.16.18.56/test /mnt
注:/mnt是linux上的目录。user是Windows系统的用户名,pass是Windows系统的密码;
其中-t表示要挂载的类型,cifs是微软提供远程访问的一个协议
另一解:
# mount -t cifs //1.1.1.254/ok /var/tmp/share/ -o username=administrator,password=yourpass
2、查看http的并发请求数及其TCP连接状态:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
3.用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort-nr |head -20
4、统计指定目录的文件个数
find / -type f | wc -l
详解:
ls -l /var/log|grep “^-”|wc -l
统计文件夹:
ls -l /var/log|grep “^-d”|wc -l
5、查看IP连接数
netstat -n | awk ‘/^tcp/ {print $5}’| awk -F: ‘{print $1}’ | sort | uniq -c | sort -rn
6、shell下32位随机密码生成
tr -dc \~\`\!@#\$\%\^\&\*\(\)\-\_\+\=\|\\\?\/\.\>\,\<a-za-z0-9_ <=”" dev=”" urandom|head=”" -c=”" 32|xargs
详解:
cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass
将生成的32位随机数 保存到/pass文件里了
7、统计出apache的access.log中访问量最多的5个IP
cat access_log | awk ’{print $1}’ | sort | uniq -c | sort -n -r | head -5
8、如何查看二进制文件的内容
[root@new55 ~]# echo /etc/passwd | hexdump -C <== 规范的十六进制和ASCII码显示(Canonical hex+ASCII display )
详解:
一般通过hexdump命令 来查看二进制文件的内容。
hexdump -C XXX(文件名) -C是参数 不同的参数有不同的意义
-C 是比较规范的 十六进制和ASCII码显示
-c 是单字节字符显示
-b 单字节八进制显示
-o 是双字节八进制显示
-d 是双字节十进制显示
-x 是双字节十六进制显示等
9、ps aux 中VSZ代表什么意思 RSS代表什么
aux
a 显示所有与终端相关的进程,由终端发起的.
x 显示所有与终端无关的进程.
u 显示用户导向的用户列表.
VSZ: 虚拟内存集,进程占用的虚拟内存空间
RSS :物理内存集,进程战用实际物理内存空间.
S 可中断的睡眠态
R 运行态
D 不可中断的睡眠态
T 停止态
Z 僵死态
10、检测并修复/dev/hda5
e2fsck -p /dev/hda5
详解:
若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查,用法:fsck -P /dev/hda5
11、Linux开机启动顺序
启动顺序:
POST(加电自检)–>由BIOS决定启动设备次序–>MBR(bootloader)–>解压kernel,加载Kernel到内存–>加载init进程(/etc/inittab)
详解:
bios-mbr-kernel-rc.d-kernel module-rc*.d
12、符号链接和硬链接的区别
硬链接:不同路径的文件指定的是同一个inode
硬链接不能跨分区存在
硬链接不能链接到目录(要避免循环引用)
删除硬链接只会减少文件被硬链接的次数,源文件不会动.
软链接:是一个独立的文件,有自己独立的inode
引用的是路径本身,不是inode
删除软链接,跟源文件没任何关系
软链接没有存储任何数据,只是存储了访问文件的另一种路径.
软链接可以对目录创建,也可以跨分区
源文件被删除,软连接将不可用.
详解:
ln
ln -s
符号连接就相当于快捷方式
硬连接就相当于映射
13、保存当前磁盘分区的分区表
# sfdisk -d /dev/sdb >/etc/sdbpar.bak 保存分区表
# sfdisk /dev/sdb
14、检测并自动修复文件系统
e2fsck – check a Linux ext2/ext3 file system
-B 指定块大小
-f 强制检测.
-p 自动修复文件系统
15、手动安装grub
手动安装grub
# grub-install –root-directory=(指定boot目录) DEVICE
或者
grub
grub>root (hd0,0)
grub>setup (hd0)
详解:
在操作系统启动过程中有 一个很重要的引导程序——MBR。MBR是由三段组成的其中最重要的两段:是由446个字
节组成的boot locader(引导加载器),和64个字节的分区表。在MBR的446字节也就是boot locader这段程序对于引导操作系统
很重要。Linux中有两种boot locader可选,一种是LILO,一种就是GRUB。LILO现在已不用了。现在主要是使用GRUB来引导。现
在我们来介绍一下GRUB。
GRUB是两段式的引导,第一阶段称为stage1,是存放在MBR中,主要来引导第二阶段stage2 这段主要放在/boot/grub/中的执
行程序,主要是grub.conf这个文件。下面就介绍两种GRUB的安装
第一种是:当grub.conf这个文件不存在了,我们可以手动编辑。当系统重新启动时会出现一个grub的提示界面;而我们并
不知道系统是在哪个磁盘中,这时我们可以用一命令来试着来找一下,grub>find (hd0,0)/ 用Tab键来查看是否有一个内核版
本,如果有则是在这个磁盘中,反之则查找下一个。找到后可在grub>后输入:root (hd0,0)第二步是在grub>后输入kernel 后
面跟上内核的版本,例如:kernel /vimlinuz-2.6.18-64.el5 ro root=/dev/vol0... quit。第三步是initrd,例如:
grub>initrd /initrd 后面与内核版本相对应。最后是grub>boot 也就是重新启动。启动后在/boot/grub建立一个grub.conf
这样我们的grub就安装成功了。
第二种方式:当grub被破坏掉了。例如我们执行命令#dd if=/dev/zero of=/dev/sda bs=220 count=1 执行后MBR中的boot
locader 就被删掉了。那我们怎样来重装grub呢?这里有两个方法。第一种就是:找一个系统光盘,从光盘启动紧急救援模式
来修复grub。第二种方式就是安装grub到一个磁盘上。其过程是:
第一步是:在一个磁盘上重新化分一个分区,大约有100M左右,
第二步是:把这个分区格式化,#mount ext3 /dev/sdb1
第三步是:创建一目录。#mkdir /mnt/boot 并把上面的分区挂载到这个目录上#mount /dev/sdb1 /mnt/boot
第四步是:创建目录#mkdir /mnt/boot/grub
第五步是:进入到原操作系统i386-redhat目录中,并复制目录下所有文件。 #cd /usr/share/grub/i386-redhat
#cp ./* /mnt/boot/grub
第六步是:回原目录并卸载光盘#cd #umount /dev/sdb1
第七步是:执行grub命令#grub 会出现一个grub界面。逐步输入。
grub>root (hd1,0)
grub>setup (hd1)
grub>quit
经过这七步后我们的grub就成功的安装在了一个新的磁盘上,我们可以新建一个虚拟机并用这个磁盘,启动后就可以看到
grub来引导的界面。
16、改内核参数
# sysctl
-p 不用重启系统,让内核重读/etc/sysctl.conf文件
-a 显示所有内核参数及其正在使用的值.
-w 临时设置/etc/sysctl.conf参数 sysctl -w net.ipv4.ip_froward=0
详解:
由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来
设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这
个文件中,是一个比较好的选择。
首先打开/etc/sysctl.conf文件,查看如下两行的设置值,这里是:
kernel.shmall = 2097152
kernel.shmmax = 4294967295 如果系统默认的配置比这里给出的值大,就不要修改原有配置。同时在/etc/sysctl.conf文
件最后,添加以下内容:
fs.file-max = 6553600
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
这里的“fs.file-max = 6553600”其实是由“fs.file-max = 512 * PROCESSES”得到的,我们指定PROCESSES的值为
12800,即为“fs.file-max =512 *12800”。
sysctl.conf文件修改完毕后,接着执行“sysctl -p”使设置生效。
[root@localhost ~]# sysctl -p 常用的内核参数的含义如下。
kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般为物理内存的一半,不过大一点也没关系,这里
设定的为4GB,即“4294967295/1024/1024/1024=4G”。
kernel.shmmni:表示单个共享内存段的最小值,一般为4kB,即4096bit.
kernel.shmall:表示可用共享内存的总量,单位是页,在32位系统上一页等于4kB,也就是4096字节。
fs.file-max:表示文件句柄的最大数量。文件句柄表示在Linux系统中可以打开的文件数量。
ip_local_port_range:表示端口的范围,为指定的内容。
kernel.sem:表示设置的信号量,这4个参数内容大小固定。
net.core.rmem_default:表示接收套接字缓冲区大小的缺省值(以字节为单位)。
net.core.rmem_max :表示接收套接字缓冲区大小的最大值(以字节为单位)
net.core.wmem_default:表示发送套接字缓冲区大小的缺省值(以字节为单位)。
net.core.wmem_max:表示发送套接字缓冲区大小的最大值(以字节为单位)。
17、在指定范围内取随机数
在指定范围内取随机
echo $[$RANDOM%39] 对39进行取余,余数肯定是39以内的数字.
详解:
#!/bin/bash
#author:ligths
declare -i number=$RANDOM%39+1
echo $number
注:
#! /bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。
$bash $表示系统提示符,$ 表示此用户为普通用户,超级用户的提示符是#,bash是shell的一种,是linux下最常用的一种
shell,$bash的意思是执行一个子shell,此子shell为bash。
18、限定apache每秒钟连接数为1,峰值为3
# iptables -A INPUT -d 172.16.100.1 -p tcp –dport 80 -m limit –limit 1/second –limit-burst 3 -j ACCEPT
19、FTP主动与被动模式
主动模式
1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
被动模式
1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)
2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)
3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
客户端与服务端建立连接,经过TCP三次握手,连接建立完成之后,客户端就可以通过建立的连接通道向服务器发送命令了,服务器根据客户端的命令,向客户端发送数据,发送数据的时候,服务端会再跟客户端建立一个TCP连接,用于专门的传输数据,这个连接就是数据连接。
数据连接有两种工作模式:主动模式和被动模式
主动模式指的是服务器是主动的
被动模式指的是服务器是被动的
主动模式:
服务器端自动打开20号端口,即数据传输端口。主动的去连接客户端的命令端口+1的端口。当数据传输完成后,数据连接自动断开。
被动模式:
服务器端向客户端通知自己打开的端口,通知客户端来连接自己的数据端口,客户端使用命令端口+1的端口,去连接服务器端的数据端口。被动模式下,服务器的数据连接端口使用的是一个随机端口。主动模式服务端使用的是20端口。
20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
# grep “^\#[[:space:]]\{1,\}.\{1,\}” /etc/inittab
21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
# grep “\:[0-9]\{1\}\:” /etc/inittab
22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用
#!/bin/bash
# chkconfig: – 90 10
# description: just a test
echo “Hello,$1″
# mv test /etc/init.d/
# chmod +x /etc/init.d/test
# chkconfig –add test
# service test start
//可以看到Hello,start表示成功
23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符
[root@localhost tmp]# cat Useradd.sh
#!/bin/bash
#description: useradd
for i in `seq 1 20`
do
pwd=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
useradd user$i
echo “user$i$pwd” | passwd –stdin user$i
echo user$i user$i$pwd” >> userinfo.txt
done
24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
#!/bin/bash
for ip in `seq 1 255`
do
{
ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait
25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本;
[root@localhost tmp]# cat checksh.sh
#!/bin/bash
read -p “please input check script-> ” file
if [ -f $file ]; then
sh -n $file > /dev/null 2>&1
if [ $? -ne 0 ]; then
read -p “You input $file syntax error,[Type q to exit or Type vim to edit]” answer
case $answer in
q | Q)
exit 0
;;
vim)
vim $file
;;
*)
3. exit 0
4.
;;
esac
fi
else
echo “$file not exist”
exit 1
fi
26、写一个脚本:
1、创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
[root@localhost tmp]# cat downfile.sh
#!/bin/bash
url=$1
dir=$2
download()
{
cd $dir >> /dev/null 2>&1
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 1> /dev/null 2>&1
if [ $? -ne 0 ]; then
return “52″
fi
else
return “51″
fi
fi
}
download $url $dir
echo $?
27、代码如下:
#!/bin/bash
#Author: MOS
#Script name: funPart.sh
#Date & Time: 2012-10-10/12:20:53
#Version: 1.0.1
#Description:
# Disk_Mod(){
#使用if匹配模式,使用for循环判断是否存在,如果有,则取其绝对路径,跳出循环,如果不匹配或文件不存在,跳出函数,返回66
if [[ -n $1 && $1 =~ "/dev/sd[a-z]” ]];
then local Darray=(`ls /dev/sd[a-z]`)
for i in ${Darray[*]};do
[[ "$i" == "$1" ]] && Sd=$i && break
done
else
return 66
fi
#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环
while :;do
read -p “Warning!!!This operation will clean $Sd data. Next=y,Quit=n [y|n]: ” Choice
case $Choice in
y)
dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null && break || return 67 ;; n)
exit 88 ;;
*)
echo “Invalid choice,please choice again.” ;;
esac
done
#使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍 echo -e “n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n”|fdisk /dev/sdb &> /dev/null || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69
`partprobe` Part=`fdisk -l /dev/$Sd|tail -2|cut -d” ” -f1`
for M in ${Part[*]};do
! mke2fs -j $M &> /dev/null && ErrorPart=$M && return 69
done
return 0
}
#下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。
Disk_Mod $1
Res=$?
[ $Res -eq 0 ] && exit 0
[ $Res -eq 66 ] && echo “Error! Invalid input.”
[ $Res -eq 67 ] && echo “Error! Command -> dd <- Faild.”
[ $Res -eq 68 ] && echo “Error! Command -> fdisk <- Faild.”
[ $Res -eq 69 ] && echo “Error! Command -> mke2fs <- Faild.”
册二:
1.站点根目录下查找是否被放置webshell木马根据语句判断是不是PHP木马脚本
# find /storage/www/ -name "*.php" | xargs grep -in --color "eval("
# grep -i --include='*.php' -r system\s*\( /storage/www/
2.统计访问日志中来自同ip出现的次数分析盗链、攻击、机器人
# cat access.log |awk '{print $1}'| sort | uniq -c |sort -rn
3.分析出现次数最多的ip对网站的具体数据访问情况
# grep -e IP access.log > filename
# cat filename |awk '{print $8}'|sort|uniq -c|sort -rn
4.访问次数最多的文件或页面,取前20
# cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
5.列出传输最大的几个exe文件(分析下载站的时候常用)
# cat access.log |awk '($7~/\.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20
6.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
# cat access.log |awk '($10 > 200000 && $7~/\.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
7.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
# cat access.log |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
8.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
# cat access.log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
9.列出传输时间超过 30 秒的文件
# cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
10.统计网站流量(G)
# cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
11.统计404的连接
# awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort
12. 统计http status.
# cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
# cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
13.查找挂马内容进行批量清除
# find /webbase/ -type f -exec grep 'www.800816.com.cn' -l {} \;
# sed -i "s/body{.*www.800816.com.cn.*}//g" `grep www.800816.com.cn -rl ./`
14.批量转换GBK为UTF-8文件编码
# find default -type d -exec mkdir -p utf/{} \;
# find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \;
15.find查找文件的时候怎么避开多个文件目录
# find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "*.txt" -print
16.查看tcp的并发请求数及其TCP连接状态:
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
# netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
# netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
# netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
# netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
17.查找请求数前20的IP(常用于查找攻来源)
# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
# netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n10
18.查看有多少个活动的php-cgi进程
# netstat -anp | grep php-cgi | grep ^tcp | wc -l
19.查找较多time_wait连接
# netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
20.找查较多的SYN连接
# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
21.根据端口列进程
# netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
22.抓包用来防止80端口被人攻击时可以分析数据
# tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts
23.用tcpdump嗅探80端口的访问看看谁最高
# tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
24.查看是哪些蜘蛛在抓取内容。
# /usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
25.按域统计流量
# zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s\t%d\n",domain,trfc[domain]}}'
26.查看数据库执行的sql
# /usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
27.将匹配Root一行中no替换成yes
# sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config
28.去掉第一列
# awk '{for(i=2;i<=NF;i++) if(i!=NF){printf $i" "}else{print $i} }' list
29.按内存从大到小排列
# ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
30.按cpu利用率从大到小排列
# ps -e -o "%C : %p : %z : %a"|sort -nr
31.怎样知道某个进程在哪个CPU上运行
# ps -eo pid,args,psr
32.清除僵死进程。
# ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
33.查看硬件制造商
# dmidecode -s system-product-name
34.查找占用磁盘IO最多的进程
# wget -c http://linux.web.psi.ch/dist/scientific/5/gfa/all/dstat-0.6.7-1.rf.noarch.rpm
# dstat -M topio -d -M topbio
35.检查I/O使用率(%util)是否超过100%
# iostat -x 1 2
36.磁盘空间,检查是否有分区使用率(Use%)过高(比如超过90%) 如发现某个分区空间接近用尽,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录:
# df -h
# du -cks * | sort -rn | head -n 10
37.CPU负载检查前三个输出值是否超过了系统逻辑CPU的4倍。
# cat /proc/loadavg
38.CPU的数量
# cat /proc/cpuinfo |grep -c processor
39.检查网络流量(rxbyt/s, txbyt/s)是否过高
# sar -n DEV
40.每隔1秒显示一下网络流量
# watch -n 1 "/sbin/ifconfig eth0 | grep bytes"
41.批量覆盖目录下的文件不用确定是否执行
# \cp -rf /svn/wwwroot /wwwroot
42.调试命令
# strace -p pid
43.跟踪指定进程的PID
# gdb -p pid
44.查看当前进程打开了多少个文件句柄
lsof -n |awk ‘{print $2}’|sort|uniq -c |sort -nr|more
册三:
ls –l a 列出所有命令
cd 进入当前目录
cd.. 上级目录
cd. 当前目录
cat 显示文件内容
echo+内容 > 文件名 (写内容)
mkdir 创建新目录
mkdir –p 一次创建目录及子目录
mkdir “ “ 创建带空格的目录
rmdir 删除空目录
rm –rf 删除不为空的目录
rm –r 不提示删除(递归
file 查看文件类型
touch 创建文件更改时间
cp 复制文件
mv 文件到目录移动或生命名
find (.)-name 文件名 查找文件
more 查找更多命令(可翻页)
less 分页、反复阅读
head 显示文件头部
tail 显示文件尾部
ls /media/cdrom/ 读取光盘内容
fdisk –l 列出所有的存储设备
ls/dev/cdrom –l 查看磁盘分区
mount –t +光盘格式/设备/设备放在哪个目录去读(光盘的挂载)
umount /mnt (目录名) 卸载(不能卸载使用中的)
eject 弹出 eject –t 收回
mount -o loop -t 可直接持载到文件系统中直接使用
adduser 添加用户
passwd(用户) 修改用户密码
userdel -r 删除用户
usermod 修改用户属性 -L 锁定 -U 解锁
groupadd 添加用户组
groupdel 删除组
usermod –g +人名 加入组
chmod 更改用户操作权限
chown 修改文件的属主和属组
第三章
:e +文件名 打开另一个文件夹
:e! +文件名 不保存打开另文件夹,放弃修改
:r +文件名 切换到另一个文件夹
:w +文件名 另存为个文件
:q 未修改退出
:wq 保存并退出
:q! 不保存强制退出
:m,ny 第m行到时第n 行复制
:s/old/new 替换(当前行的第一个)
:s/old/new/g 行内全部替换
:m,ns/old/new 在m-n行区域内替换
:%s/old/new/g 整个文件内替换
:s/old/new/c 提示 确认
:args 显示多文件信息
:next : prev 前后切换多文件
:first :prev(!) 定位首尾文件
:ctrl +^ 快速文件切换
^ 跳转到行首 $ 跳转到行尾
W 光标所在的后一个单词的首字母 b 前一个单词的首字母
e 后一个单词的尾字母 1G 跳到文件首行
G 尾行 #G 跳到第#行
i 当前光标处插入 a 光标后插入
A 行末插入 o 下面插入新行
O 上面插入新行 cw 删除光标所在单词尾部字符
c$ 删除光标到行尾的字符 c^ 光标前到行首的字符
Home 跳转行首 End 跳转到行尾
Page up 向上翻页 Page Down 向下翻页
Backspace 删除光标前字符 Delete 删除光标位置
x 删除光标外单个字符 dd 删除所在行
dw 删除光标前字符到单词尾 de 删除当前字符到行尾
d$ 删除当前字符到行尾 d^ 删除字符到行首
J 合并当前行和下一行内容 dd+p 剪切
u 取消最近一次的操作 U 取消所有操作
Ctrl+R 对U命令的撤消进行恢复 yy 复制整行
yw 复制当前光标到单词尾字符 y$ 复制光标到行尾
y^ 复制光标到行首 P 粘贴
/ 自上而下的查找 ? 自下而上的查找
第四章
Bash的主要功能
方便的命令编辑环境
有补全功能
查看历史功能
别名功能
查看功能
自定义功能键
丰富了变量类命令与控制结构
shell 变量
Ctrl+D 注销修改的环境,
set 查看环境
常用的环境变量:
USER 显示当前用户的登录名称
UID 显示当胆用户号
SHELL 表示当前用户的登录shell
HOME 表示法前用户的登录目录
PATH 当前用户的命令搜索路径
PS1 用户主提示符
PS2 用户辅提示符默认为“>”
环境变量的配置文件:
/etc/bashrc /etc/profile 全局
/.bash_profile /.bashrc 用户
预定义变量
$# 位置参数的数量
$* 位置参数的内容
$? 命令执行后返回的状态,0为正确,非常感谢为错误
$$ 当前的进程号
$! 后台运行的最后一个进程号
$0 当前执行的进程名
用户自定义变量
export 输出变量为全局变量
unset 清除用户的变量
Ctrl +U 删除当前光标到行首
Ctrl + K 删除当前光标到行尾
history 查看命令历史
history – c 清除历史命令
命令别名保存在 /etc/profile.d/
alias 查盾命令别名
alias name=value…… 定义命令别名
unalias –a 取消所有的别名
wc 计算文件中的字符数,单词数和行数
输入重定向 “<”
输出重定向 “>”
错误重定向 “2>”
累加 “>>”
错误累加 “2>>”
输出和错误输出重定向 “&>”
管道符 “|” 例:|more |grep
第五章
Linux中的基本命令放在/bin和/sbin
Linux应用程序的可执行文件放在/usr/bin和/usr/sbin
变通执行程序放在/usr/bin
服务器执行程序在/usr/sbin
应用程序配置文件在/etc下
应用程序文档文件在/usr/share/doc
手册页文件在/usr/share/man
rpm –q 查询
rpm –qa 查询所有软件包
rpm –qa | grep 查包含某字符的包
rpm –qi 查询详细信息
rpm –ql 查询文件列表
rpm –qf + 绝对路经 查所属的软件包
rpm – qpi 指定查询没安装过的包的详细信息
rpm –qpl 显示包含的东西
prm –i 安装RPM软件包
rpm –ivh 安装RPM软件包同时显示详细信息
rpm – e 卸载软件包
rpm -U 升级软件包
编译应用程序前的准备工作
确认系统中已经安装了编译环境
rpm –qa | grep gcc
下载prozilla程序的源代码安装包文件
wget 网址
释放已下载的源代码软件包文件
tar jxf +软件包名称
编译前的配置
./configure –prefix=程序安装目录的绝对路径
编译与安装
make 编译
make install 安装
启动包管理程序 system-config-packages
第六章
Linux 系统中的运行级别
0 关机 1 单用户模式
3 多用户模式 4 未分配
5 图形登录的多用户模式 6 重启
runlevel 显示系统当前运行级别
init 改变运行级别
chkconfig –list 查看服务启动状态
chkconfig –level 设置服务启动状态
ps –aux 查看静态进程
top 查看动态进程
pstree 查看进程树
Ctrl+Z 把当前运行的进程调入后台
jobs 查盾后台的进程
fg [后台进程号] 将后台的进程恢复到前台运行
kill [-9] PID 终止进程
killall 进程名 终止改名的所有进程
service crond starus 查询服务状态
service crond stop 停止服务
service crond start 启动服务
service crond restart 重启服务
crontab -l 查看用户cron任务
crontab 编辑任务
crontab -e 用vi编辑器编辑任务
crontab -r 清空任务
设置磁盘配额的步骤
修改”fstab”文件 vi /etc/fstab 在需要配置quota的分区装载设置中添加”usrquota””grpquota”选项
重新挂载文件系统 reboot
创建配额文件 quotacheck –cmug +分区
设置配额 edquota –u edquota –g
查看配额 quota –u quota –g
quotacheck –mfvug / 检测
edquota –t 限制时间
tar cf tar文件名 归档文件 tar czf tar.gz文件名 压缩备份文件
tar tf tar文件名 查看归档文件 tar tzf tar.gz文件名 查看压缩备份文件
tar xf tar文件名 释放tar备份文件 tar xzf tar.gz文件名 恢复压缩的tar备份文件
tar xf tar文件名 –C 目录名 恢复归档文件到指定目录 tar xzf tar.gz 文件名 –C 目录名 恢复压缩归档文件到指定目
录
第七章
普通用户
/sbin/ifconfig 用户查看网络接口设备及ip地址
/sbin/ifconfig eth0 查看指定网络接口信息
/sbin/ifconfig –a 查看所有风格接口信息
/sbin/route 查看主机路由信息
ping /traceroute + 地址 杳看连通性
ping –c 数量 地址 ping 几次
hostname 查看主机名
nslookup 显示当前默认的DNS
dhclient 自动获得IP地址
ifconfig eth0 IP地址 netmask make地址 配置ip地址
route del default gw 网关 删除默认网关路由
route add default gw 网关 添加默认网关
netconfig 使用工具进行网络配置
service network resrart 重启接口服务
/etc/init.d/network 重启接口服务
ifdown +网络接口名 停用网络接口
ifup +网络接口名 启用网络接口
/etc/sysconfig/network-scripts/ifcfg-eth0 网络接口配置文件
/etc/sysconfig/network 主机名配置文件
/etc/hosts 主机名解析文件
/etc/resolv.conf 域名服务器配置文件
第八章
rpm –q nfs-utils portmap 查询是否安装软件包nfs-utlis 和portmap
服务器NFS的配置文件保存在/etc/exports
exports 文件的格式:
nfs 共享目录名称 客户端主机地址 设置选项
例: /var/ftp * (sync,ro)
客户端主机地址:指定IP地址、指定域定、指定网段、指定域下、所有主机
设置选项:sync同步、ro只读、rw读写
service 服务程序名称 starus 查看服务器状态
service portmap/nfs restart/srart/stop 重启/启动/关闭服务
showmount –help 帮助信息
showmount 显示主机的NFS 服务器信息
showmount –e 显示NFS服务器的输出目录列表
showmount –d 显示NFS服务器中被挂载的共享目录
showmount –a 显示服务器客户机被挂载的共享目录
exportfs –rv 重新输出所有目录
exportfs –auv 停止输出所有目录
exportfs –av 启用输出所有目录
mount –t nfs NFS服务器地址:共享目录 本地挂载点 挂载NFS共享目录
mount | grep mnt 显示挂开的共享目录
umount /mnt/ 卸载共享目录
/etc/fstab 系统自动挂载
cp -dpr /media/cdrom/ * /var/ftp/pub/ 网络安装
Linux面试题完整修订附加答案的更多相关文章
- Linux面试题汇总答案
转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的 ...
- Linux面试题汇总答案(转)
转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的 ...
- linux面试题及答案
http://www.cnblogs.com/itech/archive/2011/02/12/1952857.html 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linu ...
- Linux面试题(史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 史上最全Linux面试题(2020最新版)
作者:ThinkWon 链接:https://blog.csdn.net/thinkwon/article/details/104588679 导读:本文整理了最新的Linux面试题,近3万字,约10 ...
- linux篇-linux面试题汇总
Linux经典面试题,看看你会几题? 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统 ...
- linux 笔试题
一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来 ...
- linux面试题1
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识. ...
- linux指令大全(完整篇)(转)
http://blog.chinaunix.net/uid-9681606-id-1998590.html linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类: ...
随机推荐
- Linux内核网络数据包处理流程
Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO. ...
- SQL Prompt 格式化SQL会自动插入分号的问题
一.问题 安装新版SQL Prompt,格式化SQL都会自动在SQL末端插入分号 格式化前 格式化后 二.解决方法 选择SQL Prompt下的Options... 选择左侧的Format下Style ...
- WebSocket 学习笔记
WebSocket 学习笔记 来自我的博客 因为项目原因需要用到双工通信,所以比较详细的学习了一下浏览器端支持的 WebSocket. 并记录一些遇到的问题. 简介 WebSocket 一般是指浏览器 ...
- 前端面试绝对会考的JS问题!【已经开源】
写在前面 [前端指南]前端面试库已经开源,正在完善之中 [x] css问题 [x] html问题 [x] javascript问题 github地址 https://github.com/nanhup ...
- spring-mvc junit测试
import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; impor ...
- python基础知识02-序列类型的方法
列表的方法: 增:append() insert() extend()只能添加序列类型. .改li[0]= '123' li.insert(2,'123') 2个参数,位置,值 li.remove(' ...
- 读书笔记之《编程小白的第1本Python入门书》
本书电子版下载地址:百度网盘 写在前面:你需要这本书的原因 有没有那一个瞬间,让你想要放弃学习编程? 在我决心开始学编程的时候,我为自己制定了一个每天编程1小时的计划,那时候工作很忙,我只能等到晚上9 ...
- python 装饰器模拟京东登陆
要求: 1.三个页面:主页面(home).书店(book).金融页面(finance)2.有两种登陆方式:主页面和书店页面使用京东账户登陆,金融页面使用微信账户登录2.输入:1 ,进入主页面,以此类推 ...
- python直接赋值、深浅拷贝实例剖析
根据数据类型分为两部分进行剖析: int.str类型 list.tuple.dict类型等 1. int.str类型 [int类型实例] >>> import copy ...
- RF新手常见问题总结--(基础篇)
1. 经常有人问这个元素找不到,一般先排除这两个地方,再自己找找A:是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx)B: 仔细查查,这个元素是否进入到另一个f ...