1、创建一个10G分区,并格式为ext4文件系统;
(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
答:
① 分区
fdisk-l /dev/sdb //查看准备硬盘
fdisk/dev/sdb
② 格式化
mke2fs-t ext4 -L 'MYDATA' -b 2048 -m 2 /dev/sdb1
③ 挂载
echo"/dev/sdb1 /data/mydata ext4 defaults,acl 0 0" >> /etc/fstab
mount -o noatime,noexec /dev/sdb1 /data/mydata/
2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
答:
① 分区
fdisk /dev/sdb
② 格式化
mkswap /dev/sdb2
③ 激活所有swap分区
swapon -a
3、写一个脚本
(1)、获取并列出当前系统上的所有磁盘设备;
(2)、显示每个磁盘设备上每个分区相关的空间使用信息;
答:
#!/bin/bash
for disk in $(fdisk -l | grep -o"^Disk /dev/sd[a-z]" | cut -d' ' -f2);do
echo $disk
declare -i i=1
while [ $i -le $( fdisk -l $disk | grep "^/dev/sd[a-z][0-9]" |wc -l) ];do
df -Th ${disk}${i} | tail -1 | awk '{print $1,$6}'
let i++
done
echo
done
4、总结RAID的各个级别及其组合方式和性能的不同;
答:
常用RAID级别:
RAID1: 硬盘镜像,至少2块硬盘,数据会在所有硬盘上保存一份,写入性能下降,读取性能有所提高,只要硬盘没有全部坏,数据就不会丢失
RAID 5: 至少3块硬盘,其中一块硬盘的容量用于做数据校验,因此可用容量为n-1块硬盘,可用允许任意一块硬盘损坏,数据不会丢失。写入性能稍微有些下降,读取性能有所提高
RAID 6: 至少4块硬盘,原理和RAID 5相同,使用2块硬盘容量做数据校验,可用容量为n-2,可允许坏两块硬盘
常用RAID组合:
RAID 1+0: 至少4块硬盘,先两两一组做RAID1,之后在RAID1基础上做RAID0,可以提高读写性能。必须保证各组RAID1里至少有一块硬盘完好,否则所有硬盘的数据会丢失
RAID 5+0: 至少6块硬盘,先每3块一组做RAID5,之后在RAID5基础上做RAID0,每组RAID5中最多只能坏1块硬盘,否则所有硬盘的数据会丢失
5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
答:
① 分区
fdisk /dev/sdb
② 创建RAID1
mdadm -C /dev/md0 -l 1 -a yes -c 128 -n 2 -x 1/dev/sdb{1,2,3}
6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
答:
① 准备三个分区
fdisk /dev/sdb
② 创建RAID5
mdadm -C /dev/md1 -l 5 -a yes -c 256 -n 3 /dev/sdb{1,2,3}
③ 分区并挂载
mkdir /backup
mkfs.ext4 /dev/md1
echo "/dev/md1 /backup ext4 defaults,acl,noatime 00" >> /etc/fstab
mount -a
7、写一个脚本
(1) 传递两个以上字符串当作用户名;
(2) 创建这些用户;且密码同用户名;
(3) 总结说明共创建了几个用户;
答:
#!/bin/bash
declare -i sum=0
for user in $@;do
id $user &> /dev/null && continue
useradd $user && echo "$user" | passwd --stdin $user&> /dev/null
[ $? -eq 0 ] && let sum++
done
echo "add $sum users success"
8、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;
答:
#!/bin/bash
for file in /etc/rc.d/rc.sysinit/etc/rc.d/init.d/functions /etc/fstab; do
sum=$(grep "^#" $file | wc -l)
space=$(grep "^[[:space:]]*$" $file | wc -l)
let totalSum+=$sum
let totalSpace+=$space
done
echo "#开头的行一共有$totalSum,空白行一共有$totalSpace"
9、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;
答:
#!/bin/bash
declare -a userWithExgroup
for user in $(cut -d: -f 1 /etc/passwd);do
if id $user | cut -d' ' -f3 | grep "," &> /dev/null;then
userWithExgroup[${#userWithExgroup[@]}]=$user
fi
done
for user in ${userWithExgroup[@]};do
echo $user
done
echo "Total is${#userWithExgroup[@]}"
10、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;
答:
① 创建两个分区,标识为8e
fdisk /dev/sdb
② 创建PV
pvcreate /dev/sdb{1,2}
③ 创建VG
vgcreate -s 8MB vg0 /dev/sdb{1,2}
④ 创建LV
lvcreate -L 5G -n mylv1 vg0
⑤ 格式化并挂载
mkfs.ext4 /dev/vg0/mylv1
mkdir /users
echo "/dev/vg0/mylv1 /users ext4 defaults,acl 00" >> /etc/fstab
mount -a
11、扩展mylv1至9G,确保扩展完成后原有数据完全可用;
答:
① 准备数据
cp /etc/fstab /users/
② 扩展LV
lvextend -L +4G /dev/vg0/mylv1
③ 调整分区容量
resize2fs /dev/vg0/mylv1
④ 验证
12、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
答:
① 卸载
umount /users/
② 检查分区
e2fsck -f /dev/vg0/mylv1
③ 调整分区容量
resize2fs /dev/vg0/mylv1 7G
④ 缩减LV大小
lvreduce -L -2G /dev/vg0/mylv1
⑤ 重新挂载
mount /dev/vg0/mylv1 /users/
⑥ 验证
13、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;
答:
① 创建快照
lvcreate -s -L 512M -n mylv1-snap -p r /dev/vg0/mylv1
② 挂载快照
mkdir /snap
mount /dev/vg0/mylv1-snap /snap
③ 备份数据
mkdir /backup
cp -a /users/ /backup/
14、 如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
答:
① 给主机分配一个可用的IP地址,如192.168.1.101/24
② 修改网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0 //配置文件名和网卡名对应
③ 重启网络服务:
service network restart //Centos6上的重启命令
systemctl restart network //Centos 7上的重启命令
15、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
答:
配置IP的命令:
ifconfig
ifconfig -a //查看所有网卡信息
ifconfig eth0 up | down //启用或关闭接口
ifconfig eth0 192.168.1.101/24 up //给网卡设置IP和掩码并启用该网卡
ifconfig eth0 promisc //启用混杂模式
ifconfig eth0 -promisc //取消混杂模式
IP
ip link show //查看所有网卡的物理属性
ip link show up //只显示处于开启状态的网卡信息
ip link set dev eth0 up | down //启用或关闭接口
ip addr //查看所有网卡的网络属性
ip addr add 192.168.1.102/24 dev eth0
//给网卡添加一个ip地址,使用ifconfig无法看到新添加的ip地址
ip addr add 192.168.1.103/24 dev eth0 label "eth0:0"
//添加新ip并标记label,使用ifconfig可以看到eth0:0的ip
ip addr del 192.168.1.103/24 dev eth0 //删除ip
setup(Centos 6专用)
nmcli
nmcli dev show //查看所有网卡信息
nmcli dev show eth0 //查看指定网卡信息
nmcli connection modify eth0ipv4.addresses 192.168.1.224/24
//修改网卡的ip地址,该命令直接修改配置文件,修改后需要重启下网络服务才会生效
nmcli connection modify eth0 +ipv4.addresses 192.168.1.234/24
//添加一个ip地址,需要重启网络服务
nmcli connection modify eth0 -ipv4.addresses192.168.1.224/24
//减少一个ip地址,需要重启网络服务
nmcli connection modify eth0 ipv4.gateway 192.168.1.1
nmcli connection modify eth0 ipv4.dns 192.168.1.1
nmcli connection modify eth0 +ipv4.dns 8.8.8.8
//设置网关和dns以及辅助dns,需要重启网络服务
nmtui(Centos7 专用)
配置路由的命令:
route
route -n //查看路由信息
route add -net 172.16.2.0 netmask 255.255.255.0 gw192.168.1.1 dev eth0
//添加路由信息,目标为172.16.2.0/24网段,网关为192.168.1.1,使用eth0接口
route add -host 172.16.3.2 gw 192.168.1.1 //目标为单一的主机
route del -host 172.16.3.2 gw 192.168.1.1
route del -net 172.16.2.0 netmask 255.255.255.0 gw192.168.1.1
//删除相应的路由条目
route add default gw 192.168.1.1 //设置默认路由
IP
ip route list //查看路由表
ip route add 172.16.4.0/24 via 192.168.1.1 //添加路由条目
ip route del 172.16.4.0/24 via 192.168.1.1 //删除路由条目
ip route add default via 192.168.1.1 //添加默认路由
netstat
netstat -rn //查看内核路由表,以数字格式显示
直接修改配置文件(需要重启网络服务)
vim /etc/sysconfig/network-scripts/route-eth0 //指定相应的接口,需要重启网络服务
查看端口的命令:
netstat和 ss(效率比netstat高)
-t //tcp协议的端口
-u //udp协议的端口
-w //rawsocket相关的端口
-l //处于listen的端口
-a //显示所有状态的端口
-n //以数字格式显示ip和端口
-e //以扩展格式显示
-p //显示相关进程及PID
常用组合: -tan, -uan, -tanl, -uanl, -tanlp, -uanlp
设置dns:
vim /etc/resolv.conf //需要重启网络服务
设置主机名
hostname //查看主机名
hostname webserver01 //修改主机名
vim /etc/sysconfig/network //Centos6修改配置文件,重启后生效
vim /etc/hostname //Centos 7修改配置文件
16、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
在线的主机使用绿色显示;
不在线的主使用红色显示;
答:
#!/bin/bash
net='172.16.250'
for i in {1..254};do
if ping -c 1 -w 1 ${net}.${i} &> /dev/null;then
echo -e "\033[32m ${net}.${i} is up \033[0m"
else
echo -e "\033[31m ${net}.${i} is down \033[0m"
fi
done
17、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
答:
ps(查看进程信息)
ps -aux //查看所有进程信息
VSZ: 虚拟内存集
RSS: 常驻内存集
STAT:
R: running
S: 可中断的睡眠状态
D: 不可中断的睡眠状态
T: 停止状态
Z: 僵死状态(被销毁前的状态)
+: 表示为前台进程
l: 多线程进程
N: 低优先级进程
<: 高优先级进程
s: session leader
START: 进程启动时间
TIME: 进程占据CPU的累积时长
ps -eFH //以树状显示进程间的层次关系
ps -axo //自定义需要显示的信息
ps -axo uid,pid,ni,pri,psr,rtprio,cmd | head -2
NI: nice值
PRI: 优先级
PSR: 显示工作在哪个CPU核心上
rtprio: 实时优先级
pgrep
pgrep -a httpd
pgrep -au root //根据指定的有效用户查看进程信息
pgrep -aU root //根据指定的真实用户查看进程信息
pgrep -aP 1 //把给定的PID作为父进程的进程列表
pstree //以树状查看进程信息
top (查看进程实时信息)
top -d 3 -b -n 2 //指定刷新时间为3秒,以批次方式显示,显示2批次信息
top //查看实时的动态信息
htop(需要使用epel源安装)
htop -d 3 -u root -s TIME
//指定刷新时间为3秒,只显示root的进程,根据TIME字段排序
vmstat(报告虚拟内存状态)
vmstat //显示当前信息的快照
procs:
r: 等待运行的进程的个数
b: 处于不可中断睡眠的进程个数(被阻塞的队列长度)
memory:
swpd: 交换内存的使用总量
free: 空闲物理内存的总量
buffer: 用于buffer内存的总量
cache: 用于cache内存的总量
swap:
si: 数据进入swap中的速率(kb/s)
so: 数据离开swap中的速率(kb/s)
io:
bi: 从块设备读取数据到系统的速率(kb/s)
bo: 保存数据到块设备的速率(kb/s)
system:
in: 中断速率
cs: 进程切换速率
CPU:
us: 用户使用比例
sy: 内核使用比例
id: 空闲比例
wa: 等待IO完成的比例
st: 被虚拟化技术偷走的比例
vmstat 2 5 //每2秒输出一次信息,共输出5次
vmstat -s //显示内存详细信息
dstat(用于生成系统资源统计数据,需要安装)
dstat 3 //每3秒更新一行数据
dstat -C 0,1 //分别显示相应的CPU核心的数据
dstat -D sda //分别显示相应硬盘的数据
dstat -m //显示内存相关数据
dstat -p //显示进程相关数据
dstat -s //查看swap相关数据
dstat --tcp //查看tcp连接相关数据
dstat --udp //查看udp连接相关数据
dstat --top-cpu //查看当前最占用CPU的进程
dstat --top-io //查看当前最占用IO的进程
dstat --top-mem //查看当前最占用内存的进程
dstat --top-latency //查看当前延迟最大的进程
pmap (查看某一进程的内存映射表)
pmap -x 1 //查看1号pid的内存映射表
glances(需要安装)
glances -t 3 //指定刷新时间为3秒
glances -f . -o <HTML | CSV> //将报告导出到当前目录,格式可选择HTML或CSV
glances -s -B 192.168.1.203 //作为服务端运行,绑定相应的IP地址
glances -c 192.168.1.203 //可以获取指定服务器上的glances数据
kill (向进程发送控制信号)
kill [-signal] PID //向指定PID发送控制信号
signal:
1)SIGHUP: 重新读取配置文件,不会关闭进程
2)SIGINT: 中止正在运行的进程,相当于Ctrl+c
9) SIGKILL: 杀死正在运行的进程
15)SIGTERM: 安全结束正在运行的进程
18) SIGCONT: 继续运行之前被停止的进程
19) SIGSTOP: 停止一个进程
killall [-signal] NAME //中止某一名称下的所有进程
18、写一个脚本,完成以下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;
答:
#!/bin/bash
echo "start with K:"
ls /etc/rc.d/rc3.d/ | sed -n's/^K.*/& stop/p'
total1=$(ls /etc/rc.d/rc3.d/ | grep"^K" | wc -l )
echo "Total is $total1"
echo
echo "start with S:"
ls /etc/rc.d/rc3.d/ | sed -n's/^S.*/& start/p'
total2=$(ls /etc/rc.d/rc3.d/ | grep"^S" | wc -l )
echo "Total is $total2"
19、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
答:
#!/bin/bash
net='172.16.250'
for i in {20..100};do
if ping -c 1 –w 1 ${net}.${i} &> /dev/null;then
echo "${net}.${i} is up"
fi
done
20、打印九九乘法表;
答:
#!/bin/bash
for((i=1;i<10;i++));do
for((j=1;j<=i;j++));do
echo -n -e "${i}X${j}=$[$i*$j]\t"
done
echo
done