一、磁盘分区的配置

  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:显示硬件的等级

          \n:显示主机的网络名称

          \O:显示domain name

          \r:操作系统的版本

          \t:显示本地端时间的时间

          \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:警告声音输出

        \b:退格键

        \f:清除屏幕

        \n:输出新的一行

        \r:Enter按键

        \t:水平的[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  \n\'  $(cat  printf.txt | grep -v Name)

  39)数据处理工具:awk    

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

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

        1)变量名称:

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

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

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

            栗子:  last  -n 5 | awk  \'{print  $1  "\t  lines:"  NR  "\t  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