Linux学习笔记(13~20)

续前“Linux学习笔记(7~12)”

13、bash脚本编程字符串测试及for循环

  • bc<<<" "
  • for循环
    • 求1-100的和
      • for 变量 in 列表; do
        • 循环体
      • done
    • 生成列表:`seq [起始数] [ 步进数] 结束数`
    • declare -i sum=0:声明sum为一个整型( let sum =0) [-x],声明为环境变量
    •  for i in `seq 1 $Lines`;do echo "Hello,`head -n $i /etc/passwd | tail -1 | cut -d: -f1`";done:向每个用户问好,

14、vi:Visual Interfacee

  • vim:VI iMproved,语法着色,
  • 全屏编辑器,模式化编辑器。
  • # vim /path/to/somefile
  • 文件可以不存在,目录必须存在
  • 打开文件
    • # vim +行数 filename:定位到某行
    • # vim + filename:定位到文件末尾
    • # vim +/pattern:打开文件并定位到第一次被模式匹配到的行的行首
  • vim
    • vim模式
      • 编辑模式(命令模式):默认状态
      • 输入模式:输入到文件中的字符
      • 末行模式:文件管理类的命令
    • 模式转换
      • 编辑-->输入:
        • i:在当前光标所在的字符前转换为输入模式。
        • a:在当前 字符后转换为输入模式。
        • o:在当前光标所在行下新建一行并转换为输入模式
        • I:当前光标所在行的行首转换为输入模式
        • A:当前光标所在行的行尾转换为输入模式
        • O:在当前光标所在行上新建一行并转换为输入模式
      • 输入-->编辑
        • ESC
      • 编辑-->末行
        • 输入 :
      • 末行模式下
        • 10d:删除第10行
        • 10,20d:删除第10--20行
        • set nu:显示行号,set nonu取消显示行号
        • !sh命令:
      • 末行-->编辑
        • ESC,ESC
  • 关闭文件
    • 末行下:键入w保存,q退出而不保存,wq保存并且退出,q!不保存并且退出,w!强行保存,wq==x保存退出
    • 编辑模式下:ZZ保存退出
  • 移动光标
    • 逐字符移动:hljk对应左右下上。
    • 移动指定数字的字符:编辑模式 数字h
    • 逐单词移动:w移到下一个单词的词首,e跳到当前或下个单词词尾,b跳到当前或前一个单词的词首,数字w 一次跳多个单词
    • 行内跳转:0跳到行首(绝对),^跳到行首(第一个非空白字符),$行尾
    • 行间跳转:数字G,直接跳到某行,G最后一行,末行模式下直接输入行号回车即可
    • 翻屏:CTRL+F,CTRL+L,向下,上翻一屏,CTRL+d,u 向下,上翻半屏。
  • 删除d
    • 单个字符:x,数字x 删除光标所在处(向后)的字符
    • d命令:d$,删到行尾部,d0,删除到行首,dw,逐单词删除,数字d跳转符 dw de db dd(删行,删除当前光标所在行)
    • 末行模式下,10,20d,删除第10到20行,.,+5d 从当前行开始再向下五行,.,100d从当前行到第100行
    • 最后一行$,向下n行+n,
    • vim最近修改的内容可以撤销
  • 粘贴p
    • p,小写,删除或复制的为整行,粘贴至下方,否则,粘贴至光标所在字符后面
    • P,大写,删除或复制的为整行,粘贴至上方,否则,粘贴至光标所在字符前面
  • 复制y
    • 用法同d,yy复制一行,y0,.,+3y
  • 修改c,先删除内容再转换为输入模式
    • 用法同d,cc删除整行并转换为输入模式,...
  • 替换r
    • r,字符,将r处字符替换
    • R,进入替换模式,
  • 撤销编辑u
    • u:undo撤销,撤销前一次操作,可多次使用,连续u,撤销n次(最多50)
    • 数字u:撤销最近多次操作。
  • 撤销撤销
    • CTRL+r:撤销刚才的撤销操作,还原最近一次撤销操作。
  • 重复前一次编辑操作
    • . 点命令,
  • 可视化模式
    • v :按字符选取
    • V:按矩形块儿选取
  • 查找
    • /pattern:全文
    • ?pattern:从光标到文首
    • n:下一个
    • N:上一个
    • 支持正则
  • 查找并替换
    • 末行模式下s命令:addr1,addr2s@pattern@string@g|i 同sed
    • 1,$:同%,表示全文
    • 替换实例:%s/paern/string/g 全文将pattern替换为string,有/ 需要写为\/ ,pattern中的. 需要转义。
  • 如何使用vim打开多个文件
    • 复制粘贴可以跨文件,
    • 末行下:next,prev上下切换文件,last,first最后第一个文件
    • vim file1 file2 file3:同时打开多个文件
    • 退出::qa退出所有文件
  • 分屏显示一个文件
    • 窗口拆分,CTRL+w,s水平拆分窗口,CTRL+w,箭头 切换 CTRL+w,v垂直切分窗口
  • 分窗口显示多个文件
    • -o:水平分隔显示
    • -O:垂直分隔显示
  • 将当前文件的部分内容另存为另外一个文件
    • :w
    • :addr1,addr2w /path/to/file
  • 将另外一个文件的内容填充在当前文件中
    • :r path/to/somefile在光标下方粘贴
  • 与shell交互
    • :!command
  • 高级
    • :set nu,:set nonu行号
    • :set ic显示忽略大小写,:set noic
    • 设置自动缩进 :set autoindent
    • 搜索文本,背景不高亮 :set nohlsearch
    • 开启语法高亮 :syntax on
    • 非正常退出文本,再次打开报错
  • 配置文件
    • /etc/vimrc:全局
    • ~/.vimrc:用户
    • 在于用,不在于记忆:# vimtutor vim课程
  • 脚本
    • #!/bin/bash
    • #
    • for I in {1..10};do
    • if id user$I&>/dev/null;then
    • echo "user$I exist."
    • else
    • useradd user$I &>/dev/null
    • echo "user$I" | passwd --stdin user$I &> /dev/null
    • echo "add user$I success!"
    • fi
    • done
  • 三种测试
    • 整数测试
      • le, lt ,ge, gt, eq, ne
    • 字符测试
      • == != > < n z
    • 文件测试
      • e f d r w x
    • 组合测试条件
      • -a:与 也可 [ ] && [ ]
      • -o:或
      • !:非
        • 取反满足摩根定律
  • 脚本运算
    • let I=$[$I+1]
    • let sum+=$I 加等,其他类比
    • let I++

