第十六章16-存储媒介
前面学习了文件级别操作数据,本章从设备级别来考虑数据。
本章介绍一些概念和用来管理存储设备的重要命令。命令汇总:
mount:挂载一个文件系统,umount:卸载一个文件系统,
fsck:检测和修复一个文件系统,fdisk:分区表控制器
mkfs:创建文件系统,fdformat格式化一张软盘
dd:把面向块的数据直接写入设备,
genisoimage(mkisofs):创建一个iso 9660映像文件
wodim(cdrecord):把数据写入光存储媒介
md5sum:计算MD5校验码
16.1 挂载和卸载存储设备
连接设备到文件树
linux不同于windows(win每个设备都有单独的文件系统树)
/etc/fstab 文件列出了 系统启动时默认挂载的设备
依次是 设备名-挂载点-文件系统类型-选项-频率-次序
[seven@localhost 桌面]$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jan 19 04:34:05 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=e50eb468-ff85-4ea5-9f3b-39622796e39f / ext4 defaults 1 1
UUID=7469402f-f5d5-448f-919e-a82068be6976 /boot ext4 defaults 1 2
UUID=aa348058-8c3c-4ffc-ad8b-cbcaaee6c92a swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults
16.2 查看挂载的文件系统列表
mount命令被用来挂载文件系统,
若挂载到非空目录,你不能看到这个目录中原来的文件
通过不带参数的执行将会显示一系列当前挂载的文件系统
格式是: 设备_on_挂载点_type_文件系统类型(可选项)[root@localhost upan]# mount /dev/sdb1 /etc/cdrom/upan
mount: mount point /etc/cdrom/upan does not exist
[root@localhost upan]# mount /dev/sdb1 /mnt/cdrom/upan
[root@localhost upan]# cd /mnt/cdrom
[root@localhost cdrom]# ls
upan
[root@localhost cdrom]# cd upan/
[root@localhost upan]# ls
2223.txt
[root@localhost upan]# ls /mnt/cdrom/upan
2223.txt
[root@localhost upan]# umount /dev/sdb1
umount: /mnt/cdrom/upan: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost upan]# cd
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)16.3 确定设备名称
fd:软盘 hd:硬盘 lp:打印机
sd:磁盘 sr:光盘
跟踪内核信息: sudo tail -f /var/log/messages
[root@localhost ~]# sudo mkdir /mnt/flash
[root@localhost ~]# mount /dev/sdb1 /mnt/flash
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 13498888 3955440 8851072 31% /
tmpfs 501512 396 501116 1% /dev/shm
/dev/sdb1 7979712 128 7979584 1% /media/00E8-CB54_
/dev/sdb1 7979712 128 7979584 1% /mnt/flash16.4 创建新的文件系统
再次确认指定了正确的系统设备名称,格式化操作会擦除数据16.5 用fdisk命令操作分区
fdisk可以帮助我们编辑、删除和创建分区
第一步,卸载已挂载的设备(umount)
第二步,指定待操作分区(fdisk /dev/sdb)
第三步,发送command命令操作
16.6 用mkfs命令创建一个新的文件系统
分区编辑工作可以用,mkfs命令创建新的文件系统实验例子:mkfs -t ext3 /dev/sdb1
mkfs -t vfat /dev/sdb116.7 测试和修复文件系统
系统启动会执行fsck程序检查文件系统的完整性
/etc/fstab 每行的最后一个数字指定了设备的检测顺序,
若最后一个数字为0则表示,不需要检测。
检测一个设备首先它应该被卸载实验例子: fsck /dev/sdb1
16.8 格式化磁盘
使用fdformat程序可以格式化设备,
使用mkfs程序创建分区实验例子:fdformat /dev/fd0
实验例子:mkfs -t msdos /dev/fd0
16.9 直接把数据移入/出设备
把设备看做许多数据块,把设备镜像克隆到另一个设备
注意再三检查输入输出的位置
dd if=input_file of=output_file实验例子: dd if=/dev/sdb1 of=/dev/sdb2
实验例子: dd if=/dev/sdb1 of=/dev/mirror.img16.10 创建CD-ROM映像
第一步构造iso,第二步写入CD-ROM实验例子: dd if=/dev/cdrom of=ubuntu.iso(复制光盘)
实验例子: genisoimage -o cd-rom.iso -R -J ~/cd-rom-files16.11 写入CD-ROM镜像
烧录光盘
把文件挂载成光盘(-o loop):mount -t iso9660 -o loop image.iso /mnt/iso_image
清除CD-RW内容:wodim dev=/dev/cdrw blank=fast
虚拟光驱:mkdir /mnt/iso_image
mount -t iso9660 -o loop image.iso /mnt/iso_image
写入镜像: wodim dev=/dev/cdrw image.iso
第十七章17-网络系统
Linux被用来创建各式各样的网络系统和配置,如防火墙等。
本章学习,linxu与其他网络主机交互的命令行。命令汇总:
ping:发送ICMP ECHO_REQUEST 软件包到网络主机
traceroute:打印到一台网络主机的路由数据包
netstat:打印网络连接,路由表
ftp:文件传输
wget:非交互的下载器
ssh:远程登录
URI:抽象的统一资源标识,URL强调的是给资源定位
URL:具体的资源标识的方式,URI强调的是给资源标记命名。
17.1 检查和监测网络
ping 命令发送一个特殊的网络数据包(IMCP ECHO REQUEST)
traceroute 命令会显示从本地到指定主机要经过的所有“跳数”
对没有提供标志信息的路由器会用星号代替netstat [-ie]命令用来检查网络设置和统计数据
netstat中 eth0-因特网接口;lo-内部回环网络接口(自言自语用)
实验例子:
[root@localhost ~]# netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:0C:29:BA:D5:C1
inet addr:192.168.232.150 Bcast:192.168.232.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feba:d5c1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:96188 errors:0 dropped:0 overruns:0 frame:0
TX packets:48861 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:118106892 (112.6 MiB) TX bytes:3277556 (3.1 MiB)lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:27258 errors:0 dropped:0 overruns:0 frame:0
TX packets:27258 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7986894 (7.6 MiB) TX bytes:7986894 (7.6 MiB)netstat [-r] 命令 显示路由表
实验例子:
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.232.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.232.2 0.0.0.0 UG 0 0 0 eth0
17.2 网络中传输文件
使用ftp、lftp、wget 下载
命令:ftp fileservername-启动ftp连接上ftp服务器
命令:anaoymous 登录名,某些情况需要邮箱形式的密码
命令:cd pub/ cd_images/Ubuntu-8.04 (跳转到公共下载目录)
命令:lcd Desktop (下载存放路径,跳转到Desktop目录,工作目录改为 Desktop)
命令:get filename 开始传输文件到本地(desktop)
命令:bye 退出会话17.3 与远程主机安全通信
telnet是明文传输不安全,使用SSH可以解决认证和安全交流的问题(抵御中间人攻击和加密传输)
ssh remote-sys : 连接上远程主机
删除废弃的ssh钥匙: ~/.ssh/known_hosts
例子: ssh remote-sys commands;输出结果会显示到本地系统shell会话中实验例子:
[seven@localhost playground]$ ssh 127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is 9a:5b:26:a6:c7:ed:25:52:5c:db:fc:92:f5:30:ef:60.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
seven@127.0.0.1's password:
Last login: Mon Mar 18 10:13:09 2019 from localhost有趣的例子: ssh remote-sys 'ls \* > dirlist.txt' 获得目录信息
xload命令可以把服务器的窗口出现在本地
命令:scp(安全复制) scp [bob@]remote-sys:document.txt
命令:sftp(ftp安全版) sftp remote-sys;ls;lcd Desktop;get filename to filename2
windows可以使用putty登录到linux第十八章18-查找文件
一个正常运作的系统会包含很多文件,我们该如何查找文件?
得益于系统良好的组织结构,配合命令查找起来不太困难。
locate:通过名字来查找文件
find:在目录层次结构中搜索文件
xargs:从标准输入生成和执行命令行
touch:更改文件时间
stat:显示文件或文件系统状态18.1 locate(查找文件的简单方法)
locate命令将会搜索它的路径名数据库
实验例子:
查找以zip开头的程序,假定包含匹配程序的目录以‘bin/’结尾
[seven@localhost ~]$ locate bin/zip
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipgrep
lacate 结合其他工具比如说grep命令
实验例子: 路径包含zip和bin的文件
[seven@localhost ~]$ locate zip | grep bin
/bin/gunzip
/bin/gzip
/usr/bin/bunzip2
/usr/bin/bzip2locate常见的变体有slocate和mlocate
如果locate不能正常使用,可能是updatedb未完成18.2 find(查找文件的复杂方式)
find:搜索一个或多个目录。
find ~: 输出主目录列表
命令:查找主目录所有文件和文件夹,共计行数
[seven@localhost ~]$ find ~ | wc -l
6269
[seven@localhost ~]$ find ~ -type d | wc -l
307
命令:查找主目录中 类型为文件的数量
[seven@localhost ~]$ find ~ -type f | wc -l
5959[seven@localhost ~]$ find ! -type f -name "\*.JPG" -size +1M | wc -l
0
命令:查找文件安全属性配置错误的文件
[seven@localhost ~]$ find ~ (-type f -not -perm 0600) -or (-type d -not -perms 0700 )
#) bash: syntax error near unexpected token `('18.3 预定义的操作
find 命令允许基于搜索结果来执行操作
-delete删除匹配文件;-ls;-print;-quitfind ~ -type f -and -name '*.BAK' -and -print
18.4 用户定义的行为
除上面预定义的行为外,我们也可以唤醒随意的命令。
格式 [find ~ type f] -exec command {}
实际使用时,花括号要转义。
使用-ok 代替 -exec 可以在执行每个命令之前询问用户(yes/no)
实验例子:
[seven@localhost ~]$ find ~ -type f -name 'foo*' -ok ls -l '{}' ';'
< ls ... /home/seven/桌面/foo.txt > ? y
-rw-rw-r--. 1 seven seven 84 3月 14 19:41 /home/seven/桌面/foo.txt18.5 提高效率
当exec行为被使用的时候,每匹配一个文件会启动一个新的指定命令的实例
ls -l file1 file2 可以把搜索结果结合成一个参数列表还有一种传统方法(使用外部命令)xargs,从标准输入接受输入,把输入转换
为一个特定命令的参数列表
实验例子:
[seven@localhost ~]$ find ~ -type f -name 'foo\*' -print | xargs ls -l
总用量 52
-rw-rw-r--. 1 seven seven 592 3月 17 19:18 dirlist.txt
-rw-r--r--. 1 seven seven 0 3月 9 19:22 myfile.txt
-rw-r--r--. 1 seven seven 1493 3月 5 18:42 passwd
drwxrwxr-x. 38 seven seven 4096 3月 7 19:08 Pics
drwxrwxr-x. 5 seven seven 4096 3月 7 19:30 picturess
drwxrwxr-x. 101 seven seven 4096 3月 17 22:20 playground18.6 返回操练场
[seven@localhost ~]$ find playground -type f -name 'file-A' | wc -l
100find 命令的选项:
-depth优先处理目录中的文件;
-maxdepth level目录数最大级数;
-mount 不要搜索目录树中的挂载文件;
第十九章19-归档和备份
系统管理员会定时备份文件,来保护数据安全。
我们将会看看几个经常用来管理文件集合的程序。
gzip-压缩或者展开文件
bzip2-块排序文件压缩器
归档程序:
tar-磁带打包工具
zip-打包和压缩文件
rsync-同步远端文件和目录19.1 压缩文件
locate命令将会搜索它的路径名数据库
压缩:gzip filename 或 bzip2 filename
解压:gzip -d filename 或 gunzip filename
浏览压缩包: zcat foo.txt.gz | less
19.2 归档文件
模式c:为文件和/或目录列表创建归档文件
模式x:抽取归档文件
模式r:追加具体的路径到归档文件的末尾
模式t:列出归档文件的内容
归档就是收集许多文件,捆成大文件
tar程序是用来归档文件的经典工具.tar 或 .tgz 文件(已压缩)
zip和 unzip用途是为了与windows交换文件,linux 中 tar和gzip更方便实验例子: [~] tar cf playground.tar playground(相对路径)
[~] tar cf playground2.tar ~/playground(绝对路径)
[~] tar tf playground.tar
[foo] tar xf ../playground.tar
[~] zip -r playground.zip playground
[~] unzip ../playground.zip19.3 rsync(同步文件和目录)
暂不支持远端到远端的复制
[seven@localhost playground]$ alias backup=' rsync -av --delete /etc /home /usr/local /media/BigDisk/backup'
[seven@localhost playground]$ backup第二十章20-正则表达式
正则表达式是 操作文本的工具
正则表达式是 一种符号表示法
grep程序会在文件内部中,查找指定的正则表达式
例如: 列出位于bin目录中,文件名包含zip的所有文件
[seven@localhost ~]$ ls /usr/bin | grep zip
bunzip2
bzip2
例如: grep程序在所有列出的文件中搜索字符串bzip
[seven@localhost ~]$ grep bzip dirlist*.txt
bbbbbzipppp
例如: 对匹配项本身不感兴趣,只是查看文件名,如果使用-L 参数,查看不包含列表
[seven@localhost ~]$ grep -l bzip dirlist*.txt
dirlist.txt
圆点字符可以用来匹配任意字符, 如果使用-H参数,表示强制输出文件名
[seven@localhost ~]$ grep -h '.zip' dirlist*.txt
bbbbbzipppp
插入符号(头^)和美元符号(尾$)被看作是定位点20.1 中括号表达式和字符类
除了在给定位置匹配任意字符外,还可以通过中括号表达式匹配多个字符
实验例子:
[seven@localhost ~]$ grep -H '[bg]zip' dirlist*.txt
dirlist.txt:bbbbbzipppp20.2 传统的字符区域
在文件内部进行搜索
[seven@localhost ~]$ grep -H '^[A-Z]' dirlist*.txt
dirlist.txt:The quick brown fox jumped over hte lazy dog. was cool.
20.3 POSIX 字符集
POSIX相容的程序将会使用字典排序而不是ASCII顺序,传统字符区域可能无法工作20.4 POSIX 基本的Vs. 扩展的正则表达式
在POSIX中表达式分为基本正则表达式和扩展的正则表达式,
在 BRE 中,字符 (, ), {,和 } 用反斜杠转义后,被看作是元字符, 相反在 ERE 中,在任意元字符之前加上反斜杠会导致其被看作是一个文本字符。20.5 限定符
?:匹配一个元素零次或一次
+ : 匹配一个元素 一次或多次
{}: 匹配一个元素 特定的次数20.6 让正则表达式工作起来
使用grep命令验证一个电话本
使用find 命令 查找文件名,当某一行包含的字符串匹配上了
一个表达式的时候,grep命令会打印出这一行,然而find命令
要求路径名精确地匹配这个正则表达式
使用locate命令 查找文件名
在less和vim中查找文本 ,按下/ 键 ,然后输入正则表达式
:hlsearch 激活高亮功能