马哥教育M28第十三天到第十五天学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了马哥教育M28第十三天到第十五天学习总结相关的知识,希望对你有一定的参考价值。

马哥第十三天、

<font size=4>1.lftp安装:直接在Linux上登录远程服务器下载ftp上的文件,查询lftp使用方式
lftp 用户名:密码@ftp地址:传送端口(默认21)
也可以先不带用户名登录,然后在接口界面下用login命令来用指定账号登录,密码不显示

     查看文件与改变目录
     ls     !ls (凡是加!,指的是操作本地计算机环境)
     cd 对应ftp目录
     下载
     get当然是可以的,还可以:
     mget -c *.pdf    #把所有的pdf文件以允许断点续传的方式下载
     mirror  aaa/     #将aaa目录整个的下载下来,子目录也会自动复制
     pget -c -n 10 file.dat   #以最多10个线程以允许断点续传的方式下载file.dat,可以通过设置 pget:default-n的值而使用默认值上传
     同样的put、mput都是对文件的操作,和下载类似.
     mirror -R 本地目录名
     将本地目录以迭代(包括子目录)的方式反向上传到ftp  site
     模式设置
     set ftp:charset  gbk  远程ftp site用gbk编码,对应的要设置为uft8,只要替换为gbk为utf8即可
     set file:charset utf8 本地的charset设定为utf8,如果你是gbk,相应改掉
     set ftp:passive-mode 1
     使用被动模式登录,有些site要求必须用被动模式或者主动模式才可以登录,这个开关就是设置这个的,0代表不用被动模式
     书签
     其实命令行也可以有书签,在lftp终端提示符下:
     bookmark add ustc   #就可以把当前正在浏览的ftp site用ustc作为标签储存起来。以后在shell终端下,直接lftp ustc就可以自动填好用户名和密码,进入对应的目录了。
     bookmark edit
     会调用编辑器手动修改书签。当然,也可以看到,这个书签其实就是个简单的文本文件,用户名、密码都可以看到
     配置文件
     vim /etc/lftp.conf
     一般,会添加这几行:
     set ftp:charset gbk
     set file:charset utf8
     set pget:default-n 5
     这样,就不用每次进入都要打命令了,其他的set可以自己tab然后help来看。

2.b编译安装过程中出现任何需要另外安装的,结合yum search 包名 通过模糊搜索得到相应的软件包然后选择合适的进行安装

3.dd if of : 可以使用dd克隆复制命令对硬盘分区或者文件系统进行重命名</font>

马哥第十四天、

<font size=4>1.硬盘最外围磁道0磁道的第一个分区是MBR 512字节, 446B->boot loader , 64B分区表 , 2B校验(55 AA)
2.mknod: linux下创建块设备或者字符设备的命令 make Node
block c设备
mknod /app/magedisk b 8 5
mknod /app/dvd b 11 0
mknod /app/tty1 c 4 1
mknod其中的一种重要用途是:为Linux系统中的硬盘创建一个新的设备名(实际上就是创建新的文件设备b,主设备号、次设备号与硬盘对应一致,可以形象的看作是为设备创建了一个链接;同理,在对硬盘进行了分区之后,对应的应该是为分区创建新的文件设备名->创建时需要对应分区的主要设备号、次要设备号即可!);mknod不能跟随硬盘同步分区(只是认为的根据实际设备号进行创建设备文件)

CHS 磁盘三围
cylinder 柱面
head 磁头
sector 扇区

track 磁道
512sector数/ track head * track数/盘面
B KB MB GB TB PB EB ZB YB BB NB DB

echo ‘- - -‘ > /sys/class/scsi_host/host0/scan 注意:虚拟机或者说是虚拟化下对新增硬盘快速生效方式是给系统虚拟硬盘所在host下的面板传递信号- - - ,以便引导系统去重读分区信息;但是在生产环境下基本不太可能,用的都是直接物理机
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt #mount挂载的只能说是文件系统,只是在分区后分区设备默认被创建了同命名的文件系统,挂载后,挂载点里面的所有内容暂时被隐藏,卸载才能看到
cp /etc/fstab /mnt/
umount /mnt/
hexdump -C -n 512 /dev/sdb -v #查看磁盘前512字节信息

skip表示跳过if(源)设备多少字节
seek表示跳过of设备多少字节
dd if=/dev/sdb of=/app/mbr.bak bs=1 count=512
dd if=/dev/sdb of=/app/mbrtable.bak bs=1 count=64 skip=446
partx -d /dev/sdb --nr 1
dd if=/app/mbrtable.bak of=/dev/sdb bs =1 count=64 seek=446
partprobe /dev/sdb
mount /dev/sdb1 /mnt/

