shell备忘录

  1. 表格对齐显示

    #!/bin/bash
    (
    printf "permissions links owner group size data HH:MM fileName\n"
    ls -l / | sed 1d
    ) | column -t
    #ls -l 第一行会显示有多少文件,所以管道符 sed 1d 是删除第一行的数据
    #column -t 自动将输入的数据对齐显示
    
    

命令集合

  1. () 可以把多个命令在一起执行。如果在一行显示,中间必须要用逗号隔开。
  2. $(命令) 可以讲一个命令的执行结果作为另外一个命令的参数,而不是输入
  3. expr 除了可以完成基本的运算,还可以完成关于字符串的操作。expr 进行乘法运算时,要使用*
  4. column -t 可以格式化数据,并生成一个整齐的表格
  5. sed 1d 可以删除结果中的第一行数据
  6. 命令行中可以直接在 “命令” ,写法是双引号中间使用``
  7. read 等待用户输入命令。read -p “提示语” 变量1 变量2 变量3。会对用户输入的数据会以空格为分割符分割为多个变量的值
  8. readonly VERSION =1.0 定义一个只读变量,整个执行过程是不允许被修改的
  9. unset VERSION 删除一个变量。注意删除一个只读变量会失败的。
  10. cut 可以删除无关的数据。cut -c2 保留第二个字符以后的数据
  11. grep "^_" 匹配以下划线开有的数据
  12. head -5 显示前五行数据
  13. paste -d':' 文件1 文件2 文件3 |cat -n .将不同文件相同行用冒号连接起来
  14. uniq 去重功能,显示文件中不重复的行列数据
  15. tr 将标准输入的数据,转换后显示。相当于正则匹配并替换功能
  16. sort 对文档内容以行为单位进行排序。
  17. nohup 表示在后台运行的程序,当执行exit退出的时候,不会终止后台的运行的程序
  18. 尾部加& ,当作执行一个耗时的命令操作的时候,可以将执行挂在后台执行
  19. jobs 查看当前终端的后台进程
  20. bg %1 可以将挂起的进程移动到后台继续运行
  21. fb %1 将挂起的进程重新返回的前台运行
  22. ps -ef 查看系统中当前运行的所有进程
  23. kill 和killall 干掉进程
  24. 每一个进程 都会默认打开三个文件,或者说是文件描述符。分别对应的标准的输入、输出、错误输出。文件描述符的编号分别是0,1,2
  25. > 和>> 覆盖和追加内容到指定的文件中
  26. < 输入重定向、
  27. ./input.sh < /etc/password ,input.sh中,通过read oneline 内置函数,可以读取password文件中的一行数据。
  28. 错误重定向 &> outputfile
  29. 无用的日志信息可以选择重定向到 /dev/null中。/dev/null是系统中一个特殊的文件,它表示一个空的设备,但实际上是没有这样的硬件设备的,它好比是一个黑洞,只要你把这个数据丢进去,那这个数据就会消失。
  30. >&2 是将信息重定向到标准的错误输出
  31. mv 是移动,也是重命名
  32. cp scp
  33. ssh 我是谁@我在哪
  34. printf "" 标准输出内容
  35. 变量名一般大写,前后没有空格
  36. 数组 array[index]=value,也可以使用array=(value0 value1 value2),
  37. unset array[index] 删除素组中的某一个元素,unset array是删除整个数组。unset array[*] = unset array[@] = unset array
  38. 当在shell中执行一个命令,shell会启动一个子进程来运行程序,同时会吧一些变量的设置传递给被启动的子进程中,这些被传递的变量就是环境变量。与环境变量对应的变量是本地变量。之所以叫做本地变量,是因为这些变量被限制在shell进程中。就算在启动子进程,这些变量是不会被专递到子进程中的。
  39. 环境变量的导出:name=value;export name1 name2 name3.除了这样的定义方式,还支持如下定义方式:export name=value
  40. 例如:export PATH=${PATH}:/software/tools:/software/platform-tools
  41. shell启动默认的特殊变量,如下:
    1. home:当前用户的主目录,直接cd进去的目录
    2. shell:当前用户所使用的shell程序,如/bin/bash
    3. user:当前的登录用户名
    4. uid:扩展为当前用户数字的user id
    5. bash_version:当前用户使用的bash版本
    6. pwd:当前工作目录
    7. oldpwd:前一个工作目录、
    8. second:当前shell执行了多长时间。每次引用这个变量都会返回一个整数值;
    9. shlvl:当前是第几层的子进程
    10. random: 脚本中引用这个变量的时候,随机生成一个0到32767之间的整数
    11. ifs:
    12. path:到哪个目录去搜索可执行文件
  42. env 查看当前的环境变量
  43. 执行脚本需要传入参数的时候,这时候可以使用位置变量。位置变量的名字是从0开始的,可以使用$0...进行访问,需要注意的使用,$0表示的是命令或者脚本本身,真正的参数是从$1 开始算起的。
  44. $# 获取参数的个数
  45. $@ 和$* 的区别
  46. $? 每一个命令或者脚本结束运行以后都会返回一个0到255之间的数值,用来表示成功与否。0表示成功,其他表示失败。这个结果被保存在$? 变量中. 变量大于10 应该使用$
  47. $$ 表示当前脚本所在进程的pid
  48. 替换 在双引号之间可以使用``执行命令,作为结果输出,但更推荐使用$()的方式
  49. 只要操作的是文件,都可以使用通配符。如:? * ,[a-z] [^ab]例如:ls [ab]*
  50. shell支持这几种通配符。 和正则表达式一样的。
    1. *:表示0个或者多个任务字符
    2. ?:匹配一个任意字符
    3. []:自定范围匹配一个
  51. 算术运算替换使用 $(()) ,只能进行整数运算,结果中的小数部分会被忽略
  52. 特殊符号要转义。例如:& > < ,使用斜杠转义。转义的字符如下:
    1. ~ 用户的主目录
    2. ` 命令替换
    3. # 注释
    4. $ 变量引用
    5. & 任务放在后台执行
    6. * 通配符任意一个
    7. ? 通配一个字符
    8. () 在子shell中执行
    9. \ 引用后面的一个字符
    10. | 管道
    11. [] 指定字符集通配符
    12. {} 创建一个命令快
    13. ;“” ‘’ > <
  53. 特殊转义符号的意义:
    1. \b 打印一个backspace
    2. \c 不在输出后面的字符
    3. \n 打印换行符
    4. \t 打印水平制表符
    5. \v 打印垂直制表符
  54. 函数
  55. find [path] [expression]
  56. find -mtime 根据修改时间查找。-mtime n:修改的时间等于n;-mtime +n:修改的时间多于n天;-mtime -n:修改的时间少于n天
  57. locate通过本地数据库来检索文件名,而不像find直接访问文件系统
  58. whereis 或者which 可以查找可执行的程序
  59. file 命令可以查看文件的详细信息
  60. dd
  61. bzip2 /bzip/gzip/xz 等压缩命令,对应的解压缩命令: bunzip2/bunzip/gunzip/unxz 等
  62. tar -cvf aaa.tar filename dirname 只是打包
  63. tar -czvf aaa.tar.gz dirname 打包并压缩
  64. tar -xzvf aaa.tar.gz 解压
  65. wget curl 通过网络下载文件
  66. 信号量trap
  67. sed 处理文本
  68. awk 执行的操作要卸载模式后面的{} 中
  69. awk 'script' files
  70. awk /pattern/{actions} file .pattern 是一个正则表达式,表示对匹配的行执行action操作,多个操作之间用分号隔开。在action可以通过$1 $2 等直接访问第几个字段数据,默认是用空格分隔的,也可以指定分隔符
  71. grep [options] [regular expression] [filename...] .表示在filename中搜索表达式的值,然后把匹配的行的数据返回。
  72. /bin/bash -n a.sh 表示debug模式,检查语法是否有错,不真正的执行
  73. /bin/bash -x a.sh 打开trace模式

磁盘文件系统

  1. 磁盘的组成部分
    1. 圆形的磁盘盘(主要记彔数据癿部分);
    2. 机械扃臂,不在机械扃臂上癿磁盘读叏头(可擦写磁盘盘上癿数据);
    3. 主轴马达,可以转劢磁盘盘,讥机械扃臂癿读叏头在磁盘盘上读写数据。
  2. 磁盘盘的组成部分
    1. 扇区;最小物理存储单元。每个扇区是512byte
    2. 扇区组成磁柱
    3. 第一个扂区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
  3. 为什么要进行格式化
    1. 因为每一种操作系统所使用的文件系统格式不一样(filesystem)
    2. linux 默认使用ext2,而window不会识别这种文件系统格式
  4. 一个partition,也就是一个分隔槽只能被格式化成为一个文件系统。一个硬盘可以有多个partition,所以也就可以对应格式成为多个文件系统
  5. RAID磁盘阵列可以将多个partition格式成为一个文件系统。也可以将多个槽合并为一个文件系统
  6. 每一个文件系统都有固定的三块区域来存放不同的数据
    1. superblock:记彔此 filesystem 癿整体信息,包括 inode/block 癿总量、使用量、剩余量, 以 及文件系统癿格式不相关信息等;
    2. innode:记彔档案癿属性,一个档案占用一个 inode,同时记彔此档案癿数据所在癿 block 号 码;
    3. block:实际记彔档案癿内容,若档案太大时,会占用多个 block 。
  7. 由亍 Ext2 是索引式文件系统,基本上丌太需要帯帯迚行碎片整理癿。
  8. Ext2 文件系统在格式化癿时候基本上是区分为多个区块群组 (block group) 癿,每个 区块群组都有独立癿 inode/block/superblock 系统。感觉上就好像我们在当兵时,一个营里面有分成 数个连,每个连有自己癿联绚系统, 但最终都向营部回报连上最正确癿信息一般!这样分成一群群癿 比较好管理啦!整个来说,Ext2 格式化后有点像底下这样:
  9. dumpe2fs /dev/hdc2命令可以查看分区槽的使用的情况。默认查询的是superblock
  10. df 可以查看当前挂载的设备
  11. 对于系统存储数据很大的情况下,不是partition越大越好。越大的partition 在存储不连续的情况下,读取数据磁头移动的距离就越远
  12. 当系统加载一个文档到内存后,如果改文档没有修改过,则内存段的数据会被称干净的数据。但如果内存中癿档案数据被更改过了(例如你用 nano 去编辑过这个档案),此时该内存中癿 数据会被讴定为脏癿 (Dirty)。此时所有癿劢作都还在内存中执行,幵没有写入到磁盘中! 系统会丌定 时癿将内存中讴定为『Dirty』癿数据写回磁盘,以保持磁盘不内存数据癿一致性。 你也可以利用第五 章谈到癿 sync 挃令来扃劢强迫写入磁盘。
    1. 系统会将帯用癿档案数据放置到主存储器癿缓冲区,以加速文件系统癿读/写;
    2. 承上,因此 Linux 癿物理内存最后都会被用光!这是正帯癿情冴!可加速系统效能;
    3. 你可以扃劢使用 sync 来强迫内存中讴定为 Dirty 癿档案回写到磁盘中;
    4. 若正帯关机时,关机挃令会主劢呼叨 sync 来将内存癿数据回写入磁盘内;
    5. 但若丌正帯关机(如跳电、当机戒其他丌明原因),由亍数据尚未回写到磁盘内, 因此重新吪劢后 可能会花徆多时间在迚行磁盘检验,甚至可能寻致文件系统癿损毁(非磁盘损毁)。
  13. fdisk /dev/hdc 会提示输入m查看帮助信息。结合提示进行操作。fdisk只能在root用户下才能操作。
  14. 分割完成以后,就应该进行格式化了。mkfs [-t 文件系统格式] 装置文件名 。 fsck也是这样的功能
  15. 格式化以后,就应该挂载到指定目录上使用了。mount -a .umount
  16. dd if=/dev/zero of=/home/loopdev bs=1M count=512 可以将512块,每块1M大小的空间,合并成512M的档案。接下来可以使用格式化命令:mkfs -t ext3 /home/loopdev。然后mount 挂载,mount -o loop /home/loopdev /media/cdrom/
  17. free 查看内存
  18. tar gzip ,dump备份命令,可以增量备份
posted @   Eular  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示