Linux基础题目练习

 

  
  
  
  
  1. 首先我们了解一下在redhat5.8系统启动过程:POST(cpu,Memory)--> BIOS基本输入输出系统--BOOT Squen(启动)-->MBR(512字节)-->Boot Loader(446字节)(代码)-->Kernel(初始化)-->/sbin/init(/etc/inittab) 
  2.  
  3. 一、看一下系统常见的故障: 
  4. 1、bash损坏: 
  5. 现象:此时你会无法登录到系统 
  6. 解决:进入到救援模式下 
  7. linux rescue 进入到救援模式 
  8. mkdir /mnt/boot 在/mnt下新建boot目录 
  9. mount /dev/hdc /mnt/boot 挂载光盘 
  10. cd /mnt/boot/Server 切换到光盘里 
  11. rpm -ivh --replacepkgs bash-3.2.32.el5.i386.rpm --root /mnt/sysimage/ 安装bash包 
  12. chroot /mnt/sysimage 查看最后效果chroot成功 
  13.  
  14. 2、grub文件损坏: 
  15. 现象:此时会提示符:grub> 
  16. 解决:进入到救援模式下 
  17. linux rescue 进入到救援模式 
  18. chroot /mnt/sysimage 表示chroot真正系统里 
  19. cd boot/grub  
  20. vim grub.conf  
  21. default =0 
  22. timeout =3 
  23. title mylinux 
  24.       root (hd0,0) 
  25.       kernel /vmlinuz-2.6.18-308.el5 
  26.       initrd /initrd-2.6.18-308.el5.img 
  27.        
  28.        
  29. 3.系统会莫名奇怪的重启: 
  30. 原因:请回忆一下系统启动过程,检查/etc/inittab里面的内容 
  31. 1、查看默认的启动类型,然后依次看一下系统启动级别从0-6 
  32. 2、查看一下/etc/rc.d/sysinit里面的内容,是否设置了重启 
  33. 3、查看一下/etc/rc.d/下面的文件 
  34. 4、查看一下是否设置了计划任务等 
  35.  
  36.  
  37. 二、、创建一个空间大小为10G的RAID5设备;其chuck大小为32k;要求此设备开机时可以自动挂载至/backup目录 
  38. raid5:使用三个5G进行创建 
  39. 1、[root@localhost ~]# fdisk -l 
  40.  
  41. Disk /dev/sda: 343.5 GB, 343597383680 bytes 
  42. 255 heads, 63 sectors/track, 41773 cylinders 
  43. Units = cylinders of 16065 * 512 = 8225280 bytes 
  44.  
  45.    Device Boot      Start         End      Blocks   Id  System 
  46. /dev/sda1   *           1          13      104391   83  Linux 
  47. /dev/sda2              14        5235    41945715   8e  Linux LVM 
  48. /dev/sda3            5236        5366     1052257+  82  Linux swap / Solaris 
  49.  
  50. Disk /dev/sdb: 21.4 GB, 21474836480 bytes 
  51. 255 heads, 63 sectors/track, 2610 cylinders 
  52. Units = cylinders of 16065 * 512 = 8225280 bytes 
  53.  
  54.    Device Boot      Start         End      Blocks   Id  System 
  55.  
  56. 2、fdisk /dev/sda 进入磁盘创建分区 
  57. 注意,最后不要忘记调整raid的标识号fd 
  58.  
  59. 3、使用fdisk -l /dev/sda 查看一下 
  60.  
  61. 4、partprobe /dev/sda 让系统识别一下这个分区 
  62.  
  63. 5、[root@localhost ~]# mdadm -C /dev/md1 -a yes -c 32 -l 5 -n 3 /dev/sda{5,6,7}  使用mdadm创建raid5  
  64. mdadm: array /dev/md1 started. 
  65. [root@localhost ~]#  
  66.  
  67. 6、[root@localhost ~]# mke2fs -j /dev/md1 格式化成ext3文件系统 
  68.  
  69. [root@localhost ~]# mkdir /backup 
  70. [root@localhost ~]# vim /etc/fstab  
  71. /dev/md1                /backup                 ext3    defaults        0 0 
  72.  
  73. 7、[root@localhost ~]# mount -a 进行挂载 
  74.    [root@localhost ~]# mount 查看最终挂载的效果 
  75.  
  76.  
  77.  
  78. 三、创建一个由两个物理卷组成的大小为20G的卷组myvg,要求其PE大小为8M;而后在此卷组中创建一个大小为5G的逻辑卷lv1,此逻辑卷要能在开机后自动挂载至/users目录 
  79. 使用2个10G的pv进行创建 
  80. 1、先分好区,不要忘记改LVM的标识符8e 
  81. 2、partprobe /dev/sda  
  82. 3、pvcreate /dev/sda{8,9}  
  83. 4、vgcreate -s 8M myvg /dev/sda{8,9} 
  84. 5、lvcreate -L 5G -n lv1 myvg 
  85. 6、mke2fs -j /dev/myvg/lv1  
  86. 7、mkdir /users 
  87. vim /etc/fstab  
  88. /dev/myvg/lv1           /users                  ext3    defaults        0 0 
  89. 8、mount -a 
  90. mount  
  91.  
  92.  
  93. 四、4、完成以下任务: 
  94.   (1)新建系统组mysql;新建系统用户mysql,要求其没有家目录且shell为/sbin/nologin; 
  95.   (2)新建GID为600的组magedu;新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;  
  96.   (3)新建用户centos,其家目录为/users/centos,密码同用户名; 
  97.   (4)新建用户www,其家目录为/users/www;删除www用户,但保留其家目录; 
  98.   (5)用户gentoo和centos均以magedu为其附加组; 
  99.    
  100. (1)useradd -r -s /sbin/nologin mysql 
  101. (2)groupadd -g 600 magedu 
  102.    useradd -d /users/gentoo gentoo 
  103.    echo gentoo |passwd --stdin gentoo 
  104. (3)useradd -d /users/centos centos 
  105.    echo centos |passwd --stdin centos 
  106. (4)useradd -d /users/www 
  107. (5)usermod -a -G magedu gentoo 
  108.    usermod -a -G magedu centos 
  109.     
  110. 五、创建一个2G的分区,文件系统为ext3,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的3%,要求开机后可以自动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用 
  111. 1、创建分区 
  112. fdisk /dev/sda 
  113. 2、parprobe /dev/sda  
  114. 3、mke2fs -j -L DATA -m 3 /dev/sda10 
  115. 4、mkdir /data 
  116. vim /etc/fstab 
  117. LABEL=DATA              /data                   ext3    defaults,acl        0 0 
  118. 5、mount -a 
  119. mount  
  120.  
  121.  
  122.  
  123. 六、缩减前面创建的逻辑卷lv1的大小至2G;要求gentoo的家目录等不能丢失;缩减完成后以gentoo用户的身份下载http://172.16.0.1/pub/Sources/new_lamp/httpd-2.2.19.tar.bz2至gentoo自己的家目录; 
  124. 1、卸载/users 
  125. unmount /users 
  126. 2、e2fsck -f /dev/myvg/lv1 
  127. 3、resize2fs /dev/myvg/lv1 2G 
  128. 4、lvreduce  -L 2G /dev/myvg/lv1 
  129. 5、mount -a  
  130. mount  
  131. 6、su - gentoo 
  132. wget http://172.16.0.1/pub/Sources/new_lamp/httpd-2.2.19.tar.bz2 
  133.  
  134. 七、复制文件/var/log/messages至/data目录,其属主为root用户,属组为root组;要求此文件可以被任何人读取,可以被gentoo用户和magedu组读写,但centos没有任何访问权限 
  135. mount -o remount /data 
  136. [root@localhost centos]# cp /var/log/messages /data/ 
  137. [root@localhost data]# getfacl messages  
  138. # file: messages 
  139. # owner: root 
  140. # group: root 
  141. user::rw- 
  142. group::--- 
  143. other::--- 
  144.  
  145. chmod o=x 
  146. 此时测试任何人都能读取这个messages 
  147.  
  148.  setfacl -m u:gentoo:rw- messages  
  149.  setfacl -m g:magedu:rw- messages  
  150.  setfacl -m u:centos:--- messages  
  151.   
  152. [root@localhost data]# getfacl  messages  
  153. # file: messages 
  154. # owner: root 
  155. # group: root 
  156. user::rw- 
  157. user:gentoo:rw- 
  158. user:centos:--- 
  159. group::--- 
  160. group:magedu:rw- 
  161. mask::rw- 
  162. other::r-- 
  163.  
  164. 八、配置本地的yum源,其访问路径yum源为http://172.16.0.1/yum/{Server,Cluster,ClusterStorage,VT,errata}, 
  165. 而后安装mysql-server和httpd软件包; 
  166. 1、cd  /etc/yum.repos.d 
  167. touch server.repo 
  168. vim server.repo 
  169. [Server] 
  170. name=Server 
  171. baseurl=http://172.16.0.1/yum/Server 
  172. gpgcheck=0 
  173.  
  174. [Cluster] 
  175. name=Cluster 
  176. baseurl=http://172.16.0.1/yum/Cluster 
  177. gpgcheck=0 
  178.  
  179. [ClusterStorage] 
  180. name=ClusterStorage 
  181. baseurl=http://172.16.0.1/yum/ClusterStorage 
  182. gpgcheck=0 
  183.  
  184. [VT] 
  185. name=VT 
  186. baseurl=http://172.16.0.1/yum/VT 
  187. gpgcheck=0 
  188.  
  189.  
  190. [errata] 
  191. name=errata 
  192. baseurl=http://172.16.0.1/yum/errata 
  193. gpgcheck=0 
  194.  
  195. yum -y install httpd  mysql-server 
  196.  
  197.  
  198. 九、下载并编译安装vsftpd;软件包所在的地址:ftp://172.16.0.1/pub/Sources/vsftpd;要求: 
  199.     1)软件的默认安装目录为/usr/local,配置文件的安装路径为/etc/vsftpd目录; 
  200.     2)安装完成以后,启动此服务,要求:匿名用户可以上传文件至/var/ftp/incoming目录中,而且可以删除文件或重命名文件,也可创建子目录; 
  201.      
  202.     提示:请关闭selinux,而且系统重启后使用其默认也为permissive状态或disable状态 
  203. 1、setfenforce 0 关闭selinux 
  204. 2、下载vsftpd软件 
  205.  wget ftp://172.16.0.1/pub/Sources/vsftpd 
  206. 3、141  tar -xf vsftpd-2.3.5.tar.gz  
  207.   142  cd vsftpd-2.3.5 
  208.   143  id ftp 
  209.   144  id nobody 
  210.   145  finger ftp 
  211.   146  mkdir /var/ftp 
  212.   147  make && make install 
  213.   148  mkdir -pv /etc/vsftpd 
  214.   149  cp vsftpd.conf /etc/vsftpd/ 
  215.    
  216. 4、 vim /etc/vsftpd/vsftp.conf 
  217.   需要修改的选项: 
  218.   write_enable=YES 
  219.   anon_upload_enable=YES 
  220.   anon_mkdir_write_enable=YES 
  221.   anon_other_write_enable=YES 
  222.    
  223.  5、mkdir /var/ftp/incoming 
  224.     chown ftp:ftp /var/ftp/incoming/ 
  225.   
  226. 6、启动vsftpd 
  227. /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf & 
  228.   
  229. 7、查看一下端口 
  230.  [root@localhost vsftpd-2.3.5]# netstat -tlnp |grep 21 
  231. tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      12589/vsftpd  
  232.  
  233. 测试成功 
  234.  
  235.  
  236. 十、新建目录/backup/test,其属组为magedu,且此组具有读写权限,其它用户没有任何权限;magedu组成员在此目录中创建的文件的属组都需要是magedu,且magedu组中每个成员在此目录中只能删除自己的文件; 
  237. mkdir /backup/test 
  238. cd /backup 
  239. chomd .magedu test 
  240. chmod g=rw test 
  241. chmod o=x 
  242.  
  243. chmod g+x test 
  244. chmod o+t test 
  245.  
  246.  
  247. 十一、配置当前主机内核参数,以允许在不同的网络接口间转发数据包;要求此项配置即刻生效并且在重新启动系统后不会失效。 
  248. vim /etc/sysctl.conf 
  249. net.ipv4.ip_forward = 1 /把0修改成1/ 
  250. sysctf -p 使其生效,不用重启系统 
  251.  
  252. 十二、配置本机每隔两天在凌晨3点20备份一次/etc目录,备份文件存放至/backup目录,文件名形如:etc-2012-06-20.tar.bz2; 
  253. 20 03 */3 * * /bin/tar zcf /backup/etc-`date +\%F`.tar.gz /etc/* &> /dev/null 
  254.  
  255. 十三、使用find命令完成如下任务,每个问题使用一个命令: 
  256.   (1)找到/etc目录下属于root用户且至少7分钟没有访问过的普通文件,并将它们复制到/tmp/test目录; 
  257.        要求:/tmp/test目录需要自己事先创建,并且为其创建符号链/users/test; 
  258.   (2)找到/users目录下所有没有属主且没有属组的文件,并将其属组修改为gentoo,将其属组修改为magedu;请删除一下www用户 
  259. (1)mkdir /tmp/test   
  260.    ln -s /tmp/test /users/test 
  261.    find /etc -type f -user root -mmin +7 -exec cp {} /tmp/test/ \; 
  262.  
  263. (2)su - www 
  264. touch aa /users/www
  265. exit 
  266. userdel www
  267. find /users -nouser -nogroup -exec chown gentoo:magedu {} \; 
  268.  
  269.  
  270. 十四题、为逻辑卷lv1创建快照卷lv1_snap,要求此卷只读,且大小为1G;而后通过此卷将数据备份至/backup目录归档压缩存放,备份文件名为users.tar.bz2; 
  271.  lvcreate -L 1G -n lv1_snap -s -p r /dev/myvg/lv1  
  272.  mkdir /mnt/lvm 
  273.  mount /dev/myvg/lv1_snap /mnt/lvm  
  274.  tar jcf /backup/users.tar.bz2 /mnt/lvm/* 
  275.  
  276. 十五题、为本机的eth0网卡配置第二个IP地址,地址为192.168.1.1XX,XX为你的座位号,要求系统重启后依然有效;而后为本机配置静态路由,当访问地址为10.0.0.0网络时,其网关为192.168.1.254,要求系统重启后依然有效; 
  277. cd /etc/sysconfig/network-script/ 
  278. cp ifcfg-eth0 ifcfg-eth0:0 
  279. vim ifcfg-eth0:0 
  280. # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] 
  281. DEVICE=eth0 
  282. BOOTPROTO=static 
  283. HWADDR=00:0C:29:EB:5E:E0 
  284. IPADDR=1192.168.1.22 
  285. NETMASK=255.255.255.0 
  286. ONBOOT=yes 
  287.  
  288. touch route-eth0 
  289. vim route-eth0
  290. 10.0.0.0 via 192.168.1.254
  291. 最后重启网卡使其生效  
  292. services network restart 
  293.  
  294. 使用ifconfig  eth0:0查看ip地址 
  295. 使用route -n 查看路由 
  296.  
  297.  
  298. 十六题:为grub的编辑功能设置密码,密码以密文的格式存储,且密码为mageedu; 
  299. 首先生成md5格式 
  300. grub-md5-crypt 让你输入密码 
  301. 然后编译vim /etc/grub.conf 
  302. 放在title上面 
  303. password --md5  $1$oFeqi0$jq7fLfMpoSW5fsEXLF0IB. 
  304. 最后重启系统 
  305.  
  306.  
  307. 十七题: 
  308. 写一个脚本: 
  309. 1) 使用函数实现: 
  310.    判断一个用户是否存在,用户名通过参数传递而来; 
  311.    如果存在,就显示此用户的shell和UID 
  312.    如果不存在,就说此用户不存在; 
  313. 2) 提示用户输入用户名,而后将其传递给上面的函数; 
  314. 3) 判断结束后不退出,而是提示用户可继续输入其它用户名,或输入(quit)退出; 
  315.  
  316. #!/bin/bash 
  317. username () { 
  318.        if id $1 &> /dev/null;then 
  319.         echo "shell is `grep $1 /etc/passwd |cut -d: -f7` uid is `id $1`"  
  320.         return 0 
  321.        else 
  322.         echo "`id $1` is not exist" 
  323.         return 1 
  324.        fi 
  325. read -p "Please you input username:" choice 
  326. until [ "$choice" = 'quit' ];do 
  327.         username $choice 
  328.         read -p "A newusers:" choice 
  329. done 
  330.      
  331.      
  332.      
  333. 十八题: 
  334. 写一个脚本: 
  335. 1) 显示一个菜单给用户: 
  336. d|D) show disk usages. 
  337. m|M) show memory usages. 
  338. s|S) show swap usages. 
  339. q|Q) quit. 
  340. 2) 当用户给定选项后显示相应的内容; 
  341. 3) 每次执行完成后不退出脚本,而是提示用户可以继续查看其它信息;直到用户键入q、Q、quit或QUIT退出; 
  342. 4) 如果用户给出的不是菜单中可用的选项,则告诉用户选项错误,需要重新选择 
  343. menlist () { cat <<EOF 
  344. d|D) show disk usages. 
  345. m|M) show memory usages. 
  346. s|S) show swap usages. 
  347. q|Q) quit. 
  348. EOF 
  349. menlist 
  350. read -p "your caidan:" choice 
  351. while true;do 
  352. case $choice in 
  353. d|D) 
  354.         df -hP 
  355.  
  356. ;; 
  357. m|M) 
  358.         free -m 
  359. ;; 
  360. s|S) 
  361.         top -n1 |grep Swap 
  362. ;; 
  363. q|Q) 
  364.     exit 
  365. ;; 
  366. *) 
  367.         echo "your wrong"  
  368.         menlist 
  369.  
  370. ;; 
  371.  
  372. esac 
  373. read -p "again:" choice 
  374. done 
  375.  
  376.  
  377. 十九题: 
  378. 19、写一个脚本完成如下功能(请写好判断语句,使得此脚本可多次执行而不会出现未知错误): 
  379. 1) 删除/dev/sdb磁盘上的所有分区; 
  380.     a) 先判断/dev/sdb磁盘设备是否存在;如果不存在,就退出脚本; 
  381.     b) 再判断此设备上是否有分区处于挂载使用状态,如果是,先强行卸载之; 
  382.     c) 在删除之前,请用户先确认; 
  383. 2) 在/dev/sdb上创建3个分区: 
  384.     a) sdb1大小为50M; 
  385.     b) sdb2大小为200M; 
  386.     c) sdb3大小为64M; 此分区以后要做为交换分区使用; 
  387.     注意:创建结束后要让系统重新读取此设备上的分区表; 
  388. 3) 为上述的分区创建文件系统: 
  389.     a) sdb1为ext2;  
  390.     b) sdb2为ext3; 
  391.     c) sdb3为swap; 
  392. 4) 挂载上述文件系统: 
  393.     a) sdb1挂载至/mnt/boot; 
  394.     b) sdb2挂载至/mnt/sysroot; 
  395.     注意:挂载点须事先存在,否则,请在脚本中自行创建; 
  396.      
  397. #!/bin/bash 
  398. read -p "A disk:" DISK 
  399. if ! fdisk -l /dev/sdb |grep "^Disk $DISK";then 
  400. echo "$DISK is not exist" && exit 1 
  401. fi 
  402.  
  403. read -p "Do you sure destory (y/n):" MOUNT 
  404. case $MOUNT in 
  405. y) 
  406.    echo "next" 
  407. ;; 
  408. n) 
  409.    exit 
  410. ;; 
  411. *) 
  412.  echo "wrong" 
  413. ;; 
  414. esac 
  415.  
  416. for i in `fdisk -l $DISK | grep -o "${DISK}[0-9]\{1,\}"`;do 
  417. fuser -km $i 
  418. umount $i 
  419. done 
  420.  
  421. dd if=/dev/zero of=$DISK bs=512 count=1 &> /dev/null 
  422.  echo ' 
  423.         n 
  424.         p 
  425.         1 
  426.          
  427.         +50M 
  428.         n  
  429.                 p 
  430.         1 
  431.          
  432.         +50M 
  433.         n 
  434.         p 
  435.         2 
  436.          
  437.         +200M 
  438.         n 
  439.         p 
  440.         3 
  441.          
  442.         +64M 
  443.         t 
  444.         3 
  445.         82 
  446.         w' | fdisk $DISK &>/dev/null 
  447. partprobe $DISK 
  448. mke2fs -j ${DISK}1 &>/dev/null 
  449. sleep 2 
  450. mke2fs -j ${DISK}2 &>/dev/null 
  451. mkswap ${DISK}3  &>/dev/null 
  452.  
  453. [ -d /mnt/boot ] || mkdir /mnt/boot 
  454. [ -d /mnt/sysroot ] || mkdir /mnt/sysroot 
  455. mount ${DISK}1 /mnt/boot 
  456. mount ${DISK}2 /mnt/sysroot 
  457.  
  458.  
  459. 二十题、写一个脚本: 
  460. 为前面第9题的vsftpd服务提供一个SysV风格的服务脚本,将其放置于/etc/rc.d/init.d目录中,要求: 
  461. 1) 能够使用chkconfig将其添加至服务列表; 
  462. 2) 接受start|stop|restart|status等参数; 
  463. #!/bin/bash 
  464. # vsftpd ftp-server 
  465. # chkconfig: 2345 60 50 
  466. # description: ftp server 
  467. # config: /etc/vsftpd/vsftpd.conf 
  468. start () { 
  469. if  [ ! -e /var/lock/subsys/vsftpd ];then 
  470.     /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf && touch /var/lock/subsys/vsftpd && return 0 
  471. else 
  472.     echo "vsftpd starting already running" && return 1 
  473.  fi 
  474.  
  475.  
  476. stop () { 
  477.         [ -e /var/lock/subsys/vsftpd ] && killall vsftpd && rm -rf /var/lock/subsys/vsftpd 
  478.  
  479. case $1 in 
  480. start) 
  481.         start 
  482.         [ $? -eq 0 ] && echo -e "starting vsftpd:             [\033[32mOK\033[0m]"  
  483. ;; 
  484. stop) 
  485.         stop 
  486.         if [ $? -eq 0 ];then 
  487.           echo -e "stop vsftpd:                 [\033[32mOK\033[0m]" 
  488.         else 
  489.           echo -e "stop vsftpd:                 [\033[31mFailure\033[0m]"  
  490.         fi 
  491. ;; 
  492. restart) 
  493.         stop [ $? -eq 0 ] && echo -e "stop vsftpd:                 [\033[32mOK\033[0m]" 
  494.         start [ $? -eq 0 ] && echo -e "starting vsftpd:            [\033[32mOK\033[0m]" 
  495. ;; 
  496. *) 
  497.    echo "wrong `basename $0` [stop|start]" 
  498. ;; 
  499. esac 

 

你可能感兴趣的:(linux命令,Linux学习,Linux基础,linux基础题目练习)