15、文件查找

  • lacate
    • 非实时,模糊,根据全系统文件数据库完成:
    • locate filename
    • 手动更新数据库:updatedb
    • 安装:mlocate
  • find
    • 实时,精确,速度慢,遍历指定目录中所有文件,支持多种查找标准
    • find 查找路径==当前 查找标准==指定路径下所有 找到以后的动作==打印到屏幕
    • 查找标准
      • -name ‘filename’,且filename支持正则表达式
      • -iname ‘filename’,文件名匹配不区分大小写
      • -regex pattern,基于正则表达式进行文件名匹配
      • -user username ,基于属主进行查询
      • -group groupname
      • -uid uid,用户删除后,其文件显示属主为原先id
      • -nouser,查找无属主的文件
      • -nogroup,查找无属组的文件
      • -type filetype
        • f:普通文件
        • d:目录
        • c:字符设备
        • b:块设备
        • l:链接
        • p:管道
        • s:套接字设备
      • -size 【+,-】数字【k,m,g】
      • 访问时间
        • -mtime
        • -ctime
        • -atime
          • [+ | - ] 天数
        • -mmin
        • -cmin
        • -amin
      • -perm mode(644):根据权限
        • -mode:对应位完全包含即可显示
        • /mode:只要有一位匹配即可显示
        • mode:精确匹配
    • 动作
      • 默认为-print
      • -ls:类似ls -l,显示匹配到的文件的信息
      • -ok command {} \; {}为文件名称占位符,每一个操作都需要用户确认
      • -exec:同-ok ,但操作不需要用户确认
      • -xargs:从标准输入接收并执行find ... | xargs echo {} >> /tmp/jj.txt
    • 组合条件
      • -a:默认选项
      • -o
      • -not

