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)变量内容的删除、取代与替换
① 删除的例子:$ { 变量 # 要删除的内容 } $ { 变量 % 要删除的内容 }
#:代表从变量内容的最前面开始向右删除,且仅删除最短的那个
##:删除最长的那个
%:代表从变量内容的最后面开始向左删除,且仅删除最短的那
%%:删除最长的那个
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)
七、实用小命令
① 文件大小已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