实验:破坏sdb的55AA,然后通过sda恢复 千万注意:dd是具有极大破怀兴的,通常仅作测试的时候使用,正常情况下不需使用dd命令!!
dd if=/dev/zero of=/dev/sdb bs=1 count=2 seek=510
dd if=/dev/zero of=/dev/sdb bs =1 count=2 skip=510 seek=510

磁盘设备文件命名规则:
CentOS5及其之前:SCSI, SATA, SAS, USB: /dev/sd
IDE: /dev/hd

CentOS6及其之后:SCSI, SATA, SAS, IDE ,USB:/dev/sd
KVM: /dev/vd

Xen: /dev/xvd*

3.测试磁盘I/O读写速度:
思考问题1.通过学习了硬盘等相关硬件知识后,应该学会思考:利用什么去测试硬盘的读写速率,进一步联想去挑选什么硬盘,如何在工作中测试并使用满足要求的性能高的I/O磁盘

用法:
1.测试IO读:
hdparm -t --direct /dev/sda3 #CentOS7中需要使用root用户身份手动安装hdparm
2.测试IO写:
sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1000KB count=20000;sync)"

                        dd bs=1M   count=20000  if=/dev/zero  of=test.dd  conv=fdatasync      #dd命令测试是IO的顺序写和读方式
        3.查看文件系统块大小
                            tune2fs -l /dev/sda1 |grep Block
      上面的命令行有些复杂,做下详细的解释:
                        (1)sync 命令用来刷新文件系统的缓冲区,执行sync命令实际的作用是把内存中的数据缓冲写入到磁盘中。先执行下sync,是为了减少对后面测试的影响。也可以使用 echo 3 > /proc/sys/vm/drop_caches来清除缓存。
                        (2)time 命令用来测试命令的执行时间,shell内建还有一个time命令,我们这里使用全路径来指定使用的是非内建命令。
                        -p 选项设置时间的输出格式为POSIX缺省时间格式,单位是秒,在后面的测试小节可以看到time -p  的输出形式
                        (3)bash 命令 -c 选项的作用是将后面的字符串参数当做bash脚本来执行,看起来有些画蛇添足,好像直接执行也是可以的。其实不然,因为后面字符串包含了两条命令行,而time命令需要统计这两条命令行的执行时间。
                        (4)小括号的意思是另起一个子进程来执行括号中的脚本,dd这条命令行这里就不讲了,重点是sync命令,因为当dd退出时,这条命令行提交的大部分内容都在内存缓冲区(写缓存),甚至如果机器的内存相比于 你提交的数据要大得多,那可能数据都在内存中,而再执行sync才能将内存中的数据写入到磁盘中,否则就成了测试内存的写速度,那显然是不对的。

4.针对CentOS6系列的分区必须注意硬盘大小,如果分区大于2T,就使用不了MBR分区dos类型,必须使用parted 或gdisk来分区gpt类型(支持64位寻址大于2T)
5.注意:使用卷标对设备进行挂载或者开机自动挂载 -> /etc/fstab
LABLE=DEVICENAME mount LABLE=DEVICENAME /mnt
生产环境,写入配置文件的时候,UUID进行唯一识别 blkid;
mount UUID=‘‘ /mnt

6.e2fsck -f 针对ext类型的文件系统进行强制修复,可交互
在文件系统因外界压力不正常卸载或未卸载!

7.快速查看占用某一分区或者文件系统的进程以及详细信息 lsof
fuser -v /fsname/
fuser -vmk /fsname 递归杀死占用挂载点进程(涉及到目录,必须考虑递归问题)

作业:
1.给当前虚拟机增加一个80G大小的硬盘,要求当前生效可以使用fdisk -l 查看到该硬盘,名为/dev/sdb
2.为/dev/sdb创建一个新的设备名为/app/magediska
mknod /app/magediska b 8 16
3.对/app/magediska进行分区,要求如下
a.创建/app/magediska1分区,大小为100M,格式化为ext4文件系统,并挂载到/mnt/diska目录下
b.将/etc/fstab文件复制到在/mnt/diska上后卸载分区。
c.仅备份/app/magediska分区的分区表至/app/mbr.bak
dd if=/dev/sdb of=/app/mbr.bak bs=1 count=16 skip=446
d.使用dd命令初始化/app/magediska硬盘,使其没有分区表信息
dd if=/dev/zero of=/dev/sdb bs=1 count=512
e.再使用fdisk命令创建/app/magediska2分区,格式化为ext3文件系统,并挂载到/mnt/diskb目录下并将/etc/passwd文件复制到该目录下。
f.利用c步骤的备份还原/app/magediska1分区,确保/app/mageddd if=/dev/sdb of=/app/mbr.bak bs=1 count=16 skip=446iska2分区不受影响。最后再次将/app/magediska1挂载到/mnt/diska下,确保其中的fstab文件依然可用。
dd if=/app/mbr.bak of=/dev/sdb bs=1 count=16 seek=446