16、特殊权限

  • SUID
    • 无论哪个用户启动文件,该文件的属主是程序文件自身的属主,而不是启动者。
    • 赋予SUID:chmod u+s file,原有x,则为s,否则显示为S。
    • 拥有suid,则任何用户启动文件,以文件所有者的权限执行。
  • SGID
    • 无论哪个用户启动文件,该文件的属组是程序文件自身的属主,而不是启动者所属的基本组。
    • chmod g+s file,
    • 目录拥有sgid,在目录下建立的文件,文件的基本组不再是用户的基本组,而是目录的基本组
    • 测试执行顺序
      • 添加用户:useradd user1
      • 添加基本组:groupadd develop
      • 改目录属组:chmod g+w /tmp/project/
      • 目录属组添加sgid: chmod g+s /tmp/project/
      • 将用户附加组改为与目录相同:usermod -a -G develop user2
      • 此后,user2在/tmp/project下间的新文件,属组为develop,若无sgid,间的文件属组为用户基本组,
  • Sticky:在一个公共目录,每个用户均可创建文件,删除自己的文件,但不可以删除别人的文件
    • chmod o+t dir
  • 000---111:SUID,SGID,Sticky。
    • chmod 1755 file : 1代表Sticky,3755,3代表011,SGID和Sticky
    • umask为四位,第一位为特殊权限,

17、facl及用户及Linux终端

  • FACL:filesystem access control list
    • 利用文件扩展保存额外的访问控制权限
    • mask,额外的用户(组)给的权限不会超过mask,
    • setfacl:设置facl
      • -m:设定
        • u:UID:perm
          • setfacl -m u:Hadoop:rw filename
          • setfacl -m d:u:Hadoop:rw filename 为目录设置默认的访问控制列表
        • g:GID:perm
          • setfact -m g:mygroup:rw filename
      • -x:取消设定
        • setface -x u:Hadoop filename
      • --mask:
    • getfacl:查看facl
  • 检查顺序(权限应用次序)
    • owner-->facl,user-->group-->facl,group-->other
  • 几个命令
    • whoami:查看当前登陆的用户
    • who:显示当前登陆到系统上的用户
      • 终端类型
        • 控制台:console,直接连到主机上的物理设备,不属于终端,
        • pty:物理终端,相当于控制台,VGA
        • tty#:虚拟控制台,通常是在本地,虚拟终端,VGA
        • ttys#:串行终端
        • pts/#:伪终端,ssh
      • -r:显示当前运行级别
      • -H:显示头部
      • -r:显示当前运行级别及上次运行级别
      • 每隔5秒,查看user1是否登陆,如登陆,显示
        • sleep
    • w:显示登陆用户以及what
    • last:显示登陆日志 /var/log/wtmp文件,登陆历史以及重启历史
      • -n:仅显示最近n次
    • lastb:显示/var/log/btmp文件,显示用户错误的登陆尝试
      • -n
    • lastlog:显示每个用户上一次成功登陆时间
      • -u username
    • basename:显示路径的基名(文件名)
      • basename $0:执行脚本时的脚本路径及名称
    • mail:
      • -s:指定 subject
      • # cat /etc/fstab | mail -s "how are you" root 管道命令
      • #  mail -s "how are you" root < /etc/fstab 输入重定向
    • hostname:显示主机名(实时的,非环境变量$HOSTNAME)
    • RANDOM:生成随机数,0-32768
      • echo $RANDOM
      • 随机数生成器:/dev/random,熵池,会被取空,
      • /dev/urandom,不会取空,软件模拟生成,

18、bash脚本编程之case语句与脚本选项进阶

面向过程

  • 控制结构
    • 顺序
    • 选择
      • if:单分支,双分支,多分支
      • case语句
        • case SWITCH in
        • value 1)
          • statement
          • ;;
        • esac
    • 循环

