###########################node
#####第四單元.管理系統存儲####mysql
###########################linux
@@注意:主分區+邏輯分區總個數不能超過15git
@@注意:通常分區時,分三個主分區,第四個爲擴展分區(容器),給其分配剩餘全部空間正則表達式
###1.分區的劃分####sql
fdisk /dev/vdb ##進入分區劃分shell
partprobe ##加載分區表vim
cat /proc/partitions ##查看分區信息數組
mkfs.xfs ##格式化分區=建立xfs文件系統bash
blkid ##查看文件系統類型
mount /dev/vdb1 掛載點 ##分區掛載
umount /dev/vdb1 掛載點 ##卸載掛載
vim /etc/fstab ##實現永久掛載
/dev/vdb1 掛載點 文件系統類型(xfs) defaults 0 0
mount -a
df ##查看已掛載的分區
####2.swap分區管理####
swapon -s ##查看系統中的swap分區
創建swap分區
mkswap /dev/vdb1 ##把/dev/vdb1格式化爲swap分區
swapon -a /dev/vdb1 ##激活
上述激活方式,重啓後激活消失,如需永久激活,須要修改配置文件
vim /etc/fstab ##開機自動激活
/dev/vdb1 swap swap defaults 0 0
設備 掛載點 文件系統類型
swapoff /dev/vdb1 ##關閉激活的swap分區
添加臨時swap分區
dd if=/dev/zero of=/mnt/swapfilename bs=1M count=1000 ##在/mnt中劃分一塊名爲swapfile的分區,塊大小爲1M,數量爲1000
mkswap /dev/vdb1 ##格式化swap格式
swapon -a /dev/vdb1 ##激活
@@!!!實例:
[root@station mnt]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa1575c6c.
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition ##刪除分區
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types ##列出系統可用的分區類型
m print this menu
n add a new partition ##新建分區
o create a new empty DOS partition table
p print the partition table ##顯示分區
q quit without saving changes ##退出
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit ##保存更改到分區表中
x extra functionality (experts only)
Command (m for help): n ##選擇新建分區
Partition type:
p primary (0 primary, 0 extended, 4 free) ##分區類型爲主分區
e extended ##分區類型爲擴展分區
Select (default p): ##默認爲主分區
Using default response p
Partition number (1-4, default 1): 1 ##主分區id
First sector (2048-20971519, default 2048): ##此分區起始位置(通常爲默認)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +100M ##分區大小
Partition 1 of type Linux and of size 100 MiB is set
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xa1575c6c
Device Boot Start End Blocks Id System
/dev/vdb1 2048 206847 102400 83 Linux
Command (m for help): wq ##保存退出,若輸入爲q表示放棄更改退出
The partition table has been altered!
[root@station mnt]# partprobe
[root@station mnt]# cat /proc/partitions ##同步分區表
major minor #blocks name
253 0 10485760 vda
253 1 10484142 vda1
253 16 10485760 vdb
253 17 102400 vdb1
文件類型:
vfat
ntfs
ext:日誌文件系統,最大分區爲32T
xfs:最大分區爲18eb,1eb=1024t,最快吞吐速度可達8G/s
後二者Windows不識別
mkfs.xfs /dev/vdb5 ##格式化
mount /dev/vdb5 /mnt ##掛載
例子:
[root@station mnt]# mkfs.xfs /dev/vdb5
meta-data=/dev/vdb5 isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@station mnt]# blkid
/dev/vda1: UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" TYPE="xfs"
/dev/vdb5: UUID="64d88d75-16fa-4441-80c9-806dae86fc6d" TYPE="xfs"
[root@station mnt]# mount /dev/vdb5 /mnt
[root@station mnt]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3811544 6662356 37% /
devtmpfs 927072 0 927072 0% /dev
tmpfs 942660 140 942520 1% /dev/shm
tmpfs 942660 17116 925544 2% /run
tmpfs 942660 0 942660 0% /sys/fs/cgroup
/dev/vdb5 98988 5280 93708 6% /mnt
####3.磁盤加密###
fdisk /dev/vdb
cryptsetup luksFormat /dev/vdb1 ##對vdb1進行luks加密
cryptsetup open /dev/vdb1 westos ##打開加密鎖,並對其給予一個新的名字
mkfs.xfs /dev/mapper/westos ##對其進行格式化
mount /dev/mapper/westos /mnt ##對westos進行掛載
umount /mnt/ ##@@注意:執行此操做時,應該不在/mnt目錄下,不然會提醒設備正在被使用的警告或報錯
cryptsetup close westos ##對westos進行關閉(即上鎖)
#####加密磁盤的永久掛載####
vim /etc/crypttab ##此文件的做用至關於使系統執行cryptsetup open /dev/vdb1 nihao 的這條命令
內容以下:
格式爲: 解密後設備管理文件 設備 加密字符(密碼)存放文件
nihao /dev/vdb1 /root/lukspsfile
vim /root/lukspsfile ##密碼所存放的文件
內容爲:lizhengtai ##本身所設置的密碼
chmod 600 /root/lukspsfile ##給予文件600的權限
cryptsetup luksAddKey /dev/vdb1 /root/lukspsfile ##將磁盤和密碼文件連接對應起來
Enter any passphrase: ##執行上條鏈接命令時須要輸入密碼
vim /etc/fstab
內容爲:
/dev/mapper/redhat /mnt xfs defaults 0 0
執行完上述命令後reboot虛擬機後,執行df命令,即可以看到效果(即此時設備已經被掛載)
#####加密清除#####
vim /etc/fstab ##進入/etc/fstab文件刪除在第2步中寫入的行
> /etc/crypttab ##刪除/etc/crypttab文件
rm -fr /root/lukspsfile ##刪除mima存放的文件
umount /mnt ##卸載/mnt
cryptsetup close nihao ##關閉磁盤 !!!@@注意:此步驟必定要作
mkfs.xfs /dev/vdb1 ##格式化磁盤(此時會提醒報錯,必須使用-f進行強行格式化)
mkfs.xfs: /dev/vdb1 appears to contain an existing filesystem (crypto_LUKS).
mkfs.xfs: Use the -f option to force overwrite.
mkfs.xfs /dev/vdb1 -f
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
操做完成,加密清除!!!
#####4.磁盤陣列####
fdisk /dev/vdb
mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/vdb{1..3}
mkfs.xfs /dev/md0
mount /dev/md0 /mnt
監控命令:
watch -n 1 cat /proc/mdstat
@@!!!實例:
[root@localhost ~]# fdisk /dev/vdb
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1459613d
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 83 Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): l
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1459613d
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 fd Linux raid autodetect
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (2099200-20971519, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-20971519, default 20971519): +1G
Partition 2 of type Linux and of size 1 GiB is set
Command (m for help): t
Partition number (1,2, default 2): fd
Partition number (1,2, default 2):
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p):
Using default response p
Partition number (3,4, default 3):
First sector (4196352-20971519, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-20971519, default 20971519): +1G
Partition 3 of type Linux and of size 1 GiB is set
Command (m for help): t
Partition number (1-3, default 3):
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1459613d
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 fd Linux raid autodetect
/dev/vdb2 2099200 4196351 1048576 fd Linux raid autodetect
/dev/vdb3 4196352 6293503 1048576 fd Linux raid autodetect
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partprobe
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/vdb{1..3}
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
[root@localhost ~]# mkfs.xfs /dev/md0
[root@localhost ~]# mount /dev/md0 /mnt
卸載磁盤陣列:
mdadm -f /dev/md0 /dev/vdb1 ##破壞磁盤陣列md0中的vdb1磁盤
mdadm -D /dev/md0 ##查看正在使用的磁盤
mdadm -r /dev/md0 /dev/vdb1 ##刪除磁盤陣列中的vdb1磁盤
mdadm -a /dev/md0 /dev/vdb1 ##
umount /mnt
mdadm -S /dev/md0 ##中止使用磁盤陣列
@@!!!實例:
[root@localhost ~]# mdadm -r /dev/md0 /dev/vdb1
mdadm: hot remove failed for /dev/vdb1: Device or resource busy
[root@localhost ~]# mdadm -r /dev/md0 /dev/vdb2
mdadm: hot remove failed for /dev/vdb2: Device or resource busy
[root@localhost ~]# mdadm -f /dev/md0 /dev/vdb2
mdadm: set /dev/vdb2 faulty in /dev/md0
[root@localhost ~]# mdadm -r /dev/md0 /dev/vdb2
mdadm: hot removed /dev/vdb2 from /dev/md0
[root@localhost ~]# mdadm -f /dev/md0 /dev/vdb3
mdadm: set /dev/vdb3 faulty in /dev/md0
[root@localhost ~]# mdadm -r /dev/md0 /dev/vdb3
mdadm: hot removed /dev/vdb3 from /dev/md0
[root@localhost ~]# umount /mnt
[root@localhost ~]# mdadm -f /dev/md0 /dev/vdb3
mdadm: set device faulty failed for /dev/vdb3: No such device
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
[root@localhost ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1-3, default 3): 1
Partition 1 is deleted
Command (m for help): d
Partition number (2,3, default 3): 2
Partition 2 is deleted
Command (m for help): d
Selected partition 3
Partition 3 is deleted
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1459613d
Device Boot Start End Blocks Id System
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partprobe
####5.配額###
fdisk /dev/vdb
mkdir /pub
mount /dev/vdb1 /pub
mkfs.xfs /dev/vdb1 -f
chmod 1777 /pub ##給予目錄/pub的權限爲1777
mount -o usrquota /dev/vdb1 /pub
quotaon -uv /dev/vdb1 ##激活配額
edquota -u username ##給用戶分配配額
內容以下:
Disk quotas for user student (uid 1000):
Filesystem blocks(事實) soft hard inodes soft(事實) hard
/dev/vdb1 0 0 102400 0 0 0
即除了修改第一個hard,其他參數不用修改
su - username ##切換用戶
切換用戶後執行:
dd if=/dev/zero of=/pub/file bs=1M count=10
dd if=/dev/zero of=/pub/file bs=1M count=100
dd if=/dev/zero of=/pub/file bs=1M count=101
quota ##查看用戶被分配的配額
@@!!!實例:
fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +500M
[root@localhost ~]# mkdir /pub
[root@localhost ~]# mount /dev/vdb1 /pub
mount: unknown filesystem type 'linux_raid_member' ##報錯緣由:由於此磁盤在上一布用於磁盤陣列,因此格式化時應該加-f
[root@localhost ~]# mkfs.xfs /dev/vdb1 -f
[root@localhost ~]# chmod 1777 /pub ##給予目錄/pub的權限爲1777
[root@localhost ~]# mount -o usrquota /dev/vdb1 /pub
[root@localhost ~]# quotaon -uv /dev/vdb1 ##激活配額
quotaon: Enforcing user quota already on /dev/vdb1
[root@localhost ~]# edquota -u username ##給用戶分配配額
[root@localhost ~]# su - username ##切換用戶
[student@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0227461 s, 461 MB/s
[student@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 1.23691 s, 84.8 MB/s
[student@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=101
dd: error writing ‘/pub/file’: Disk quota exceeded ##報錯緣由:超過root用戶給分配的配額
101+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.640045 s, 164 MB/s
[student@localhost ~]$ quota ##查看用戶被分配的配額
Disk quotas for user student (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/vdb1 102400* 0 102400
#####自動掛載配額分區####
/dev/vdb1 /mnt xfs defaults,usrquota 0 0
文件內容編寫不正確,則重啓會報錯,此時,修改文件,當修改完後,重啓則又能夠正常啓動
#####################################
####### 1.lvm (創建可拓展磁盤)#########
#####################################
pe爲最小單位
######1.LVM創建########
1.劃分物理分區並把分區id修改成8e
pvs|pvdisplay
vgs|vgdisplay
lvs|lvdisplay
第一步:創建lvm
監控命令:
watch -n 1 'echo "=pvinfo=";pvs;echo "=vginfo=";vgs;echo =lvinfo=;lvs'
pvcreate /dev/vdb1 ##創建pv
vgcreate lzt /dev/vdb1 ##創建vg(組)
lvcreate -L 110M -n lv0 lzt ##設置vm的大小
mkfs.xfs /dev/lzt/lv0 ##格式化
mount /dev/lzt/lv0 /mnt ##掛載
第二步:對創建的lvm進行拓展與拉伸
監控命令:
watch -n 1 'echo "=pvinfo=";pvs;echo "=vginfo=";vgs;echo =lvinfo=;lvs;df -h /mnt'
lvextend -L 250M /dev/lzt/lv0 ##拓展分區爲250M
xfs_growfs /dev/lzt/lv0 ##對xfs文件系統進行拉伸(須知: 1.當執行完上條命令時,由監控命令可知新拓展的區域尚未xfs文件系統 2.掛載的位置沒有變化,故可直接拉伸)
當一個pv不能知足拓展與拉伸的需求時,操做以下命令:
pvcreate /dev/vdb2 ##創建第二個pv
vgextend lzt /dev/vdb2 ##將第二個pv添加到創建的vg組裏
lvextend -L 600M /dev/lzt/lv0 ##拓展分區爲600M
xfs_growfs /dev/lzt/lv0 ##對xfs文件系統進行拉伸
@@!!!第一步實例:
[root@localhost ~]# pvcreate /dev/vdb1
Physical volume "/dev/vdb1" successfully created
[root@localhost ~]# vgcreate lzt /dev/vdb1
Volume group "lzt" successfully created
[root@localhost ~]# lvcreate -L 110M -n lv0 lzt
Rounding up size to full physical extent 112.00 MiB
Logical volume "lv0" created
[root@localhost ~]# mkfs.xfs /dev/lzt/lv0
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
第二步實例:
[root@localhost ~]# lvextend -L 250M /dev/lzt/lv0
[root@localhost ~]# xfs_growfs /dev/lzt/lv0
[root@localhost ~]# lvextend -L 600M /dev/lzt/lv0
Extending logical volume lv0 to 600.00 MiB
Insufficient free space: 87 extents needed, but only 61 available ##報錯:現有的pv不能知足要求,須要87個pe纔可成功,現有的只有61個
[root@localhost ~]# pvcreate /dev/vdb2
[root@localhost ~]# vgextend lzt /dev/vdb2
Volume group "lzt" successfully extended
[root@localhost ~]# lvextend -L 600M /dev/lzt/lv0
Extending logical volume lv0 to 600.00 MiB
Logical volume lv0 successfully resized ##成功拓展與拉伸
[root@localhost ~]# xfs_growfs /dev/lzt/lv0
第三步:分區的縮小:
(xfs文件類型不能進行縮小,ext文件類型能夠)
umount /mnt/
mkfs.ext4 /dev/lzt/lv0 ##首先格式化lvm爲ext4文件類型
e2fsck -f /dev/lzt/lv0 ##對lvm中的數據進行查看(在縮小lvm前必需要作的)
resize2fs /dev/lzt/lv0 550M ##將lvm文件系統的大小縮小爲500M
lvreduce -L 500M /dev/lzt/lv0 ##將lv大小縮小爲500M
pvremove /dev/vdb1 /dev/vdb2 ##將/dev/vdb1中的數據移動到/dev/vdb2中(切記:此過程當中不要執行ctrl+c命令操做)
vgreduce lzt /dev/vdb1 ##將/dev/vdb1從vg組中移除
pvremove /dev/vdb1 ##刪除pv(即/dev/vdb1)
第三步:分區縮小實例:
[root@localhost ~]# umount /mnt
[root@localhost ~]# e2fsck -f /dev/lzt/lv0
[root@localhost ~]# resize2fs /dev/lzt/lv0 550M
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
[root@localhost ~]# lvreduce -L 550M /dev/lzt/lv0
[root@localhost ~]# umount /mnt
[root@localhost ~]# e2fsck -f /dev/lzt/lv0
[root@localhost ~]# resize2fs /dev/lzt/lv0 200M
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
[root@localhost ~]# lvreduce -L 200M /dev/lzt/lv0
[root@localhost ~]# pvmove /dev/vdb1 /dev/vdb2
/dev/vdb1: Moved: 28.0%
/dev/vdb1: Moved: 100.0%
[root@localhost ~]# vgreduce lzt /dev/vdb1
[root@localhost ~]# pvremove /dev/vdb1
@@@!!!易出現錯誤:
若先縮減lv則會出現錯誤,此時應先將設備的空間升上來,
若刪除了正在使用的設備,則需執行vgreduce --removemissing lzt(vg組名)
操做實例:
[root@localhost ~]# lvreduce -L 100M /dev/lzt/lv0
WARNING: Reducing active and open logical volume to 100.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y
Reducing logical volume lv0 to 100.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]# df
[root@localhost ~]# umount /mnt
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/mapper/lzt-lv0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
[root@localhost ~]# resize2fs /dev/lzt/lv0
resize2fs 1.42.9 (28-Dec-2013)
Please run 'e2fsck -f /dev/lzt/lv0' first.
[root@localhost ~]# e2fsck -f /dev/lzt/lv0
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/mapper/lzt-lv0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
[root@localhost ~]# lvextend -L 200M /dev/lzt/lv0
Extending logical volume lv0 to 200.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]# mount /dev/lzt/lv0 /mnt
[root@localhost ~]# vgextend lzt /dev/vdb1
Volume group "lzt" successfully extended
[root@localhost ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Command (m for help): d
Partition number (1,2, default 2): 1
Partition 1 is delete
Command (m for help): wq
[root@localhost ~]# partprobe
[root@localhost ~]# vgreduce --removemissing lzt
@@@!!!lvm快照:
lvcreate -L 12M -n lv0-backc -s /dev/lzt/lv0
實例:
[root@localhost mnt]# touch file
[root@localhost mnt]# cd
[root@localhost ~]# lvcreate -L 12M -n lv0-backc -s /dev/lzt/lv0
Logical volume "lv0-backc" created
[root@localhost ~]# mount /dev/lzt/lv0-backc /mnt
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
file lost+found
[root@localhost mnt]# rm -fr file
[root@localhost mnt]# ls
lost+found
[root@localhost mnt]# lvremove /dev/lzt/lv0-backc
Logical volume lzt/lv0-backc contains a filesystem in use.
[root@localhost mnt]# cd
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/lzt/lv0-backc
Do you really want to remove active logical volume lv0-backc? [y/n]: y
Logical volume "lv0-backc" successfully removed
[root@localhost ~]# lvcreate -L 12M -n lv0-backc -s /dev/lzt/lv0
Logical volume "lv0-backc" created
[root@localhost ~]# mount /dev/lzt/lv0-backc /mnt
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ll
total 16
-rw-r--r--. 1 root root 0 Nov 6 03:04 file
drwx------. 2 root root 16384 Nov 6 02:09 lost+found
@@@!!!lvm的刪除:
lvremove /dev/lzt/lv0-backc
lvremove /dev/lzt/lv0
vgremove lzt
pvremove /dev/vdb2
實例:
[root@localhost ~]# lvremove /dev/lzt/lv0-backc
Logical volume lzt/lv0-backc contains a filesystem in use.
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/lzt/lv0-backc
Do you really want to remove active logical volume lv0-backc? [y/n]: y
Logical volume "lv0-backc" successfully removed
[root@localhost ~]# lvremove /dev/lzt/lv0
Logical volume lzt/lv0 contains a filesystem in use.
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/lzt/lv0
Do you really want to remove active logical volume lv0? [y/n]: y
Logical volume "lv0" successfully removed
[root@localhost ~]# vgremove lzt
Volume group "lzt" successfully removed
[root@localhost ~]# pvremove /dev/vdb2
!!!本身課後去查看awk,grep正則表達式,expect.
######第六單元.shell腳本命令#####
######1.diff#####
diff file file1 ##比較兩個文件的不一樣
-c ##顯示周圍的行
-u ##按照統一格式輸出生成補丁
-r ##比較兩個目錄中文件的不一樣
patch file file.path ##打補丁
-b ##備份原文件
#####2.grep######
grep 關鍵字 文件|目錄 ##在文件或目錄中查找含有關鍵字的行
grep -i ##忽略大小寫
-n ##顯示關鍵字所在行的序號(第幾行)
-c ##顯示過濾結果的行數
-v ##反向過濾
-E "關鍵字1|關鍵字2" ##過濾多個關鍵字
-r 目錄 ##在目錄中查找含有關鍵字的文件
注意: ^關鍵字 ##以關鍵字開頭
關鍵字$ ##以關鍵字結尾
例如:
[root@station mnt]# grep -i root passwd | grep -E "^root|root$" -v -n
2:operator:x:11:0:operator:/root:/sbin/nologin
4:test:root:nihao
6:nihao:test:ROOT
[root@station mnt]# grep -i root passwd -n | grep -E "^root|root$" -v
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
34:root:nihao:test
35:test:root:nihao
37:nihao:test:ROOT
[root@station mnt]# grep -E -i "^root|root$" -v passwd -n |grep root
10:operator:x:11:0:operator:/root:/sbin/nologin
35:test:root:nihao
[root@station mnt]# grep -E "^root|root$" -v passwd -n | grep root
10:operator:x:11:0:operator:/root:/sbin/nologin
35:test:root:nihao
#####3.cut#####
cut ##截取字符
cut -d 分隔符 ##指定分隔符
cut -f 1,7 ##顯示指定的列
cut -c 1-4 ##顯示指定序號的字符(第幾個到第幾個)
例子:只輸出執行ifconfig後,顯示的ip
[root@station mnt]# ifconfig eth0 | grep -i "inet " | cut -c 14-24
172.25.7.10
[root@station mnt]# ifconfig eth0 | grep "inet "|awk -F " " '{print $2,$1}'
172.25.7.10 inet
#####4.sort####
sort
-n ##純數字排序
-u ##去冗餘
|uniq -c ##去除冗餘並統計冗餘的次數
-t ##指定分隔符
-k ##指定列
例子:
[root@station mnt]# sort -n file |uniq -c
3
3 0
2 2
1 3
1 4
1 5
1 10
1 21
1 54
1 112
1 02220
1 51122
[root@station mnt]# vim file
[root@station mnt]# sort -t : -k 2 file -n
A:
A:
A:
A:0
A:0
A:0
A:2
A:2
A:3
A:4
A:5
A:10
A:21
A:54
A:112
A:02220
A:51122
[root@station mnt]# sort -t : -k 2 file -n | cut -c 3-7
0
0
0
2
2
3
4
5
10
21
54
112
02220
51122
[root@station mnt]# sort -t : -k 2 file -n | cut -d : -f 2
0
0
0
2
2
3
4
5
10
21
54
112
02220
51122
#####5.uniq###
sort file |uniq -c ##去除冗餘並統計冗餘的次數
-d ##顯示冗餘的行
-u ##顯示惟一的行
@@注意:直接執行uniq命令時,只有相鄰的兩行相同時纔會被系統識別爲冗餘行,可是在和sort搭配使用時則是在文件全文中尋找相同行(冗餘行)
例子:[root@station mnt]# uniq -c file
1 1
1 22
1 33
1 2
2 1
1 55
1 2213
1 551156
2 22
1 4
1 112
1 15
[root@station mnt]# uniq -d file
1
22
[root@station mnt]# uniq -u file
1
22
33
2
55
2213
551156
4
112
15
[root@station mnt]# sort file |uniq -c
3 1
1 112
1 15
1 2
3 22
1 2213
1 33
1 4
1 55
1 551156
[root@station mnt]# sort file |uniq -d
1
22
[root@station mnt]# sort file |uniq -u
112
15
2
2213
33
4
55
551156
#####6.sed###
sed 's/原字符/替換字符/g' file
sed -e '策略1' -e '策略2' file
sed -i file ##把轉換後的內容輸入到指定文件
sed '3,5s/原字符/替換字符/g' ##3-5行替換
注: 下面的x表示數字
sed xd ##屏蔽指定行
sed xp ##複製指定行
sed -n xp ##只顯示指定行
附加:
cat -b filename ##給文件顯示內容加行號
tr 'a-z' 'A-Z' < filename ##將filename中的小寫字母替換成大寫
#####7.awk#####
awk 用法:awk ' pattern {action} '
變量名 含義
ARGC 命令行變元個數
ARGV 命令行變元數組
FILENAME 當前輸入文件名
FNR 當前文件中的記錄號
FS 輸入域分隔符,默認爲一個空格
RS 輸入記錄分隔符
NF 當前記錄裏域個數
NR 到目前爲止記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
一、awk '/101/' file 顯示文件file中包含101的匹配行。
awk '/101/,/105/' file
awk '$1 == 5' file
awk '$1 == "CT"' file 注意必須帶雙引號
awk '$1 * $2 >100 ' file
awk '$2 >5 && $2<=15' file
二、awk '{print NR,NF,$1,$NF,}' file 顯示文件file的當前記錄號、域數和每一行的第一個和最後一個域。
awk '/101/ {print $1,$2 + 10}' file 顯示文件file的匹配行的第1、二個域加10。
awk '/101/ {print $1$2}' file
awk '/101/ {print $1 $2}' file 顯示文件file的匹配行的第1、二個域,但顯示時域中間沒有分隔符。
三、df | awk '$4>1000000 ' 經過管道符得到輸入,如:顯示第4個域知足條件的行。
四、awk -F "|" '{print $1}' file 按照新的分隔符「|」進行操做。
awk 'BEGIN { FS="[: \t|]" }
{print $1,$2,$3}' file 經過設置輸入分隔符(FS="[: \t|]")修改輸入分隔符。
Sep="|"
awk -F $Sep '{print $1}' file 按照環境變量Sep的值作爲分隔符。
awk -F '[ :\t|]' '{print $1}' file 按照正則表達式的值作爲分隔符,這裏表明空格、:、TAB、|同時作爲分隔符。
awk -F '[][]' '{print $1}' file 按照正則表達式的值作爲分隔符,這裏表明[、]
五、awk -f awkfile file 經過文件awkfile的內容依次進行控制。
cat awkfile
/101/{print "\047 Hello! \047"} --遇到匹配行之後打印 ' Hello! '.\047表明單引號。
{print $1,$2} --由於沒有模式控制,打印每一行的前兩個域。
六、awk '$1 ~ /101/ {print $1}' file 顯示文件中第一個域匹配101的行(記錄)。
七、awk 'BEGIN { OFS="%"}
{print $1,$2}' file 經過設置輸出分隔符(OFS="%")修改輸出格式。
八、awk 'BEGIN { max=100 ;print "max=" max} BEGIN 表示在處理任意行以前進行的操做。
{max=($1 >max ?$1:max); print $1,"Now max is "max}' file 取得文件第一個域的最大值。
(表達式1?表達式2:表達式3 至關於:
if (表達式1)
表達式2
else
表達式3
awk '{print ($1>4 ? "high "$1: "low "$1)}' file
九、awk '$1 * $2 >100 {print $1}' file 顯示文件中第一個域匹配101的行(記錄)。
十、awk '{$1 == 'Chi' {$3 = 'China'; print}' file 找到匹配行後先將第3個域替換後再顯示該行(記錄)。
awk '{$7 %= 3; print $7}' file 將第7域被3除,並將餘數賦給第7域再打印。
十一、awk '/tom/ {wage=$2+$3; printf wage}' file 找到匹配行後爲變量wage賦值並打印該變量。
十二、awk '/tom/ {count++;}
END {print "tom was found "count" times"}' file END表示在全部輸入行處理完後進行處理。
1三、awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4;
END {print "The total is $" cost>"filename"}' file gsub函數用空串替換$和,再將結果輸出到filename中。
1 2 3 $1,200.00
1 2 3 $2,300.00
1 2 3 $4,000.00
awk '{gsub(/\$/,"");gsub(/,/,"");
if ($4>1000&&$4<2000) c1+=$4;
else if ($4>2000&&$4<3000) c2+=$4;
else if ($4>3000&&$4<4000) c3+=$4;
else c4+=$4; }
END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file
經過if和else if完成條件語句
awk '{gsub(/\$/,"");gsub(/,/,"");
if ($4>3000&&$4<4000) exit;
else c4+=$4; }
END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file
經過exit在某條件時退出,可是仍執行END操做。
awk '{gsub(/\$/,"");gsub(/,/,"");
if ($4>3000) next;
else c4+=$4; }
END {printf "c4=[%d]\n",c4}"' file
經過next在某條件時跳過該行,對下一行執行操做。
1四、awk '{ print FILENAME,$0 }' file1 file2 file3>fileall 把file一、file二、file3的文件內容所有寫到fileall中,格式爲
打印文件並前置文件名。
1五、awk ' $1!=previous { close(previous); previous=$1 }
{print substr($0,index($0," ") +1)>$1}' fileall 把合併後的文件從新分拆爲3個文件。並與原文件一致。
1六、awk 'BEGIN {"date"|getline d; print d}' 經過管道把date的執行結果送給getline,並賦給變量d,而後打印。
1七、awk 'BEGIN {system("echo \"Input your name:\\c\""); getline d;print "\nYour name is",d,"\b!\n"}'
經過getline命令交互輸入name,並顯示出來。
awk 'BEGIN {FS=":"; while(getline< "/etc/passwd" >0) { if($1~"050[0-9]_") print $1}}'
打印/etc/passwd文件中用戶名包含050x_的用戶名。
1八、awk '{ i=1;while(i<NF) {print NF,$i;i++}}' file 經過while語句實現循環。
awk '{ for(i=1;i<NF;i++) {print NF,$i}}' file 經過for語句實現循環。
type file|awk -F "/" '
{ for(i=1;i<NF;i++)
{ if(i==NF-1) { printf "%s",$i }
else { printf "%s/",$i } }}' 顯示一個文件的全路徑。
用for和if顯示日期
awk 'BEGIN {
for(j=1;j<=12;j++)
{ flag=0;
printf "\n%d月份\n",j;
for(i=1;i<=31;i++)
{
if (j==2&&i>28) flag=1;
if ((j==4||j==6||j==9||j==11)&&i>30) flag=1;
if (flag==0) {printf "%02d%02d ",j,i}
}
}
}'
1九、在awk中調用系統變量必須用單引號,若是是雙引號,則表示字符串
Flag=abcd
awk '{print '$Flag'}' 結果爲abcd
awk '{print "$Flag"}' 結果爲$Flag
以上轉自chinaunix,如下是本身的總結:
求和:
$awk 'BEGIN{total=0}{total+=$4}END{print total}' a.txt -----對a.txt文件的第四個域進行求和!
$ awk '/^(no|so)/' test-----打印全部以模式no或so開頭的行。
$ awk '/^[ns]/{print $1}' test-----若是記錄以n或s開頭,就打印這個記錄。
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----若是第一個域以兩個數字結束就打印這個記錄。
$ awk '$1 == 100 || $2 < 50' test-----若是第一個或等於100或者第二個域小於50,則打印該行。
$ awk '$1 != 10' test-----若是第一個域不等於10就打印該行。
$ awk '/test/{print $1 + 10}' test-----若是記錄包含正則表達式test,則第一個域加10並打印出來。
$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----若是第一個域大於5則打印問號後面的表達式值,不然打印冒號後面的表達式值。
$ awk '/^root/,/^mysql/' test----打印以正則表達式root開頭的記錄到以正則表達式mysql開頭的記錄範圍內的全部記錄。若是找到一個新的正則表達式root開頭的記 錄,則繼續打印直到下一個以正則表達式mysql開頭的記錄爲止,或到文件末尾
######8.grep正則表達式####
grep 命令是支持正則表達式的一個多用途文本搜索工具,他的通常格式爲:
grep [選項] [模式] [文件...]
grep命令的選項用於對搜索過程進行補充說明。grep命令的模式十分靈活,能夠是字符串、變量,還能夠是正則表達式。不管模式是何種形式,只要模式中包含了空格,就須要使用雙引號或單引號將模式引發來。
下面具體說明grep選項的含義和用法。
一、-c選項: -c選項表示輸出匹配字符串行的數量。
例子:#輸出文件00.pem中包含jk的行的數量
$ grep -c jk 00.pem
6
$
二、-n選項:列出全部的匹配行,並輸出行號。
例子:#輸出文件00.pem中包含jk行的行號和行。
$ grep -n jk 00.pem
1:jkfrdjkfdkl
2:dkjfkjkjelkrge
4:frjkj-----------kltijkert
9:fjkdkle;roitoer
13:djkfthe the23
14:the jejk ekj44
$
三、-選項: 顯示不包含模式的全部行。
例子:#輸出文件00.pem中不包含jk的行的數量
$ grep -vc jk 00.pem
12
$
四、-i選項: 表示grep命令不區分大小寫。
例子:#輸出文件00.pem中包含 jk(不論大小寫)的行
$ grep -i jk 00.pem
Jkfrdjkfdkl
dkjfkjkjelkrge
frjkj-----------kltijkert
fJKdkle;roitoer
djkfthe the23
the jejk ekj44
$
五、-h選項: 表示查詢多文件時不顯示文件名。
六、-l選項: 表示只列出符合匹配的文件名,而不列出具體匹配行。
七、-s選項: 表示不顯示不存在或無匹配文本的錯誤信息。
例1:#未使用-s選項,打印錯誤信息
$ grep jk dk 00.pem
grep: dk: 沒有那個文件或目錄
00.pem:Jkfrdjkfdkl
00.pem:dkjfkjkjelkrge
00.pem:frjkj-----------kltijkert
00.pem:the jejk ekj44
例2:#使用-s選項後,不打印錯誤信息
$ grep -s jk dk 00.pem
00.pem:Jkfrdjkfdkl
00.pem:dkjfkjkjelkrge
00.pem:frjkj-----------kltijkert
00.pem:the jejk ekj44
$
八、-r選項: 表示遞歸搜索,不只搜索當前目錄,並且搜索子目錄。
九、-w和-x選項:
-w選項表示匹配整詞,即以模式的字面意思去解析它。
-x選項是匹配整行,即只有當文件中有整行內容與模式匹配時,grep命令才輸出改行結果。
例:說明grep命令的-w和-x選項的區別
$ cat world.txt
Hello World
World
World Cup
African
One One World
$
#搜索包含單詞「World」的文本行
$ grep -w 'World' world.txt
Hello World
World
World Cup
One One World
$
#搜索整行文本是單詞「World」的行
$ grep -x 'World' world.txt
World
&
十、-q選項: 表示grep將再也不輸出任何結果,而是以退出狀態表示搜索是否成功。0表示成功,1表示未搜索到知足模式的文本行,2表示命令或程序因爲錯誤而未能執行。
例1:grep命令搜索成功
$ grep -q -x 'World' world.txt
$ echo $?
0
$
例2:grep命令未搜索到知足模式的文本行
$ grep -q -x 'World African' world.txt
$ echo $?
1
$
例3:grep命令執行失敗
$ grep -q -x 'World African' world
grep : world : 沒有那個文件或目錄
$ echo $?
2
$
十一、-b和-o選項:
grep -b選項打印匹配行距文件頭部的偏移量,以字節爲單位。若是在-b選項後面再加上-o選項,grep命令將打印匹配的詞距文件頭部的偏移量。
例1:#第一條命令:打印匹配行距文件頭部的偏移量
$ grep -b -w 'World' world.txt
0:Hello World
12:World
18:World Cup
36:One One World
$
例2:#第一條命令:打印匹配詞距文件頭部的偏移量
$ grep -b -o -w 'World' world.txt
6:World
12:World
18:World
44:World
$
下面介紹一下grep和正則表達式結合使用的例子。
一、匹配行首:
元字符「^」表示行首,若是須要匹配.pem爲後綴的文件中以橫槓「-」開頭的行,可輸入以下命令:
$ grep ^- *.pem
二、設置大小寫:
利用-i符號可使grep命令不區分大小寫,[ ]符號也能夠實現這一功能。
例如:
$ grep -n [Jj][Kk] 00.pem
Jkfrdjkfdkl
dkjfkjkjelkrge
frjkj-----------kltijkert
fJKdkle;roitoer
the jejk ekj44
$
三、匹配重複字符:
能夠用「.」符號和「*」符號來實現。
例1:grep和.符號
#表示搜索00.pem文件中以/字符開始、中間4個任意字符、第6個字符仍爲/的行。
$ grep ^/..../ 00.pem
/home/globus/fff.pem
例2:grep和*符號
#表示搜索00.pem文件中以「-」開頭,重複「-」符號任意次,而後是B字符的行。
$ grep ^-*B 00.pem
----------Bkjfkerj
$
四、轉移符:
若是匹配的目標字符串包含的元字符,則須要用轉義符「\」屏蔽其意義。
例: #搜索「-」符號重複5次的文本行。
$ grep '\-\{5\}' 00.pem
----------Bkjfkerj
frjkj----------Bkltijkert
riuitieoe---erj-----rg
$
五、POSIX字符類:
類名 意義
[:upper:] 表示大寫字母[A-Z]
[:lower:] 表示小寫字母[a-z]
[:digit:] 表示阿拉伯數字[0-9]
[:alnum:] 表示大小寫字母和阿拉伯數字[0-9 a-z A-Z]
[:space:] 表示空格或Tab鍵
[:alpha:] 表示大小寫字母[a-z A-Z]
[:cntrl:] 表示Ctrl鍵
[:graph:][:print:] 表示ASCII碼33-16之間的字符
[:xdigit:] 表示16進制數字[0-9 A-F a-f]
六、精確匹配:
正則表達式中的「\<\>」用於精確匹配。
例子:
$ grep the 00.pem #列出包含the字符串的行
the jskj 'dff
ddfd df the rlt
gkjtuthelr112
dkfthe the23
the jejk ekj44
jhh lk klrthe 'f'
$
$ grep "\<the\>" 00.pem #精確匹配the這個單詞
the jskj 'dff
ddfd df the rlt
the jejk ekj44
$
七、或字符
或字符「|」是擴展的正則表達式中定義的,grep須要加上-E才能支持它。grep -E等價於egrep。
例:搜索00.pem中以冒號「:」或以非英文字母結尾的行。
$ egrep "[^[:alpha:]]$|:$" 00.pem
aslkdlsf:
tji54oio7yu:
gkjtuthelr112
dkfthe the23
the jejk ekj44
jhh lk klrthe 'f'
erkjgtl35:
rgjtkry67
---------------------------------------------
$ grep -E"[^[:alpha:]]$|:$" 00.pem
aslkdlsf:
tji54oio7yu:
gkjtuthelr112
dkfthe the23
the jejk ekj44
jhh lk klrthe 'f'
erkjgtl35:
rgjtkry67
######9.expect#####
1,使用「-c」選項,從命令行執行expect腳本
expect可讓你使用「-c」選項,直接在命令行中執行它,以下所示:
$ expect -c 'expect "\n" {send "pressed enter\n"}
pressed enter
$
若是你執行了上面的腳本,它會等待輸入換行符(\n)。按「enter」鍵之後,它會打印出「pressed enter」這個消息,而後退出。
2,使用「-i」選項交互地執行expect腳本
使用「-i」選項,能夠經過來自於標準輸入的讀命令來交互地執行expect腳本。以下所示:
$ expect -i arg1 arg2 arg3
expect1.1>set argv
arg1 arg2 arg3
expect1.2>
正常狀況下,當你執行上面的expect命令的時候(沒有「-i」選項),它會把arg1當成腳本的文件名,因此「-i」選項可讓腳本把多個參數當成一個連續的列表。
當你執行帶有「-c」選項的expect腳本的時候,這個選項是十分有用的。由於默認狀況下,expect是交互地執行的。
3,當執行expect腳本的時候,輸出調試信息
當你用「-d」選項執行代碼的時候,你能夠輸出診斷的信息。以下所示:
$ cat sample.exp
# !/usr/bin/expect -f
expect "\n";
send "pressed enter";
$ expect -d sample.exp
expect version 5.43.0
argv[0] = expect argv[1] = -d argv[2] = sample.exp
set argc 0
set argv0 "sample.exp"
set argv ""
executing commands from command file sample.exp
expect: does "" (spawn_id exp0) match glob pattern "\n"? no
expect: does "\n" (spawn_id exp0) match glob pattern "\n"? yes
expect: set expect_out(0,string) "\n"
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) "\n"
send: sending "pressed enter" to { exp0 pressed enter}
4,使用「-D」選項啓動expect調試器
「-D」選項用於啓動調試器,它只接受一個布爾值的參數。這個參數表示提示器必須立刻啓動,仍是隻是初始化調試器,之後再使用它。
$ expect -D 1 script
「-D」選項左邊的選項會在調試器啓動之前被處理。而後,在調試器啓動之後,剩下的命令纔會被執行。
$ expect -c 'set timeout 10' -D 1 -c 'set a 1'
1: set a 1
dbg1.0>
5,逐行地執行expect腳本
一般,expect會在執行腳本以前,把整個腳本都讀入到內存中。「-b」選項可讓expect一次只讀取腳本中的一行。當你沒有寫完整個腳本的時候,這是十分有用的,expect能夠開始執行這個不完整的腳本,而且,它能夠避免把腳本寫入到臨時文件中。
$ expect -b
6,讓expect不解釋命令行參數
你可使用標識符讓expect不解釋命令行參數。
你能夠像下面這樣的讀入命令行參數:
$ cat print_cmdline_args.exp
#!/usr/bin/expect
puts 'argv0 : [lindex $argv 0]';
puts 'argv1 : [lindex $argv 1]';
當執行上面的腳本的時候,會跳過命令行選項,它們會被當成參數(而不是expect選項),以下所示:
$ expect print_cmdline_args.exp -d -c
argv0 : -d
argv1 : -c