二、
Bios+MBR BIOS+MBR+GPT
UEFI+GPT
传统的BIOS启动由于MBR的限制,默认是无法引导超过2.1TB以上的硬盘的;GPT类型分区超2.1TB;

fdisk parted gdisk
非交互式增加一个1G的分区:
echo -e "n\n\n+1G\nw\n" |fdisk /dev/sda
cat <<EOF | fdisk /dev/sda
n

                +1G
                w
                EOF
            echo  -e "n\n\n\n+1G\n\nw\ny\n"  |gdisk /dev/sdb
            parted  /dev/sdb   primary  1000(sector)   2000

            查看内核是否同步分区表信息的方法:
            lsblk(只限于CentOS6及其以上的系统)
            cat /proc/partitions
            ls  /dev/sdX*

            更新方法如下:
            partprobe /dev/sda  (CentOS6、CentOS7)
            CentOS6只限于对非系统所在硬盘使用
            partx -a  /dev/sda  更新增加的分区
            partx  -d  /dev/sda  --nr 6-7  删除分区6和7

    postfix(25 smtp) /var/mail  nfs  Sun  Oracle
    dovecot (pop3 imap)
    pop3.qq.com          smtp.qq.com
    Windows  Linux  CIFS  samba

    查看当前操作系统所支持的文件系统
                    cat /proc/filesystems

    journal
                    /var/log    排错
                    oracel
                                        redo  log    -1000
                    ext3    
                                    inode   bitmap
                                        block    bitmap
                  格式化
                                    mkfs.xfs   /dev/sdb1
                                    mkfs   -t   xfs   /dev/sdb2
                    e2fsck   -f    /dev/sdb1

mount
-t vsftype:指定要挂载的设备上的文件系统类型
-r readonly, 只读挂载
-w read and write ,读写挂载
-n 不更新/etc/mtab, mount 不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能) #mount -a 自动挂载的只能是/etc/fstab中尚未挂载的设备,已经挂载的不再进行挂载,需要使用remount重新挂载
-L ‘LABLE’ 以卷标指定挂载设备
-U ‘UUID‘ 以UUID指定要挂载的设备
-B --bind 绑定目录到另一个目录上
查看内核追踪到的已经挂载的所有设备
cat /proc/mounts
挂载选项
-o options: 挂载文件系统的选项,多个选项使用逗号分隔
async:异步模式
sync : 同步模式,内存更改时,同时写磁盘
atime/noatime:包含目录和文件
diratime/nodiratime :目录的访问时间戳
auto/noauto :是否支持自动挂载,是否支持-a 选项
exec/noexec: 是否支持将文件系统上运行应用程序
dev/nodev : 是否支持在此文件系统上使用设备文件
suid/nosuid : 是否支持suid和sgid权限
remount :重新挂载
ro : 只读
rw:读写
user/nouser: 是否允许普通用户挂载此设备,/etc/fstab使用
acl:启用此文件系统上的acl功能
loop:使用Loop设备
defaults:相当于rw,suid,dev,exec,auto,nouser,async

findmnt /dev/sdb1
lsof /mount/ 查看访问该挂载点目录的所有进程信息
fuser -vmk /mount 强制结束所有访问该挂载点及其子目录的进程

作业:
1.当/etc/fstab中uuid错误时且末位为非0时,系统无法正常启动的问题解决
1.因为硬盘挂载检测是开机启动初期根目录先以只读的方式挂载,当紧接着一位分区设备末位非0强制检测,导致检测失败不通过,在根目录及其下所有目录和文件只读情况下,应该先 mount -o remount,rw / ; 然后修改/etc/fstab文件中错误的uuid或者将末位改为0重新启动挂载,然后跳过再正确修改!
2.小总结:使用uuid挂载时,结束退出前最好将以挂载的文件系统卸载,再正确关机

