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