• linux知识扫盲


    一、磁盘分区的配置

      mbr与gpt的区别:

      参考资料网站1:    https://zhidao.baidu.com/question/457998790987659965.html

      参考资料网站2:  http://www.360doc.com/content/18/0901/23/11935121_783145790.shtml

    二、什么是LVM

      LVM(逻辑卷管理程序),是Linux环境下对磁盘分区进行管理的一种机制。

      参考资料网站  https://baike.baidu.com/item/LVM/6571177?fr=aladdin

    三、什么是挂载点

      一棵大树(根目录/)有很多树枝(目录,挂载点),每个树枝上都挂着一个箱子(分区,存储空间)。

    四、基础命令

      0.改变文件属性与权限:

        chgrp:改变文件所属群组   chgrp  群组名  目录或文件

        chown:改变文件拥有者     chown  账号名[账号名:群组名]  目录或文件

        chmod:改变文件的权限    chmod  xyz[ugoa +-= rwx]  目录或文件

      1.文件与目录的监视:  ls  [-adl]  [--full-time]  [--time=atime,ctime]  文件名或目录名称  

        -a : 全部文件,连同隐藏文件

        -d : 仅列出目录

        -l  : 包含属性和权限。

        full-time : 显示完整时间

        atime(access time) 访问时间,ctime(change time) 权限、所有者改变时间,mtime(modify time) 内容改变时间

      2.复制:  cp  [-aipr]  来源文件或目录  目标文件或目录

        -a :所有全部复制,跟-p有点像

        -i  :复制时会询问是否复制

        -p :文件属性一起复制(权限,用户,时间)

        -r :复制目录时使用,不改变权限就用-a

      3.移除: []rm  [-fir]  文件或目录

        -f:忽略不存在的文件,不询问

        -i:复制时会询问是否移除

        -r:删除目录时使用

        :不询问直接操作

      4.移动或更名: mv  [-fiu]  来源文件或目录  目标文件或目录

        -f:文件存在,不询问直接覆盖

        -i:文件存在,询问是否覆盖

        -u:文件存在,只在来源文件比较新时才覆盖。-

      5.取路径的文件名/目录名:  basename/dirname  路径 

      6.文件内容查阅:

        cat  [-n]  文件  连同空白行打印出行号

        tac  [-n]  文件  从最后一行到第一行开始打印

        less/more  文件    可以对显示出来的内容进行翻页。

        head/tail  [-n number]  文件  取前面/后面几行,默认显示10行。

        od  [-t  TYPE]  文件  非纯文本档的显示。

      7.修改文件时间或建新文件:  touch  [-td]  文件

        -d:修改日期: touch  -d  "2  days  ago"  文件

        -t:修改时间

      8.文件预设权限:  umask  [-S] 

        -S:已字符形式显示,无者数字形式显示

      9.修改文件默认预设权限:  umask  [xyz]  

        “ [ ] ”中的数字是减去权限。比如此群主默认权限是666,设置002后,变成664。

      10.配置文件隐藏属性:  chattr  [+-=][ai]  文件或目录

        +:增加一个特殊参数

        -:减少一个特殊参数

        =:设定特殊参数

        a:只能增加

        i:不能做任何变动

      11.显示文件隐藏属性: lsattr  [-adR]  文件或目录

        -a:将隐藏文件的属性显示出

        -d:仅列出目录本身的属性

        -R:连同子目录的数据也一并列出

      12.文件特殊权限:

        SUID:只对二进制程序有效;出现在文件拥有者的x权限上;执行者有x的权限;仅在执行该程序的过程中有效;执行者将具有该程序拥有者的权限。

        SGID:对文件或目录都可以设定;出现在群组的x权限上;执行者对程序有x的权限;执行者在执行的过程中获得该群组的支持

        SBIT:只对目录有效;用户对此目录具有w,x权限时,在此目录下创建文件或目录,只有自己和root有权利删除该文件;无法删除其他人的文件。

      13.文件特殊权限设定:

        SUID:4  u+s

        SGID:2  g+s

        SBIT:1  o+t

      14.观察文件类型:  file  文件

      15.命令文件名的搜寻:  which  [-a]  命令

        -a:列出所有可以找到的指令。

      16.文件名的搜寻1:  whereis  [-lbmsu]   文件或目录名  ps:只在几个特定目录进行搜索

        -l:搜寻了哪几个目录

        -b:只找二进制binary文件

        -m:只找说明文件manual路径下的文件

        -s:只找source来源文件

        -u:搜寻不在上面三个项目的其他特殊文件。

      16-2.文件名的搜寻2:  locate  [-icl]  文件或目录名  ps:查找前先进行更新命令  updatedb

        -i:忽略大小写的差异

        -c:不输出文件名,仅计算找到的文件数量

        -l:仅输出几行的意思,例如输出5行则是  -l  5  

      17.文件名的搜寻3:  find  [PATH]  [option]  [action]  ps:全盘进行搜索,很操硬盘,无法必要少用

        PATH:路径,比如“/”,“/home”

        option:选项与参数

        action:行为

          find  PATH  -mtime  [n,+n,-n]                      【第n天的当天内,n天之前,n天之内】被改动过的文件

          find  PATH  -newer file                      列出比file文件还要新的文件名

          find  PATH  [-user,-group]   使用者账号,群组名

          find  PATH  [-nouser,-nogroup]

          find  PATH  [-uid,-gid]  n                     n为数字

          find  PATH  -name  filename                   filename可以是广泛匹配 ,“*部分文件名*”

      18.更新磁盘内容。 sync

      19.列出文件系统的整体磁盘使用量:  df  [-ahi]  [目录或文件名]

        -a:列出所有的文件系统

        -h:以较易阅读的 GB MB KB等格式自行显示

        -i:不用显示磁盘容量,而以inode的数量来显示

      20.评估文件系统的磁盘使用量:  du  [-as]  文件或目录

        -a:列出所有的文件与目录容量

        -s:列出总量,而不列出每个个别的目录占用的容量

      21.建立实体链接:  ln  [-s]  源文件  目标文件

        -s:有s就是symbolic link(类似快捷方式),无s就是hard link。

      22.列出系统上的所有磁盘列表:  lsblk  [-ip]  [device]

        -i:使用ASCII的线段输出,不要使用复杂的编码

        -p:列出改装置的完整文件名!而不是仅列出最后的名字而已

        MAJ:MIN:主要:次要装置代码

      23.列出装置的UUID等参数:  blkid

      24.列出磁盘的分区表类型与分区信息: parted  device_name  print

      25.磁盘分区:  gdisk或fdisk  装置名称

      26.更新linux核心的分区表信息:  partprobe  -s

      27.磁盘格式化:mkfs.xfs  [-f]  装置名称

        -f:强制格式化

      28.XFS文件系统检验:  xfs_repair  [-fnd]  装置名称

        -f:后面的装置是个文件而不是实体装置

        -n:仅做检查不做修改

        -d:进入单人模式时,针对根目录进行检查与修复,务必随便使用

      29.挂载文件系统: 

          mount  -a

          mount  [-l]

          mount  LABEL=''"  挂载点

          mount  UUID=''" 挂载点

          mount  装置文件名  挂载点

        -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来

        -l:单纯的输入mount会显示目前挂载的信息。有 -l 可增列Label名称

      30.从新挂载目录(remount)并加入参数rw与auto:  mount  -o  remount,rw,auto  挂载点

      31.卸除装置文件或挂载点:  umount  [-fn]  装置文件或挂载点

        -f:强制卸除

        -n:不更新/etc/mtab情况下卸除

      32.磁盘/文件系统参数修订:  mknod  装置文件名  [bcp] [Major]  [Minor]

        b:设定装置名称成为一个周边储存设备文件,例如磁盘

        c:设定装置名称成为一个周边输入设备文件,例如鼠标

        p:设定装置名称成为一个FIFO文件

        Major:主要装置代码

        Minor:次要装置代码

      33.修改XFS文件系统的UUID与Label name:  xfs_admin  [-lu]  [-L label_name]  [-U uuid]  装置文件名

        -l:列出这个装置的label name

        -u:列出这个装置的UUID

        -L:设定这个装置的Label name

        -U:设定这个装置的UUID

      34.产生新的UUID: uuidgen

      35.挂载光盘/DVD映像文件:  mount  -o  loop  映像文件  挂载点

      36.开机挂载/etc/fstab级/etc/mtab:

        /etc/fstab的文件内容:[装置/UUID等]  [挂载点]  [文件系统]  [文件系统参数]  [dump]  [fsck]

      36.特殊装置loop挂载: 

        1.  dd  if=/dev/zero  of=/srv/loopdev  bs=1M  count=512  创建一个大文件(/srv/loopdev),块复制。

        2.  ll  -h  /srv/loopdev

        3.  mkfs.xfs  -f  /srv/loopdev

        4.  blkid  /srv/loopdev

        5.  mount  -o  loop  UUID="取上一步查出的值"  /mnt

        6.  df  /mnt

        7.  nano  /etc/fstab

        8.  /srv/loopdev  /data/file  xfs  default,loop  0  0

        9.  umount  /mnt

        10.  mkdir  /data/file

        11.  mount  -a

        12.  df  /data/file

        总结:分区 -- 格式化 -- 挂载 -- 设置/etc/fstab -- 卸载挂载点 -- 创建新的挂载点 -- 重新挂载所有

      37.利用gdisk/fdisk创建新分区槽(一下例子已创建swap为例):

        1.  fdisk /dev/sda

        2.  建立新分区槽(n) -- 输入分区槽大小(?G) -- 生成新的分区槽

        3.  partprobe    强制更新分区槽

        4.  lsblk   查看新的分区槽

        5.  mkswap  /dev/vda6   创建swap格式

        6.  blkid  /dev/vda6 

        7.  free   观察分区槽剩余容量

        8.  swapon /dev/vda6  启动swap。  关闭swap的命令是:swapoff

        9.  free

        10.  swapon -s

        11.  nano /etc/fstab

        12.  UUID=''' swap swap default  0 0

        总结: fdisk建立新分区槽 -- partprobe强制更新分区表 -- mkfs.xfs -f格式化 -- mkdir创建挂载点 -- nano /stc/fstab增加一行配置 -- mount -a重新挂载所有。

      38.利用GNU的parted进行分区行为: parted  [装置即入径]  [指令 [参数]]

        指令功能:

          新增分区:mkpart  [ primary | logical | extended ]  [ ext4 | vfat | xfs ]  开始  结束

          显示分区:print

          删除分区:rm  [ partition ]

        1.  parted  /dev/vda  unit  mb  print

        2.  parted  /dev/vda  mkpart  primary  fat32  36.0GB  36.5GB  (最后两个参数是分区的起始点和结束点)

        3.  parted  /dev/vda  print

        4.  partprobe

        5.  lsblk  /dev/vda7

        6.  mkfs  -t  vfat  /dev/vda7

        7.  blkid  /dev/vda7

        8.  nano  /etc/fstab

          UUID="上一步骤查到的UUID"  /data/win  vfat  defaults  0  0

        9.  mkdir  /data/win

        10.  mount  -a

        11.  df  /data/win

      39.了解下这6个文件系统是什么:

        boot sector  ,   引导扇区,启动区

        superblock  ,   记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及filesystem的格式与相关信息

        inode bitmap  ,   索引节点位图,记录使用与未使用的inode。

        block bitmap  ,   块的位图,记录使用与未使用的block。

        inode table  ,   记录文件属性:该文件的存取模式;该文件的拥有者与群组;该文件的容量;该文件的atime,ctime,mtime,SUID;该文件真正内容的指向。

        data block   ,  存放文件内容数据。

      40.gzip压缩:  gzip  [-vdc#]  文件名    (单个文件)

        -v:可以显示出原文件/压缩文件的压缩比等信息(占比源文件多少)

        -d:解压缩

        -c:gzip -c 文件名 > 文件名.gz    保留源文件

        -#:为数字的意思,默认是6。 数值越高压缩越慢,压缩比越好。

      41.在压缩文件中找出某个关键词的位置:  zgrep  -n  '关键词'  压缩文件

      42.  cat/more/less读取纯文本文档。 zcat/zmore/zless读取压缩后的压缩文件

      43.bzip2压缩:  xz/bzip2 [-vdc#] 文件名  (单个文件)

        同上

      44.打包指令:(多个文件或目录)

        打包与压缩:  tar  [-j]  [cv]  [-f  待建立的新文件名]  要被压缩的文件或目录名称

        查询:  tar  [-j]  [tv]  [-f  已有的tar文件名]

        解压:  tar  [-j]  [xv]  [-f  已有的tar文件名]  [-C  预解压缩的目录]

          -j:通过bzip2的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2 (-z:gzip*.tar.gz ; -J:xz*.tar.xz

          -c:建立打包文件

          -t:查看打包文件的内容含有哪些文件名

          -x:解打包或解压缩的功能

          -v:在压缩/解压缩的过程中,将正在处理的文件名属性显示出来

          -f:f后面要理解接要被处理的文件名

          -C:用于解压缩至指定目录

        备份:  time  tar  -jpcv  -f  备份的文件名  被备份的文件名     

          -time:会显示程序运作的时间

          -p(小写):保留备份数据的原本权限与属性

          -P(大写):保留绝对路径,即允许备份数据中含有根目录存在。

      45.仅解打包文件里的单一文件:  tar  -jxv  -f  已有的tar文件名  预解的文件

      46.打包某目录,但是不含该目录下的某些文件:  tar  -jcv  -f  /root/system.tar.bz2  --exclude=/root/etc*  --exclude=/root/system.tar.bz2   /etc   /root  (多个文件用空格隔开)

      47.仅备份比某个时刻还要新的文件:  tar  -jcv  -f  备份的文件名  --newer-mtime="2019/11/12"  被压缩的文件名

      48.将文件备份到磁带机:  tar  -cv  -f  磁带机名  被打包的文件

        联系题: -time tar  -jpcv  -f  /backups/backup-system-20150701.tar.bz2  --exclude=/home/loop* --exclude=/root/*.bz2.*  /etc/*  /home/*  /var/spool/mail/*  /var/spool/cron/*  /root

      49.备份xfs系统文件与还原: 

        ①备份

        xfsdump  [-L S_label]  [-M M_label]  [-l #]  [-f  备份文件名]  被备份文件名

          -L:xfsdump会记录每次备份的session表头,这里可以填写针对此文件系统的简易说明

          -M:xfsdump  可以记录储存的标头,这里可以填写此媒体的简易说明

          -l:指定等级0-9,(默认为0,即完整备份)

          -f:有点类似tar。后面接产生的文件,亦可接例如 /dev/st0装置文件名或其他一般文件名等

        xfsdump  -I

           -I:从/var/lib/xfsdump/inventory列出目前备份的信息状态

        ②还原 

        xfsrestore -I  用来观察备份文件资源

        xfsrestore [-f 备份档] [-L S_Label] [-s] 待复原目录  单一文件全系统复原

        xfsrestore [-f 备份文件] -r 待复原目录   透过累积备份文件来复原系统

        xfsrestore [-f 备份文件] -i 待复原目录   进入互动模式

          -I :跟xfsdump相同的输出,可查询备份数据,包括Label名称与备份时间等

          -f:后面接的就是备份档

          -L:就是session的label name。 可用-I查询到的数据,在这个选项后输入

          -s:需要接某特定目录,即仅复原某一个文件或目录

          -r:如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,就需要这个来达成累积复原

          -i:进入互动模式,进阶管理员使用的。

      50.制作/修改可开机光盘映像档:

        1.  isoinfo  -d  -i  /home/Image文件.iso

        2.  mount  /home/image文件.iso  /mnt

        3.  mkdir  /srv/newcd

        4.  rsync  -a  /mnt/  /srv/newcd

        5.  ll  /srv/newcd

        6.  ll  /srv/newcd/isolinux/

        7.  cd  /srv/newcd

        8.  mkisofs  -o  /custom.iso  -b  isolinux/isolinux.bin  -c  isolinux/boot.cat  -no-emul-boot  -V  'CentOS 7 x86_64'  -boot-load-size  4  -boot-info-table  -R  -J  -v  -T

       51.光盘刻录工具: 

        wodim  --devices  dev=/dev/sr0...    查询刻录机的BUS位置

        wodim  -v  dev=/dev/sr0 blank=[fast|all]    抹除重复读写片

        wodim  -v  dev=/dev/sr0  -format        格式化DVD+RW 

          --devices:用在扫描磁盘总线并找出可用的刻录机,后续的装置为ATA借口

          -v:在cdrecord运作的过程中,显示过程

          dev/dev/sr0:找出此光驱的bus地址

          blank=[fast|all]:blank为抹除可重复写入的CD/DVD-RW,使用fast较快,all较完整

          -format:对光盘进行格式化

        wodim  -v  dev=/dev/sr0  [可用选项功能]  file.iso

          -data:指定后面的文件以数据格式写入,不是已CD音轨方式写入

          speed=X:指定刻录速度,例如CD可用speed=40为40倍数,DVD则可用speed=4

          -eject:指定刻录完毕后自动退出光盘

          driveropts=burnfree:打开Buffer Underrun Free模式的写入功能

          -sao:支持DVD-RW的格式

        实例步骤:

        1.  wodim  -v  dev=/dev/sr0  blank=fast  清除DVD旧记录

        2.  wodim  -v  dev=/dev/sr0  speed=4  -dummy  -eject  /tmp/system.img    刻录DVD

        3.  mount  /dev/sr0/mnt

        4.  df  -h  /mnt

        5.  ll  /mt

        6.  umount  /mnt

      52.  dd  if="input_file"  of=''output_file"  bs="block_size"  count="number"

        if:就是input file ,也可以是装置

        of:就是output file , 也可以是装置

        bs:规划的一个block的大小,若未指定则默认是512bytes(一个sector的大小)

        count:多少个bs的意思

          实用案例:备份映像档至USB中,并设置成开机默认USB

          1.  lsblk  /dev/sda

          2.  dd  if=/tmp/system.iso  of=/dev/sda

          3.  mount  /dev/sda  /mnt

          4.  ll  /mnt

      53.可以备份任何东西的指令 cpio    

        备份:cpio  -ovcB  > [file | device]

          -o:将数据复制输出到文件或装置上

          -B:让预设的Blocks可以增加至5120bytes

        还原:cpio  -ivcdu < [file | device]

          -i:将数据从文件或装置复制到系统中

          -d:自动建立目录。

          -u:自动的将较新的文件覆盖较旧的文件

          -t:需配合-i选项,可用在“察看”以cpio建立的文件或装置的内存

        察看:cpio  -ivct  < [file | device]

        实例:

          1.  find  boot | cpio  -ocvB > /tmp/boot.cpio

          2.  cpio  -idvc < /tmp/boot.cpio

    五。程序编辑器vi,vim

       1)一般指令模式按钮说明(常用)

        ctrl+f:屏幕向下移动一页

        ctrl+b:屏幕向上移动一页

        数字0或功能键home:移动到这一行的最前面字符处。

        $或功能键end:移动到这一行的最后面字符处

        G:移动到这个文件的最后一行

        nG:n为数字,移动到这个文件的第n行

        gg:移动到这个文件的第一行。

        n<Enter>:n为数字,光标向下移动n行

        /word:向光标以下寻找一个名称为word的字符串

        ?word:向光标以上寻找一个名称为word的字符串

        :n1,n2s/word1/word2/g:n1,n2为数字,在第n1行和第n2行之间寻找word1这个字符串,并取代为word2。  实例: :100,200s/word1/word2/g

        :1,$s/word1/word2/g:从第一行到最后一行寻找word1这个字符串,并取代为word2

        :1,$s/word1/word2/gc:从第一行到最后一行寻找word1这个字符串,并取代为word2。并跟用户确认是否取代。

        x , X:x向后删除,X向前删除

        dd:删除光标所在的一整行

        ndd:n为数字,删除光标以下的n行

        yy:复制光标所在的行

        nyy:n为数字,复制光标向下n行

        p , P:p为将已复制的数据在光标下一列粘贴,P为在光标上一列粘贴

        u:复原前一个动作

        Ctrl+r:重新做上一个动作

        .:重复前一个动作

        ZZ:储存后离开

       2)一般指令模式切换到指令模式的可用按钮

        :w  将编辑的数据写入硬盘文件中

        :q  离开vi

        :set nu  显示行号

        :set nonu  取消行号

        :r 文件名  将文件的内容读入现在打开的文件

        备注:需要永久显示行号,在/etc/vimrc(/etc/virc)文件中添加指令(set number)即可

       3)区块选择

         v:字符选择,会将光标经过的地方反白选择

        V:行选择,会将光标经过的行反白选择

        [Ctrl]+v:区块选择,可以用长方形的方式选择

        y:将反白的地方复制起来

        d:放反白的敌法删除掉

        p:将复制的区块,在游标处贴上

      4)多文件编辑

        :n  编辑下一个文件

        :N  编辑上一个文件

        :files  列出目前这个vim开启的所有文件

      5)多窗口功能

        :sp 文件名  打开多一个窗口

        [ctrl]+w+↓  窗口切换

        [ctrl]+w+q  结束下方窗口

      6)挑字补全功能

        [ctrl]+x -> [ctrl]+n  透过目前正在编辑的这个[文件的内容文字]作为关键词,予以补齐。

        [ctrl]+x -> [ctrl]+f  以当前目录内的[文件名]作为关键词,予以补齐

        [ctrl]+x -> [ctrl]+o  以扩展名作为语法补充,以vim内建的关键词,予以补齐

       7)vim环境设定与记录

        :set  hlearch/nohlsearch  设置搜索词高亮

        :set  autoindent/noautoindent  自动缩排

        :set  backup  自动备份

        :set  ruler  显示右下角的状态栏说明

        :set  showmode  在左下角显示--INSERT--之类的说明

        :set  backspace=(012)  按 i 进入编辑模式后,是否可以利用(backspace)退格键删除字符,2可以,01不行。

        :set all  显示目前所有的环境参数设定值

        :set  显示自行变动过的设定参数

        :syntax on/off  依据程序相关语法显示不同颜色

        :set bg=dark/light  可用于显示不同的颜色色调

        :set laststatus=2  设置两行状态行

        以上设置可在~/.vimrc中配置。

      8)常用指令示意图

         

      9)字符转换

        dos2unix  [-kn]  file  [newfile]

        unix2dos  [-kn]  file  [newfile]

          -k:保留改文件原本的mtime时间格式

          -n:保留原本的旧档,将转换后的内容输出到新文件

      10)编码转换

        iconv  --list

        iconv  -f  原本编码  -t  新编码  filename  [-o newfile]

          --list:列出iconv支持的语系数据

          -f:from,即来源于后面的原本编码格式

          -t:投,即后面的新编码是什么格式  

          -o file:保留原文件,另建新编码文件

       

     六、BASH

      1)命名别名设定功能:  alias  lm='ls -al'

      2)[ctrl]+u/k:从光标处向前/向后删除指令串

         [ctrl]+a/e:让光标移动到最前/最后 

      3)变量名字规则

        ①变量内容若有空格可用【“ ”】保留$原本特性或【‘ ’】不保留$原本特性

        ②可用跳脱字符【】将特殊符号变成一般字符【如[Enter],$,,空格符, ‘ 等】

        ③在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可用【'指令'】或【$(指令)】

        ④若变量需要在其他子程序执行,则需要以export来使变量变成环境变量

        ⑤取消变量的方法为使用unset。

      4)env:观察环境变量与常见环境变量说明

           set:观察所有变量

      5)环境变量

        HOME:代表用户的家目录

        SHELL:告知我们,目前环境使用的SHELL是哪支程序

        HISTSIZE:曾经下达过的指令可以被系统记录下来,而记录的笔数则是 由这个值来设定

        MAIL:当我们使用此指令时,系统会去读取的邮件信箱文件(mailbox)

        PATH:执行文件搜寻的路径,目录与目录中间以冒号隔开

        LANG:语系数。

        RANDOM:取随机数的变量(0-32767)

        PS1:命令提示字符,如[root@study ~]

      6)echo $?  返回错误代码,搜索错误的原因

      7)语系变量:locale [-a]  系统支持哪些字符编码

      8)读取用户输入的变量值:  

        read  [-pt]  variable(变量)

          -p:后面可以接提示字符

          -t:后面可以接等待的秒数

      9)定义变量类型:

        declare  [-aixr]  variable(变量)

          -a:将变量定义为数组(array)类型

          -i:将变量定义为整数数字(integer)类型

          -x:将变量变成环境变量

          +x:将变量取消环境变量

          -r:将变量设定成为readonly类型,该变量不可被更改内容,也不能unset。

          -p:单独列出变量的类型

       10)数组的定义:

          var[数字]=赋值

            如:var[1]="test1"

                   var[2]="test2"

                   var[3]="test3"

      11)文件系统及程序的限制关系:ulimit  限制用户的某些系统资源

          ulimit  [-SHacdfltu]  [配额]

            -H:hard limit,必定不能超过此设定的值

            -S:soft limit,警告设定,超过此设定的值会有警告

            -a:后面不接任何选项与参数,可以列出所有的限制额度

            -c:当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文件被称为核心文件。此为限制每个核心文件的最大容量。

            -f:此shell可以建立的最大文件容量

            -d:程序可使用的最大断裂内存

            -l:可用于锁定的内存量

            -t:可使用的最大CPU时间(单位为秒)

            -u:单一用户可以使用的最大程序数量

      12)变量内容的删除、取代与替换

          ① 删除的例子:$ { 变量 # 要删除的内容 }  $ { 变量 % 要删除的内容  }

            #:代表从变量内容的最前面开始向右删除,且仅删除最短的那个

            ##:删除最长的那个

            %:代表从变量内容的最后面开始向左删除,且仅删除最短的那

            %%:删除最长的那个

            *:可以用通配符 * 来取代0到无穷多个任意字符
          ②替换的例子:$ { 变量 / 旧内容  新内容 }
            /:替换一次
            //:替换全部
          ③测试
            变量1=${变量2 - 新内容}  
              a)变量2不存在,变量1为新内容,变量2依旧为空

              b)变量2存在,变量1为变量2的内容

            变量1=${变量2 = 新内容}  

              a)变量2不存在,变量1和变量2都为新内容

              b)变量2存在,变量1为变量2的内容。

            - 和 = 的区别仅在于会不会对变量2产生影响

      13)命令的别名设定:alias,unalias

           栗子:  alias  lm='ls  al | more'

      14)历史命令:history  [n] [-c] [-raw] [histfiles]

          n:n是数字,列出最近n笔命令行表

          -c:将目前的shell中的所有history内容全部消除

          -a:将目前新增的history指令新增入histfile中,

          -r:将histfile的内容读到目前这个shell的history记忆中

          -w:将目前的history记忆内容写入histfiles中

          echo ${HISTSIZE}  查看系统可以记录几笔

      15)!n:n是数字,执行第几行的命令

        !command:由最近的指令向前搜寻【指令串开头为command】的那个指令,并执行

        !!:执行上一个指令

      16)bash的进站与欢迎讯息:

          ① 在/etc/issue里面进行编辑,可用 man issue配合man agetty得出issue内的各代码意义

            issue内的各代码意义:

              d:本地端时间的日期

              l:显示第几个终端机接口

              m:显示硬件的等级

               :显示主机的网络名称

              O:显示domain name

               :操作系统的版本

               :显示本地端时间的时间

              S:操作系统的名称

              v:操作系统的版本

          ② 在/etc/motd里面进行编辑,可以让使用者登陆后看到这些信息

      17)读入环境配置文件的指令

          source 配置文件名  

      18)bash的环境配置文件

          ① login shell:取得bash时需要完整的登入流程的。例如由tty1-tty6登入,需要输入用户的账号和密码,此时取得的bash就事login shell

            只读取一下两个配置文件:

            1、/etc/profile:系统整体环境的设定

              此配置文件还会呼叫外部的设定数据

              1.1、/etc/profile.d/*.sh:规范了bash操作接口的颜色、语系、ll与ls指令的命令别名、vi的命令别名、which的命令别名等等

              1.2、/etc/locale.conf:由文件/etc/profile.d/lang.sh呼叫进来。决定bash预设使用何种语言。

            2、~/.bash_profile,~/.bash_login,~/.profile:使用者个人设定。

              此配置文件会呼叫以下文件

              2.1、~/.bashrc:使用者的个人设定

              2.2、/etc/bashrc:由/.bashrc呼叫

              2.3、/etc/profile.d/*.sh:由/bashrc呼叫

          ② non-longin shell:取得bash接口的方法不需要重复登入的举动。例如在原本bash环境下再次下达bash这个指令,没有输入账号密码,那第二个bash就是non-login shell

            会读取以下文件:

            1、~/.bashrc:使用者的个人设定,包括umask的值、PS1变量、呼叫/etc/profile.d/*.sh的设定

          ③ /etc/man_db.conf:规定了下达man的时候,该去哪里查看数据的路径设定。

          ④ ~/.bash.history:存放历史指令记录

          ⑤ ~/.bash_logout:当注销后,系统会自动做完师门动作后才离开。

      19)终端机的环境设定:stty,set

          stty  [-a]

            -a:将目前所有的stty参数列出来

          set  [-uvCHhmBx]  取消设定“-”改成“+”

            -u:预设不启用。若启用后,当使用未设定变量时,会显示错误讯息

            -v:预设不启用。若启用后,在讯息被输出前,会先显示讯息的原始内容

            -x:预设不启用。若启用后,在指令被执行前,会显示指令内容(前面有++符号)

            -h:预设启用。与历史命令有关

            -H:预设启用。与历史命令有关

            -m:预设启用。与工作管理有关

            -B:预设启用,与括号[]的作用有关

            -C:预设不启用。若使用>等,则若文件存在时,该文件不会被覆盖

          echo $-  显示目前所有的set设定值

      20)bash默认的组合键

          ctrl+c:终止目前的命令

          ctrl+d:输入结束

          ctrl+m:就是enter

           ctrl+s:暂停屏幕的输出

          ctrl+q:恢复屏幕的输出

          ctrl+u:在提示字符下,将整列命令删除

          ctrl+z:暂停目前的命令

      21)通配符与特殊符号

           *:代表无穷个任意字符

          ?:一定有一个任意字符

          []:代表一定有一个在括号内的字符。如[abcd],一定有a,b,c,d这四个任何一个

          [-]:在编码顺序内的任意一个字符。如[0-9]代表0到9之间的任意一个数字

          [^]:反向选择。如[^abc],只要不是a,b,c的其他字符

            栗子:

            ① ll -d /etc/?????:找出etc底下文件名刚好是5个字母的文件名  

            ② ll -d /etc/*[0-9]*:找出文件名含有数字的文件名

            ③ ll -d /etc/[^a-z]*:找出文件名开头不是为小写字母的文件名

          #:批注

          :将通配符或特殊字符还原成一般字符

          |:管线(pipe),分隔两个管线命令的界定

          ;:连续性命令的界定

          ~:用户的家目录

          $:变量使用前必须加的

          &:工作控制(job control),将指令变成背景下工作

          !:逻辑运算符上的not的意思

          /:路径分隔符

          >,>>:数据流重导向,输出导向,分别是(取代)与(累加)

          <,<<:数据流重导向,输入导向,

          “”:具有变量置换的功能($可保留相关功能)

          、、:两个中间为可以先执行的指令

          ():在中间为子shell的起始于结束

          {}:在中间为命令区块的组合    

      22)数据流重导向:将某个指令执行后应该要出现在屏幕上的数据,给他传输到其他的地方。 

           <,<<:标准输入(stdin,standard input) 本该有键盘输入的数据,改由文件内容来取代

          >,>>:标准输出(stdout,standard output) 本该显示在屏幕的数据,存入到文件中

          2>,2>>:标准错误输出(stderr,standard error output)

          2>/dev/null:将错误信息丢掉

             栗子: find /home -name .bashrc > list_right  2> list_error

      23)/dev/null 垃圾桶黑洞装置与特殊写法

           栗子:find /home -name .bashrc > list 2>&1  将标准输出和标准错误输出一起写入同一个文件

          栗子2:cat > catfile < ~/.bashrc  将原本需要键盘输入的内容写到文件1,由后面的文件2代替写入文件1

      24)<<:代表结束的输入字符

          栗子: cat > catfiel << "eof"  输入eof后,立刻结束而不需要按 ctrl+d

      25)命令执行的判断依据

          ;:分号,用来连续执行命令

          &&:若cmd1执行完毕且正确执行($?=0,返回值为0),则开始执行cmd2

                  若cmd1执行完毕且为错误($?≠0),则cmd不执行

          || :若cmd1执行完毕且正确执行($?=0),则cmd2不执行

                若cmd1执行完毕且为错误($?≠0),则开始执行cmd2

          例子1:command1 && command2 || command3 .  若com1正确执行,返回0值;com2收到0值,正确执行,返回0值;com3收到0值,不执行。

          例子2:command1 || command2 && command3 .  若com1不正确执行,返回非0值:com2收到非0值,正确执行,返回0值;com3收到0值,也执行。

      26)管线命令(pipe)

          |:将前面执行的命令得出的数据进行加工

      27)撷取命令:cut,grep  将一段数据经过分析后,取出我们想要的。以行为单位

          ① cut  -d '分隔字符'  -f  fields

            -d:后面接分隔字符

            -f:依据-d的分隔字符将一段讯息分区成为数段,用-f取出第几段的意思

              栗子:echo  ${PATH} | cut  -d  ':'  -f  3,5  取出以“:”分隔后的第3个和第5个字段

          ② cut  -c  字符区间

             -c:以字符的单位取出固定字符区间

               栗子:export | cut -c 12-  删除每行的前面12个字符,也可以是第12-20个字符“12-20”

          grep  [-acinv] [--color=auto] '搜寻字符串'  文件

            -a:将binary文件以text文件的方式搜寻数据

            -c:计算找到搜寻字符串的次数

            -i:忽略大小写的不同

            -n:顺便输出行号
            -v:反向选择,亦即显示出没有搜寻字符串内容的那一行

            --color=auto:可以将找到的关键词部分加上颜色的显示

            []:中括号中间的任意一个字符,如果是连续的字母或是数字,[a-z][0-9]

              栗子:last | grep 'root'

              栗子:last | grep 'root' |cut -d ' ' -f 1

              栗子:grep 'root' /etc/man.conf

      28)排序命令:sort,wc,uniq    

          ① sort [-fbMnrtuk] [file or stdin]  进行排序

            -f:忽略大小写的差异

            -b:忽略最前面的空格符部分

            -M:以月份的名字来排序

            -n:使用纯数字进行排序,默认是以文字排序

            -r:反向排序

            -u:就是uniq,相同的数据中,仅出现一行代表

            -t:分隔符,预设是用tab键来分隔

            -k:以哪个区间(field)来进行排序

              栗子: cat /etc/passwd | sort

              栗子: cat /etc/passwd | sort -t  ':'  -k 3 

          ② uniq [-ic]  重复的数据只提取一个

            -i:忽略大小写字符的不同

            -c:进行计数

              栗子:last  |  cut  -d  ' '  -f1  |  sort  |  uniq  -c 

          ③ wc [-lwm]  有多少行,多少单词,多少字符

            -l:仅列出行

            -w:仅列出多少单词

            -m:多少字符

              栗子: cat  文件  |  wc

      29)双向重导向: 将数据输出到屏幕的同时,把数据也存一份到文件中

          tee [-a] file

            -a:以累加(append)的方式,将数据加入file当中

            栗子: last | tee  文件  | cut -d '' " -f1

      30)字符转换命令:  tr,col,join,paste,expand

          ① tr [-ds] SET1 ...  删除一段数据当中的文字,或是进行替换

            -d:删除讯息当中的SET1这个字符串

            -s:取代掉重复的字符

               栗子: last | tr  '[a-z]'  '[A-Z]'  将所有的小写变成大写字符

              栗子: cat  /etc/passwd | tr  -d  ':'  将冒号删除

          ①-2 col  [-xb]

              -x:将tab键转换成对等的空格键   

          ② join [-ti12] file1 file2  两个文件当中,有‘相同数据’的那一行,才将他加在一起。

            -t:join默认以空格符分隔数据,并且比对第一个字段的数据,如果两个文件相同,则将两笔数据连城一行,且第一个字段放在第一个

            -i:忽略大小写的差异

            -1:数字1,代表第一个文件要用那个字段来分析

            -2:代表第二个文件要用那个字段来分析

               栗子: join -t  ':'  文件1  文件2 | head -n 3  以":"分隔后的第1个字段内容相同的话就合并

               栗子: join -t ':' -1 4  文件1  -2 3  文件2 | head -n  3  以文件1的第4个字段跟文件2的第3个字段分析比对,如果相同就进行文件整合

          ③ paste  [-d]  file1  file2  将两行的数据贴在一起,中间以[tab]隔开

            -d:后面可以接分隔字符。预设是以[tab]来分隔

            -:如果file部分写成 - ,表示来自standard input的资料 

          ④ expand  [-t]  file  将[tab]转成空格

            -t:后面接数字,表示用几个字符代表[tab]

          ⑤ split  [-bl]  file  PREFIX  将打文件分区成小文件

             -b:后面接欲分区成的文件大小,可加单位,例如b,k,m等

            -l:以行数来进行分区

            PREFIX:可作为分区文件的前导文字

              栗子:split  -b  300k  /etc/services  services 

              栗子:cat  services* >> servicesback  将小文件合成大文件

              栗子: ls -al  /  |  split  -l  10  -  小文件名  将 ls -al 输出的信息,按每十行记录成一个文件。  小文件名前面的“-”就是ls -al整理出的数据。

          ⑥ xargs  [-0epn]  指令  参数代换,x是加减乘除的乘号,args则是arguments(参数)

            -0:如果输入的stdin含有特殊字符,例如空格等,可以将特殊字符还原成一般字符

            -e:后面接一个字符串(中间无空格),当xargs分析到这个字符串时,会停止继续工作

            -p:在执行每个指令的argument(参数)时,都会询问使用者的意思

            -n:后面接次数,每次指令执行时,要使用几个参数

            当xargs后面没有接任何的指令时,默认是以echo来进行输出

      31)减号 - :某些指令需要 用到文件名来进行处理时,该stdin与stdout可以利用减号“-”来替代。

      32.0)正规表示法的一些特殊符号

        【:alnum:】数字,大写字母,小写字母

        【:alpha:】大写字母,小写字母

        【:upper:】大写字母

        【:lower:】小写字母

        【:digit:】数字

      32)grep的进阶选项:

          grep  [-A] [-B] [--color=auto] '搜寻字符串'  filename

            -A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出

            -B:后面可加数字,为befer的意思,除了列出该行外,前面的n行也列出

            --color=auto:可将正确的那个撷取数据列出颜色

               栗子: dmesg | grep  -n  -A3  -B2  --color=auto  'qxl'  在关键词所在行的前2行和后3行也一起捉出来显示

       33)行首与行尾字符   ^ $

          ^:在“[^]”内表时反向选择,在“^[]”外表示待搜索的字符串在行首。

          $:待搜索的字符串在行尾

      34)任意一个字符和重复字符

          .:代表一定有一个任意字符的意思

            栗子:grep  -n  'g..d'  文件 

          *:代表重复前一个字符,0到无穷多次的意思

            栗子: grep -n  'oo*'  文件

      35)限定连续RE字符范围  {}

          栗子: grep  -n  'o{2}'  文件  找出2个o的连续字符串      

          栗子: grep  -n  'go{2,5}g'  文件  找出2个至5个o的连续字符串

          栗子: grep  -n  'go{2,}g'  文件  找出2个以上o的连续字符串

      35-2)正规表示法的特殊字符和一般指令的特殊字符差异

          例子:已“a”开头的任何档名文件

          正规表示法表达: ls  |  grep  -n  '^a.*'

          一般指令表达: ls  -al  a*

      36)sed工具

          sed  [-nefr] [动作]

             -n:使用安静模式。在一般sed的用法中,所有来自stdin的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有

                    经过sed特殊处理的那一行(或者动作)才会被列出来。

            -e:直接在指令列模式上进行sed的动作编辑

            -f:直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作

            -r:sed的动作支持的是延伸型正规表示法的语法

            -i:直接修改读取的文件内容,而不是由屏幕输出。

            动作说明: [n1[,n2]]function

              n1,n2:一般代表选择进行动作的行数,栗子:如果我的动作是需要在10到20行之间进行的,则 10,20[动作行为]

              function:有地下这些

                a:新增,a的后面可以接字符串,这些字符串会在新的一行出现(目前的下一行)

                c:取代,c的后面可以接字符串,这些字符串可以取代n1,n2之间行的内容

                d:删除,后面无任何字符串

                i:插入,i的后面可以接字符串,这些字符串会在新的一行出现(目前的上一行)

                p:打印,即将某个选择的数据印出,通常p会与参数 sed -n 一起运作

                s:取代,可以直接进行取代的工作。通常这个s的动作可以搭配正规表示法。栗子: 1,20s/old/new/g

                  栗子: n1  /etc/passwd | sed  '3,$d'  删除第3到最后一行

                  栗子: n1  /etc/passwd | sed  '2a drink tea'  [   drink beer]  在第二行后加上 drink tea 字样[要再增加一行的话,要用 符号]

                  栗子:cat  /etc/passwd  |  sed  -e  '4d'  -e  '6c no six line' > passwd.new  sed后面如果要接超过两个以上的动作时,每个动作前面得加-e才行

      37)延伸正规表示法

          egrep  -v  ' ^$ | ^# '  文件  使用到管线命令来搜寻两次     

          +: egrep  -n  'go+d'  文件  'o+'代表1个以上的o

          ?: egrep  -n  'go?d'  文件  ‘o?’代表0个或1个以上的o

          |: egrep  -n  ' gd | good | dog '  文件  搜寻引号中3个字符串任意一个就满足。 或的意思

          (): egrep  -n  'g( la | oo )d' 文件  找出群组字符串

          ()+: echo  'AxyzxyzxyzxyzC' | egrep  'A(xyz)+C'  找出开头是A结尾是C,中间有一个以上的‘xyz’字符串,多个重复群组的判别。 

      38)格式化 打印:printf

            printf  '打印格式 '  实际内容

            打印格式

            a:警告声音输出

            :退格键

            f:清除屏幕

             :输出新的一行

             :Enter按键

             :水平的[tab]按键

            v:垂直的[tab]按键

            xNN:NN为两位数的数字,可以转换数字成为字符

            关于C程序语言内,常见的变数格式

            %ns:n是数字,s代表string,既多少个字符

            %ni:n是数字,i代表integer,既多少个整数字数

            %N,nf:n和N都是数字,f代表floating,如果有小数字书。栗子:假设我共要十个位数,但小数点有两位,即 %10.2f。

              栗子: printf  '%10s  %5i  %5i  %5i  %8.2f  '  $(cat  printf.txt | grep -v Name)

      39)数据处理工具:awk    

          awk  '条件类型1{动作1}  条件类型2{动作2} ...'  filename

            栗子: last  -n  5 | awk  '{print $1 " "  $3}'   取出第1列和第3列的数据,并用tab隔开

            1)变量名称:

              NF:每一行拥有的字段总数

              NR:目前awk所处理的是[第几行]数据

              FS:目前的分隔字符,默认是空格键

                栗子:  last  -n 5 | awk  '{print  $1  "   lines:"  NR  "   column:"  NF}'

            2)逻辑运算符:

              > , < , >= , <= , == , !=

      40)文件比对工具

          ① diff  [-bBi]  from-file  to-file

            from-file,to-file 可以用 - 取代,- 代表 stdin 之意

            -b:忽略一行当中,有多个空白的差异(如,“about  me”与“about     me”)

            -B:忽略空白行的差异

            -i:忽略大小写的差异

          ② cmp  [ -l ]  file1  file2 

            -l:将所有的不同点的字节处都列出来。 默认只输出第一个发现的不同点

          ③ patch

            例子,制作补丁文件:

                diff  -Naur  passwd.old  passwd.new  >  passwd.patch

                cat passwd.patch  

            例子,更新:

            patch  -pN < 补丁文件   N是数字,-p后面可以接取消几层目录的意思  

            例子,还原:

            patch  -R  -pN  < 补丁文件  -R代表还原,将新的文件还原成原来旧的文件

      41)文件打印准备:pr

    新增

    一、如何实现1到100连续自动输出

        方式一:seq  1  100

        方式二:{1..100}     {a..g}  连续输出1至100,a至g

     二、SSH

      参考资料:https://www.cnblogs.com/chen-lhx/p/3974605.html

     三、常用目录所存放的内容

      

     四、修改一个用户到指定用户组

      [root@localhost ~]# id user1             

      uid=501(user1) gid=501(user1) groups=501(user1)

      [root@localhost ~]# usermod -g user_group user1

      [root@localhost ~]# id user1

      uid=501(user1) gid=500(user_group) groups=500(user_group)

     五、关机重启

      关机: sync; sync; shutdown -h now

        语法:shutdown [-krhc] [时间] [警告讯息]

        参数:

          -k:不要真的关机,只是发送警告出去

          -r:在将系统的服务停掉之后就重新启动

          -h:将系统的服务停掉后,立即关机

          -c:取消已经在进行的shutdown指令

          时间:指定系统关机的时间,默认1分钟。

        例子:

          shutdown -h +10    10分钟后关机

          shutdown -h 20:25    晚上20:25分关机

      重启: sync; sync; reboot -h now

    六、汉字输入法

      在设置-语言-选择汉语(一定是要选择:汉语pinyin)

      安装搜狗输入法的参考网站:https://www.jianshu.com/p/b0e15dec9fb0?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

      

    七、实用小命令

      ① 文件大小已M形式显示:在  ll 后面+参数 -h

      ②在vim文档中,已经编辑了很多动作,如何恢复成文档的原始数据。 输入命令  :e!

      ③不想离开vim,又想执行 ls /home这个指令。  可以按 ctrl+z 暂时离开vim,执行ls /home

      ④vim页面,不小心按了ctrl+s会冻结,可以按ctrl+p来解冻。

      ⑤删除游标前的内容,ctrl+u

      ⑥使用set命令可以查看所有变量。

      ⑦变量值可以是命令,比如 A=$(命令语句)

      ⑧三种类型变量:

        1)所有用户的永久变量: 在/etc/profile文件中添加变量【对所有用户生效(永久的)】

        2)当前用户的永久变量:在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

        3)临时变量:直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

      ⑨一次创建连续的文件或目录:用【{}】,

        如 创建10个文件  touch {01..10}.txt 

        如 创建10个目录  mkdir {01..10}.dir

      ⑩查看文件的详细状态信息: stat 文件名

      11)find无错误提示查找方法

          find / -name access_log 2>/dev/null

    八、crontab定时任务

      参考网站:https://www.cnblogs.com/ftl1012/p/crontab.html

      

  • 相关阅读:
    象限极角排序
    并查集与二部图
    POJ 1743 后缀数组不重叠最长重复子串
    POJ 2104 【主席树】【区间第K大】
    两串前缀最长后缀
    Codeforces 450D Jzzhu and Cities [heap优化dij]
    Codeforces 119C DP
    HDU 3068 [最长回文子串]
    Codeforces 132E Bits of merry old England 【最小费用最大流】
    ZOJ 3911Prime Query [素数处理 + 线段树]
  • 原文地址:https://www.cnblogs.com/kentee/p/11669966.html
Copyright © 2020-2023  润新知