linux学习考试复习笔记
1.将用户涉及到的两个配置文件(详细信息与密码) 合并成一个文件,然后排序去冗输出为 简拼-1.txt 。 #cat /proc/meminfo /proc/cpuinfo /proc/cpuinfo /proc/meminfo | sort | uniq > test2.txt #less test2.txt 2. 将简拼-1.txt的文件内容再次追加写入 简拼-1.txt,然后将该文件的读写权限设置为 rw-rwxr-- , 并显示确认。 #cat jianpin.txt > tmp.txt # cat tmp.txt >> jianpin.txt # chmod 674 quhaiping.txt $ $ll quhp //查看 文件 test 的权限 -rw-r--r-- 3. 设置全局命令别名 简拼,其功能是 将当前系统所支持的所有文件系统的名字信息 重定向为 简拼-3.txt 。 查看系统支持的文件系统类型 #cd /lib/modules/2.6.35.6-45.fc14.i686/kernel/fs # ls # cd - /root 查看proc 文件系统 #ls>jianpin-4.txt 4. 显示能够登录(bash)的所有用户的详细信息,保存到文件 简拼-4.txt 。 # cat /etc/passwd|cut -d':' -f1|grep o>jianpin-4.txt #cut -d':' -f1 /etc/passwd 回车符分隔显示所有用户 #cut -d':' -f2 /etc/passwd #cut -d':' -f4 /etc/passwd 显示不同的列 #cut -d':' -f1 /etc/passwd | xargs -n 1 finger > jianp_4.txt 显示所用用户 5.信息一条命令获取网卡eth8 (如HWaddr 00:0C:29:38:0C:5A) 的MAC地址(00:0C:29:38:0C:5A)。 问题: 需要获取当前机器的eth8 d IP(192.168.23.189) 并进一步获取Ip的网段前缀(192.168.23.) #ifconfig #ifconfig eth9 #ifconfig eth9 | grep "inet addr" #ifconfig eth9 | grep "inet addr" | gawk '{print $2}' #ifconfig eth9 | grep "inet addr" | gawk '{print $2}' | cut -c6-20 #ifconfig eth9 | grep "inet addr" | gawk '{print $2}' | cut -c6-16 5. 将命令wget 所属软件包中包含的所有文件信息保存为简拼-6.txt,并通过rpm 命令将其删除.。 rpm 包的删除 #rpm -e vim-X11(包名) 6. 设置变量name,其值为“名字全拼+系统的版本号”,并显示该变量的值。 变量的设置: 注意空格报错 # var1=“lang is $LANG” # var2=‘lang is $LANG’ //注意区分 # echo $var1 # echo $var2 7. 从设备zero 拷贝1G数据到设备null(bs=4M),并将记录时间保存到文件 简拼-8.txt 。 采用dd 命令测试并记录 sdb1 分区的读写性能 分别读写2G # fdisk /dev/sdb m for help p for print n for add w for save 输入n 回车; 输入p 回车 选择primary ; 输入1 回车 确认 分区号 ; 输入 起始位置,直接回车; 输入分区大小 +3068M 回车; 输入p 回车确认创建成功; 输入w 回车 将磁盘信息写回 # time dd if=/dev/sdb1 of=/dev/null bs=1M count=2048 记录分区读测试所得时间为 time_read_dd = ? if = input file of = output file bs = block size count 数量 # time dd if=/dev/zero of=/dev/sdb1 bs=1M count=2048 记录分区写测试所得时间为 time_write_dd = ? 二、磁盘与文件系统(15分)。 1. 在磁盘sdb,划分一个1G的普通分区sdb1,再划分一个3G的swap分区sdb2,在退出之前显示两个分区信息并截屏保存为 2-简拼-1.png ,下面步骤依次截图保存; 在sdb上创建一个1G的分区 sdb1 # fdisk /dev/sdb m for help p for print n for add w for save 输入n 回车; 输入p 回车 选择primary ; 输入1 回车 确认 分区号 ; 输入 起始位置,直接回车; 输入分区大小 +3068M 回车; 输入p 回车确认创建成功; 输入w 回车 将磁盘信息写回 创建swap设备 #fdisk /dev/sdb n p 1 +3068M //创建sdb1 t 修改系统ID 1 82 改成swap的ID //从linux分区切换成swap设备 w #partprobe //让内核更新分区表 #mkswap /dev/sdb1 构建swap格式 挂载上 # free #swapon /dev/sdb1 #free #swapon –s 列出目前使用的swap设备有哪些? 2. 将所有磁盘与分区的详细信息 重定向保存为 文件 2-简拼.txt ; 显示 sda sdb 两块磁盘的详细信息 # fdisk –l >zhuj.txt 3对分区sdb1 做ext4文件系统,并挂载到目录/mnt, 显示当前挂载分区的大小与类型,并追加写到2-简拼.txt 把分区sdb1 格式化成ext3 文件系统 # mkfs -t ext3 /dev/sdb1 把分区挂载到指定目录下 # mkdir –p /mnt/name # mount /dev/sdb1 /mnt/name 查看新挂载的分区 ,注意其大小变化, 因为其格式化文件系统占用了一些磁盘空间 # cd /mnt/name # df –h # df –h >zhuj.txt cat zhuj.txt # df -aT 比较这两个参数的区别 # mount 5. 在 / 目录 也就是 sda 上进行 下面操作 # df -aTh 确认 / 目录在 挂载在 sda 磁盘上 # mkdir -p /mnt/name # mkdir -p /mnt/name/test_sda # cp /pro/cpuinfo /mnt/name/cpu_sda # dd if=/dev/zero of=/mnt/name/test_sda/256M bs=1M count=256 # ll /mnt/name 查看这个目录的文件与子目录 # df -h /mnt/name 显示的是 sda磁盘的可用容量 # du -ah /mnt/name 显示的是 这个目录及子目录的大小 256M左右 4. 将分区sdb2添加成swap设备, 列出当前swap设备,追加保存到 2-简拼.txt ; 创建swap设备 #fdisk /dev/sdb n p 1 +3068M //创建sdb1 t 修改系统ID 1 82 改成swap的ID //从linux分区切换成swap设备 w #partprobe //让内核更新分区表 #mkswap /dev/sdb1 构建swap格式 挂载上 # free #swapon /dev/sdb1 #free #swapon –s 列出目前使用的swap设备有哪些? 5.查看当前swap设备的使用情况,追加保存到 2-简拼.txt 。 三、Shell编程(15分)。 1. 实现shell脚本 3_全拼.sh,功能为一个简单的四则计算器,功能如下: 1) 循环交互式要求输入三个变量 num1 oper num2 其中oper 可以为 + - * / 2) 循环的终止条件是当且仅当 这两个数值 均为 0 输出END。 3) 根据oper分别完成运算 如 2 + 3 则输出 2+3 =5 ; 再继续要求输入三个变量,再如 3 * 4 则输出 3 * 4 = 12; 如果oper 不属于这四种运算符则输出 Wrong Oper 之后继续要求输入。 2. 运行脚本, 依次计算四次 10+学号 学号-学号 学号#学号 0+0 。 3. 将这脚本的运行过程依次截图保存为3-简拼-?.png 。 vim a chmod + x 1.sh ./1.sh shell脚本代码如下: #!/bin/bash read -p "input num1:" a read -p "input num2:" b read -p "input operator:" o case $o in +) let "res=a + b" echo $res;; -) let "res=a - b" echo $res;; /) awk 'BEGIN{printf "%.2f\n",'$a'/'$b'}';; *) let "res=a * b" echo $res;; esac exit 0 唐: #!/bin/bash read -p "please input num1 " num1 read -p "please input flag " flag read -p " please input num2 " num2 case $flag in '+') echo "$num1 $flag $num2=$(($num1+$num2))" ;; '-') echo "$num1 $flag $num2=$(($num1-$num2))" ;; '/') echo "$num1 $flag $num2=$(($num1/$num2))" ;; *) echo "$num1 $flag $num2=$(($num1*$num2))" ;; esac exit 0 四、批量用户添加与删除(22分)。 1. 实现shell脚本 4_学号.sh, 功能如下: 1)脚本不需要配置文件,也不会生成任何配置文件; 2)命令行输入四个参数:前缀 位数 开始序号 终止序号 ; 3) 利用这四个参数构建循环; 4) 在循环中采用 useradd批量添加用户,使用passwd 命令确定用户密码与用户名相同 。 2. 运行脚本 交互时输入 前缀=全拼 位数=5 开始序号=98 终止序号=102 ,将脚本的运行情况截图保存为 4-简拼-1.png 。 3. 确认用户添加成功,复制passwd 到工作目录 passwd_add.txt作为验证。 4. 一个复杂命令删除刚刚创建成功的这些用户,将命令的运行情况截图保存为 4-简拼-2.png 5. 确认用户删除成功,复制passwd 到工作目录 passwd_del.txt作为验证。 #!/bin/bash accountfile="user:passwd" if [ -f "$accountfile" ]; then mkdir –p "$accountfile"`date +%Y%m%d` mv $accountfile "$accountfile"`date +%Y%m%d` fi touch "$accountfile" read -p "qianzhui: " username_start read -p "weishu: " nu_nu read -p "star num: " nu_start read -p "shuliang: " nu_amount nu_end=$(($nu_start+$nu_amount-1)) for (( i=$nu_start; i<=$nu_end; i++ )) do nu_len=${#i} nu_diff=$(($nu_nu-$nu_len)) if [ "$nu_diff" != "0" ]; then nu_nn=00000000000 nu_nn=${nu_nn:1:$nu_diff} fi account="$username_start""$nu_nn""$i" echo "$account":"$account" >> $accountfile done cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd pwunconv chpasswd < "$accountfile" pwconv echo "OK" exit 0 #cat /etc/passwd 确认 #cut -d':' -f1 user:passwd | xargs -n 1 userdel -r #cat /etc/passwd 确认四个用户已成功删除 用户的批量添加 ************第一种方法有配置文件 采用 newusers 批量创建用户 .1 #groupadd -g 800 linux2012 .2 #gvim student.txt t001001:x:801:800::/home/t001001:/bin/bash t001002:x:802:800::/home/t001002:/bin/bash t001003:x:803:800::/home/t001003:/bin/bash t001004:x:804:800::/home/t001004:/bin/bash .3 #gvim passwd.txt t001001:t001001 t001002:123456 t001003:123456 t001004:123456 .4 #newusers < student.txt .5 #pwunconv #chpasswd < passwd.txt #pwconv .6 #cat /etc/passwd #cat /etc/shadow 确认四个用户已成功创建 ****************第二种方法无配置文件 7 利用 useradd 与 passwd --stdin 批量创建用户脚本 7.1 #gvim account1.sh #!/bin/bash if [ ! -f "$1" ]; then echo "$1 no exist!" exit 1 fi usernames=`cat $1` for username in $usernames do useradd $username echo $username | passwd --stdin $username done exit 0 7.2 #gvim std.txt std001 std002 std003 std004 7.3 #chmod +x *.sh #./account1.sh std.txt 成功创建std001-004, 可去 /etc/passwd 确认 #./account1.sh std.txt2 报告 该文件不存在 #./account1.sh 7.4 #gvim delaccount1.sh #!/bin/bash if [ ! -f "$1" ]; then echo "$1 no exist!" exit 1 fi usernames=`cat $1` for username in $usernames do echo "$username will be deleted!" userdel -r $username done exit 0 7.5 #chmod +x *.sh #./delaccount1.sh std.txt 将这四个用户删除 ***********************第三种方法 只需要输入 四个产生 前缀、位数、首位、数量 就可以批量创建 #gvim account2.sh #!/bin/bash accountfile="user:passwd" if [ -f "$accountfile" ]; then mv $accountfile "$accountfile"`date +%Y%m%d` fi touch "$accountfile" read -p "qianzhui: " username_start read -p "weishu: " nu_nu read -p "star num: " nu_start read -p "shuliang: " nu_amount nu_end=$(($nu_start+$nu_amount-1)) for (( i=$nu_start; i<=$nu_end; i++ )) do nu_len=${#i} nu_diff=$(($nu_nu-$nu_len)) if [ "$nu_diff" != "0" ]; then nu_nn=00000000000 nu_nn=${nu_nn:1:$nu_diff} fi account="$username_start""$nu_nn""$i" echo "$account":"$account" >> $accountfile done cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd pwunconv chpasswd < "$accountfile" pwconv echo "OK" exit 0
不为失败找原因,要为成功找方法!