学习笔记(19)

学习笔记

1.declare -A array_name 创建关联数组(必须先声明,不声明使用会报错) 关联数组索引可以为任意标识
2.echo ${title[1]}  在使用索引时一定要使用{},否则会报错
3.echo ${title} 不给下标时默认是打印第一个元素,echo $title 也可以,但有索引号不可以没有{},会被误认为是变量出现报错
4.number=({1..10}) ;echo ${number[@]}   可以使用{1..10} 来生成数组元素
  filename=(ls /home/zhangleivod/*.sh); echo ${filename[*]}    可以使用命令的输出作为数组元素
  filename=( /boot/* ); echo ${filename[*]}     通过文件通配符,将匹配到的所有文件作为数组元素
  filename=(f{1,2,3}.{txt,log})            通过大括号扩展生成的元素作为数组元素
  name=([0]=mage [2]=wang); echo ${name[1]}  稀疏数组(索引值不连续)
  read -a title  交互式赋值(不能通过管道为数组赋值如:echo a b c | read -a title)
5.unset title 删除数组
  unset title[index] 删除数组单个元素
  declare -A title    声明关联数组必须要先声明后使用
  title[“ceo”]=mage
  title[“coo”]=zhangsir
6.df -h  分区和分区利用率做成关联数组
  netstat -nt IP为索引 次数为值
7.打印数组个数  echo ${#title[@]}(或者${#title[*]})
8.name [${#name[*]}]=x 添加最后一个元素,所以建议在使用for (());do …done 格式循坏为数组赋值的时候建议使用0作为开始下标
9.生成10个随机数,取出最大最小值(数组方式实现)
10.df |grep “/dev/sd” |while read line; do echo $line; done  注意在单行中要使用分号来结尾
11.while read line; do
      echo $line
   done < df.log (文件重定向)
   df -h | while read line; do
      echo $line
   done
12.#n=10;
   #eval echo {1..$n} 先扫描后面有无变量,有变量先用值替换后再执行echo命令
   #echo {1..$n} 不适用eval扫描会报错并赋$n
   如:
   [root@centos6 ~]# n=10
   [root@centos6 ~]# echo {1..$n}
   {1..10}
   [root@centos6 ~]# eval echo {1..$n}
   1 2 3 4 5 6 7 8 9 10
13.title=ceo
   ceo=mage
   eval echo \$$title  打印间接变量值(或者echo ${!title})
14.# CMD=hostname    将命令赋给变量
   # $CMD  执行$CMD即是直接执行hostname命令
15.mktemp 创建临时文件(避免文件名冲突)
    mktemp /data/tmpXXX   X表示三位随机数(至少为三个X)
    mktemp -d /data/tmpXXXX  生成临时文件夹
    mktemp -p /data -d tmpXXXX  创建临时文件夹
    mktemp -p 指定生成文件(夹)的位置,脚本中使用可以指定生成路径
    tmpfile=mktemp -p $dir  tmpXXXX 脚本中使用临时文件后,方便删除
16.install -m 700 -o wang -g bin /etc/shadown /data/passwd.txt
   install -m 700 -d /data/testdir
17.yum install expect -y 安装expect
   # expect
   > expect ‘hi’ {send “you said hi”}
   > hi
   > you said hi
18.通常expect脚本后缀使用exp结尾作为标识
19.使用scp命令密码出现缓慢解决方案:
   /etc/ssh/sshd_config  配置文件路径
   useDNS no 启用
   GSSAPIAuthentication no
   GSSAPICleanupCredetio  no
   #service sshd restart
20.家目录中known_hosts 删除
21.interact 交互执行(ssh),使用expect eof登录后不能实现交互
22.递归调用练习
23.Centos6 启动流程(课堂笔记中)
   1.post 硬件环境
   2.mbr  446 grub stage1
   3.grub stage1.5  加载/boot分区文件系统
   4.grub stage2  /boot/grub/grub.conf
   5.vmlinuz 加载/分区    /分区驱动在/boot/initramfs.xxx.img 中
   6./sbin/init  /etc/inittab id:3:
   7.rc.sysinit
   8./etc/rc3.d/S,Kxxx –> /etc/init.d/xxx  K,S开头的文件是软连接
   chkconfi –level N service on |off 定义启动级别
   9./etc/local
   10.login
24.删除/boot下所有文件
   关键修复是 vmlinuz内核文件、initramfs文件(mkinitrd initramfs.img uname -r)和grub.conf
    方法1:
*****************************************************************************
1.进入到光盘的救援模式(不需要配置网络)
2.chroot /mnt/sysimage
3.需要拷贝光盘中的内核文件,需要挂载光盘 #mount -r /dev/cdrom /mnt
4.拷贝内核文件 #cp -av /mnt/isolinux/vmlinuz /boot/
5.生成含有/分区驱动的initramfs文件,# mkinitrd initramfs.img uname -r
6.生成grub目录及下面的文件(不包含grub.conf配置文件),grub-install /dev/sda
7.手动编辑/boot/grub/grub.conf配置文件,配置如下:
default=0
timeout=3
title Linux
kernel /vmlinuz root=/dev/sda3 selinux=0(selinux=0 防止在启动的过程中存在打标签的操作占用太多时间,可以省略selinux=0)
initrd /initramfs.img
8.sync 几次,确保内容写入磁盘
9.退出切根状态后,reboot重启系统
注意系统的/分区所在的设备来指定root,如果/所在的设备是/dev/sda2,则需要将root=/dev/sda2(使用命令:fdisk -l 或者 lsblk来查看)
注意/vmlinuz中的/表示的是/boot分区,所以vmlinuz文件存在的路径是/boot/vmlinuz
*****************************************************************************
方法2:
*****************************************************************************
前2步生成的文件可以使用安装kernel来实现,通过查看两个文件都在kernel包中
[root@centos6 boot]# rpm -qf initramfs-2.6.32-696.el6.x86_64.img
kernel-2.6.32-696.el6.x86_64
[root@centos6 boot]# rpm -qf vmlinuz-2.6.32-696.el6.x86_64
kernel-2.6.32-696.el6.x86_64
挂载光盘并安装kernel-2.6.32-696.el6.x86_64包
1.# chroot /mnt/sysimage
 # mkdir -p /mnt/cdrom 创建挂载点目录
 # mount -r /dev/cdrom  /mnt/cdrom
2.退出切根状态,找到光盘挂载点进行安装内核文件
 # lsblk 找到光盘挂载点
 # rpm -ivh /mnt/sysimage/mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64 -root=/mnt/sysimage –force  注意要加–force覆盖安装,并且要指定–root=/mnt/sysimage 因为光盘引导的磁盘文件系统是挂载在/mnt/sysimage上的
 # chroot /mnt/sysimage
 # grub-install /dev/sda   创建grub目录并创建下面的文件(不包括grub.conf)
 # vim grub.conf  (手动创建配置文件)
 default=0
 timeout=3
 title linux
 kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda3 selinux=0   (注意使用lsblk或fdisk -l 查看/所在的分区的设备名,有可能是/dev/sda2,关闭重启后的selinux打标签的长时间等待,selinux=0 可省略)
 initrd /initramfs-2.6.32-696.el6.x86_64.img
3.以上步骤完成后,sync执行几次确保内容写入磁盘,退出切根状态后重启系统(reboot)
补充:由于使用rpm安装kernel生成的vmlinuz内核文件和initramfs文件有内核版本,可以使用vim编辑器的:r!ls /boot/vmlinu 补全功能进而导入至编辑器中后修改
注意:如果boot目录在/分区下而不是独立的boot分区,grub.conf需要使用/boot/vmlinuz…而不能使用/vmlinuz
***********************************************************************************************
25.删除/boot下的内容同时删除/etc/fstab文件 修复    (补充:blkid 查看文件系统类型)
   1.fdisk -l 查看分区设备,通过创建临时挂载点查看哪个个分区是/分区(mount -w /dev/sda3 /mnt/tmp  以写入的方式挂载),进而手动编辑fstab文件
   2.编辑fstab中需要给出分区文件系统类型,所以可以通过blkid /dev/sda3查看根分区系统的类型
   3.如果出现只读挂载不能写入文件的时候可以# mount -o rw,remount /dev/sda3 /mnt/tmp,使用mount -l 查看挂载方式是否可写
   4.vim /mnt/tmp/etc/fstab
     /dev/sda3  /      ext4 defaults  0 0   /分区的挂载是必须填写的,其他的挂载条目可以适当加入(非/分区条目可加可不加,不影响/boot下的修复)
     /dev/sda1  /boot  ext4 defaults  0 0
     /dev/sda5  swap   swap defaults  0 0
   5.重启系统
   以下步骤参照以上删除/boot下所有文件的修复方法即可
     先要修复挂载 然后才能切根修复/boot下的内容
26.rm -f /sbin/init(该文件是个二进制文件)
   开启网络功能(如果没有开启网络功能可以手动临时配置同网段IP)从其他同版本的文件复制至指定文件夹
   通过rpm -qf /sbin/init 查看文件所在的rpm包
   [root@centos6 ~]# rpm -qf /sbin/init
   upstart-0.6.5-16.el6.x86_64
   切根后通过
   rpm2cpio  upstart-0.6.5-16.el6.x86_64 |cpio -idv /sbin/init  通过cpio将/sbin/init的文件解压缩至当前文件夹
实验1(Centos 6):rm -rf /etc/fstab /boot/*  恢复
实验2(Centos 6):lvm 环境下的rm -rf /etc/fstab /boot/* 恢复
修复过程中注意使vg的状态处于可用状态,可以使用vgchange -ay
自制Linux系统(LFS文档)
1.分区并创建文件系统
2.mkdir /mnt/boot  应为 grub-install –root-directory=/mnt /dev/sdb 默认是–root-directory=/
3.UUID … 后 init=/bin/bash  selinux=0   init启动时不在从/sbin/init引导第一个进程,而是直接执行bash进程(/sbin/init启动读取配置文件太多,因此使用/bin/bash作为开启的第一个进程作为模拟使用)
4.
insmod 内核模块名  加载模块
27.cat /etc/sysctl.conf 内核参数永久生效
   cat /proc/sys/net/ipv4/icmp_echo_ignore_all  禁ping(echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all)
   cat /proc/sys/net/ipv4/ip_default_ttl
   sysctl -p 生效配置文件
   sysctl -a |less 列出所有生效的内核参数
   sysctl -w 相当于修改内存,类似于echo 1 > /sys/net/ipv4/ip_forward
28.清空 缓存(free -h 中的caches值)sysctl -w vm.drop_caches=1(该命令只是临时生效,类似于echo 1 > /proc/sys/vm/drop_caches)
29.内核编译安装系统
   1.cp  /boot/config…  .config
   2.make menuconfig

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98458

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code