19、磁盘管理

  • 机械式硬盘
  • RAM:易失
  • 分区:partition
    • 文件系统
  • MBR:master boot record 主引导分区
    • 主引导记录
    • 属于磁盘,512byte
      • 446byte:bootLoader,程序,
      • 64byte:每16标识一个分区
      • 2byte:魔数 magic number 标记mbr是否有效。
  • 真空避灰尘
  • metadate
    • 文件系统
    • 元数据存储区
    • 块位图:bitmap
    • inode:索引节点
    • 硬链接:不同文件名指向同一个文件块儿,指向同一个inode,# ln 源文件 目标文件,不能为文件夹创建,增加被硬链接的次数
    • 符号链接,软链接:存储另一个文件的路径,大小为路径字符数,# ln -s 源文件 目标文件,可应用于目录,只保留路径的字符。
    • 本文件被硬链接的次数:防止一个文件被多个文件链接,误删。
  • # du
    • -s:显示每一个的大小
    • -h:人性化
  • # df
    • 显示磁盘分区使用情况
    • -h
    • -P
  • 设备文件
    • b:按块为单位,随机访问的设备
      • 硬盘
    • c:按字符为单位,线性设备
      • 键盘
    • /dev
      • 主设备号:标识设备类型
      • 次设备号:标识同一设备类型的不同设备
    • # mknod 创建设备文件
      • mknod mydev c 66 0
      • -m 指定权限
    • # tty
      • 查看当前终端设备
      • echo “hello” >> /dev/pts/1
    • 硬盘设备的设备文件名
      • IDE,ATA:hd
        • a,b,c....来区别同一类型下的不同设备
        • /dev/hda /dev/hdb
        • 分区:hda1,hda2,...had4 逻辑分区从hda5开始
        • 查看当前设备磁盘及其分区# fdisk -l
        • 管理磁盘分区fdisk
      • SATA,SCSI,USB:sd
  • 格式化
    • 低级格式化:厂商完成
    • 高级格式化:创建文件系统# mkfs -t ext3
  • 文件系统类型
    • 管理方式不同
    • /,/usr,/var,/tmp
    • 只有/可以自引用。普天之下莫非王土,率土之滨莫非王臣。
  • fdisk
    • # fdisk /dev/sda 打开交互式界面
      • p:显示当前硬盘的分区,包括没保存的
      • n:创建新分区
        • e:扩展
        • p:主分区
      • d:删除一个分区
      • w:保存退出
      • q:不保存退出
      • t:修改分区类型
      • l(L):显示支持的所有类型
    • # partprobe 5.x
      • 通知内核重读硬盘分区表
      • /proc/partitions
  • VFS
    • 虚拟文件系统,对应内核,沙漏模型。
  • 块大小:block size
    • 1024,2048,4096
  • 位图,bitmap
    • 加快数据查找速度
    • super block
    • boot block每个分区都有,引导操作系统,
    • index node:inode
  • mkfs
    • -t:fstype,
    • # mke2fs:专门管理ext系列文件
      • -j :创建ext3类型的文件
      • -b BLOCK_SIZE:指定块儿大小,默认4096,,1024,2048
      • -L LABEL:指定分区卷标
      • -m #:指定预留给超级用户的块数百分比
      • -i # :指定为# 个字节指定一个inode,默认8192
  • blkid 设备名
    • 查询或查看磁盘设备的相关属性
    • # e2label 设备:查看或设置卷标
  • # tune2fs -j 设备名
    • 不损害文件,调整文件系统类型(ext2-->ext3)
    • -L:设定或修改卷标
    • -m # :调整预留百分比
    • -r #:指定预留块儿数
    • -o acl:指定默认挂载选项
    • -c # 指定挂载次数达到# 次后自检,0或-1关闭
    • -i # 指定挂载# 天后进行自检,0或-1关闭
    • -l:显示超级块儿的信息
      • # dumpe2fs:显示文件属性信息,更加详细
        • -h:只显示超级块儿信息

20、压缩及归档

  • 压缩格式:gz,bz2,xz,zip,Z
  • 压缩算法
  • 压缩命令
    • compress,uncompress
    • gzip:.gz
      • 默认会删除原文件
      • -d:解压缩
        • gunzip:解压缩,完成后删除原文件
      • -# :指定压缩比,1-9,默认6
      • zcat:临时查看压缩文件的内容
    • bzip2:.bz2
      • 比gzip压缩比大,使用格式类似。
      • -k:压缩时保留原文件
      • -d:解压缩
        • bunzip2
      • bzcat:临时查看压缩文件的内容
    • xz:.xz
      • 压缩比更大
      • -d:解压缩
        • xzdec:解压缩到屏幕
        • unxz
        • xzcat
  • archive:归档
    • zip:可以压缩目录,既归档又压缩
      • # zip 目的.zip 源..... 压缩后不删除源文件
      • unzip:
    • tar:只归档不压缩
      • -c:创建归档文件
      • -f file.tar:操作的归档文件
      • # tar -cf test.tar test*
      • -x:展开归档
      • --xattrs:归档时,保留文件的扩展属性信息
      • -t:不展开tar,查看归档了哪些文件
      • -zcf:既归档又压缩(gzip)
      • -zxf:解压(gzip)及展开归档
      • -jcf:bzip2
      • -jxf:
      • -Jcf:xz
      • -Jxf:
  • cpio:归档工具,与tar类似
  • read NAME。。。:交互式,给NAME赋值
    • -p “PROMPT”:给出提示,
    • -t #:超时
  • 脚本编程:while循环
    • 适用于循环次数未知的场景
    • while [ CONDITION ]; do
      • statement 。。。
    • done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章