zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/kentee/p/11669966.html
Copyright © 2011-2022 走看看