2.创建一个2G的文件系统,块大小为2048byte, 预留1%可用空间,文件系统类型ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项.
                            fdisk  |gdisk(|partx) /dev/sdb  .. 分区2G
                            1.mke2fs  -L TEST  -b 2048  -t ext4  -m 1 /dev/sdb3
                            2.tune2fs -o acl test    ;   blkid   /dev/sdb3
                            3.vim /etc/fstab
                                UUID=...             /app/test       ext4       default        00

swap的扩展
整块硬盘的swap
mkswap /dev/sdX
swapon /dev/sdX
基于分区的swap
fdisk|gdisk|parted 对sdX进行分区,注意转换分区类型为82
mkswap /dev/sdXn
swapon /dev/sdXn
基于文件的swap
dd if=/dev/zero of=/path/swap.img bs=1M count=xxx
mkswap /path/swap.img
swapon /path/swap.img
swapon -s 查看所有的swap信息
swapon -a 加载/etc/fstab当中所有尚未加载的swap设备
-p 指定swap的优先级,数字越大越优先
swapoff 关闭指定的swap设备
-a 关闭所有的swap设备
在/etc/fstab中书写的方式如下:
UUID=c4983177-34ae-4b99-bd81-42011b536088 swap swap defaults,pri=1 00
UUID=73fe49f8-b44a-42fa-bcbd-1639058f5326 swap swap defaults,pri=2 0 0

在Linux下挂载ntfs格式的U盘
安装 ntfs-3g包
配置epel仓库
[fedora-epel]
name=epel
baseurl=http://172.18.0.1/fedora-epel/7/x86_64/
gpgcheck=0
mount /dev/sdb4 /mnt

光盘挂载
                mount  /dev/sr0   /media
                mount   /dev/cdrom   /media

                free
                du -sh  直接统计整个目录及其内部使用大小
                常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统 目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。

quota
ext文件系统的quota
1.mount -o usrquota,grpquota /dev/sdXn /path
2.quotacheck -cugm /path
3.quotaon /path
4.setquota username 100M 200M 80 100 /data

edquota -u username 交互式
edquota -p username1 username2
将username1的quota策略复制给username2

练习:
为liubei guanyu zhangfei caocao四个用户配置一个共享目录,要求如下:
1.共享目录的大小为3GB,要求为ext4类型的文件系统,挂载到/data目录。
fdisk /dev/sda
partx -a /dev/sda
mkdir /data
mke2fs -t ext4 /dev/sdaX
mount /dev/sdaX /data

2.设置liubei guanyu zhangfei三个用户可以在共享目录下创建以及删除文件
for n in liubei guanyu zhangfei caocao ;do useradd $n ;done
groupadd shuguo
chgrp shuguo /data
chmod 775 /data
for m in liubei guanyu zhangfei ;do usermod -aG shuguo $m;done

3.刘关张创建的文件,彼此之间可以读写,caocao及其他用户仅能读, caocao在该目录下也能创建文件,仅其自己可以读写,其他人无权限。
其他人对该目录,仅可访问
chmod g+s /data
umount /data; mount /dev/sdaX /data
setfacl -m u:caocao:rwx /data
vim ~caocao/.bashrc
umask 026

4.guanyu zhangfei仅能在该目录下创建100M的文件,caocao最多创建10个文件。
vim /etc/fstab
/dev/sdaX /data ext4 defaults,usrquota,grpquota 0 0
umount /data; mount -a
setquota guanyu 0 100M 0 0 /data/
edquota -p guanyu zhangfei
setquota caocao 0 0 0 10 /data/

5.guanyu zhangfei所创建的文件仅自己可以删除,liubei可以删除所有人的文件
chown liubei /data/
chmod o+t /data/

for n in $(seq 1 10);do
echo $n
done

n=1
while [ $n -le 10];do
echo $n
n=$[$n+1]
sleep 0.5s
done

n=1
until [ $n -gt 10 ];do
echo $n
n=$[$n+1]
sleep 0.5s
done

n=1
while true;do
echo $n
n=$[$n+1]
sleep 0.5s
if [ $n -eq 11 ];then
break
fi
done</font>

以上是关于马哥教育M28第十三天到第十五天学习总结的主要内容,如果未能解决你的问题,请参考以下文章

马哥教育第十六天至十九天学习总结

Web前端学习第十三天·fighting_HTML页面设计技巧总结

IT十八掌掌第十三天课程总结

高强度学习训练第十三天总结:使用Netty实现一个http服务器

学习python第十三天

第十三天