当前位置: 首页 > 工具软件 > linux-command > 使用案例 >

linux命令行入门(四)《The Linux Command Line》

澹台博文
2023-12-01

第十六章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/flash

16.4    创建新的文件系统
            再次确认指定了正确的系统设备名称,格式化操作会擦除数据

16.5    用fdisk命令操作分区
            fdisk可以帮助我们编辑、删除和创建分区
            第一步,卸载已挂载的设备(umount)
            第二步,指定待操作分区(fdisk /dev/sdb)
            第三步,发送command命令操作
            
16.6    用mkfs命令创建一个新的文件系统
            分区编辑工作可以用,mkfs命令创建新的文件系统

            实验例子:mkfs -t ext3 /dev/sdb1
                    mkfs -t vfat /dev/sdb1

16.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.img

16.10   创建CD-ROM映像
            第一步构造iso,第二步写入CD-ROM

            实验例子: dd if=/dev/cdrom of=ubuntu.iso(复制光盘)
            实验例子: genisoimage -o cd-rom.iso -R -J ~/cd-rom-files

16.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/bzip2

            locate常见的变体有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;-quit

            find ~ -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.txt             

18.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 playground

18.6    返回操练场
            [seven@localhost ~]$ find playground -type f -name 'file-A' | wc -l
            100

            find 命令的选项:  
                -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.zip

19.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:bbbbbzipppp

20.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  激活高亮功能

            
                                                            

 类似资料: