-
表格对齐显示
#!/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 自动将输入的数据对齐显示
命令集合
- () 可以把多个命令在一起执行。如果在一行显示,中间必须要用逗号隔开。
- $(命令) 可以讲一个命令的执行结果作为另外一个命令的参数,而不是输入
- expr 除了可以完成基本的运算,还可以完成关于字符串的操作。expr 进行乘法运算时,要使用*
- column -t 可以格式化数据,并生成一个整齐的表格
- sed 1d 可以删除结果中的第一行数据
- 命令行中可以直接在 “
命令
” ,写法是双引号中间使用`` - read 等待用户输入命令。read -p “提示语” 变量1 变量2 变量3。会对用户输入的数据会以空格为分割符分割为多个变量的值
- readonly VERSION =1.0 定义一个只读变量,整个执行过程是不允许被修改的
- unset VERSION 删除一个变量。注意删除一个只读变量会失败的。
- cut 可以删除无关的数据。cut -c2 保留第二个字符以后的数据
- grep "^_" 匹配以下划线开有的数据
- head -5 显示前五行数据
- paste -d':' 文件1 文件2 文件3 |cat -n .将不同文件相同行用冒号连接起来
- uniq 去重功能,显示文件中不重复的行列数据
- tr 将标准输入的数据,转换后显示。相当于正则匹配并替换功能
- sort 对文档内容以行为单位进行排序。
- nohup 表示在后台运行的程序,当执行exit退出的时候,不会终止后台的运行的程序
- 尾部加& ,当作执行一个耗时的命令操作的时候,可以将执行挂在后台执行
- jobs 查看当前终端的后台进程
- bg %1 可以将挂起的进程移动到后台继续运行
- fb %1 将挂起的进程重新返回的前台运行
- ps -ef 查看系统中当前运行的所有进程
- kill 和killall 干掉进程
- 每一个进程 都会默认打开三个文件,或者说是文件描述符。分别对应的标准的输入、输出、错误输出。文件描述符的编号分别是0,1,2
- > 和>> 覆盖和追加内容到指定的文件中
- < 输入重定向、
- ./input.sh < /etc/password ,input.sh中,通过read oneline 内置函数,可以读取password文件中的一行数据。
- 错误重定向 &> outputfile
- 无用的日志信息可以选择重定向到 /dev/null中。/dev/null是系统中一个特殊的文件,它表示一个空的设备,但实际上是没有这样的硬件设备的,它好比是一个黑洞,只要你把这个数据丢进去,那这个数据就会消失。
- >&2 是将信息重定向到标准的错误输出
- mv 是移动,也是重命名
- cp scp
- ssh 我是谁@我在哪
- printf "" 标准输出内容
- 变量名一般大写,前后没有空格
- 数组 array[index]=value,也可以使用array=(value0 value1 value2),
- unset array[index] 删除素组中的某一个元素,unset array是删除整个数组。unset array[*] = unset array[@] = unset array
- 当在shell中执行一个命令,shell会启动一个子进程来运行程序,同时会吧一些变量的设置传递给被启动的子进程中,这些被传递的变量就是环境变量。与环境变量对应的变量是本地变量。之所以叫做本地变量,是因为这些变量被限制在shell进程中。就算在启动子进程,这些变量是不会被专递到子进程中的。
- 环境变量的导出:name=value;export name1 name2 name3.除了这样的定义方式,还支持如下定义方式:export name=value
- 例如:export PATH=${PATH}:/software/tools:/software/platform-tools
- shell启动默认的特殊变量,如下:
- home:当前用户的主目录,直接cd进去的目录
- shell:当前用户所使用的shell程序,如/bin/bash
- user:当前的登录用户名
- uid:扩展为当前用户数字的user id
- bash_version:当前用户使用的bash版本
- pwd:当前工作目录
- oldpwd:前一个工作目录、
- second:当前shell执行了多长时间。每次引用这个变量都会返回一个整数值;
- shlvl:当前是第几层的子进程
- random: 脚本中引用这个变量的时候,随机生成一个0到32767之间的整数
- ifs:
- path:到哪个目录去搜索可执行文件
- env 查看当前的环境变量
- 执行脚本需要传入参数的时候,这时候可以使用位置变量。位置变量的名字是从0开始的,可以使用$0...进行访问,需要注意的使用,$0表示的是命令或者脚本本身,真正的参数是从$1 开始算起的。
- $# 获取参数的个数
- $@ 和$* 的区别
- $? 每一个命令或者脚本结束运行以后都会返回一个0到255之间的数值,用来表示成功与否。0表示成功,其他表示失败。这个结果被保存在$? 变量中. 变量大于10 应该使用$
- $$ 表示当前脚本所在进程的pid
- 替换 在双引号之间可以使用``执行命令,作为结果输出,但更推荐使用$()的方式
- 只要操作的是文件,都可以使用通配符。如:? * ,[a-z] [^ab]例如:ls [ab]*
- shell支持这几种通配符。 和正则表达式一样的。
- *:表示0个或者多个任务字符
- ?:匹配一个任意字符
- []:自定范围匹配一个
- 算术运算替换使用 $(()) ,只能进行整数运算,结果中的小数部分会被忽略
- 特殊符号要转义。例如:& > < ,使用斜杠转义。转义的字符如下:
- ~ 用户的主目录
- ` 命令替换
- # 注释
- $ 变量引用
- & 任务放在后台执行
- * 通配符任意一个
- ? 通配一个字符
- () 在子shell中执行
- \ 引用后面的一个字符
- | 管道
- [] 指定字符集通配符
- {} 创建一个命令快
- ;“” ‘’ > <
- 特殊转义符号的意义:
- \b 打印一个backspace
- \c 不在输出后面的字符
- \n 打印换行符
- \t 打印水平制表符
- \v 打印垂直制表符
- 函数
- find [path] [expression]
- find -mtime 根据修改时间查找。-mtime n:修改的时间等于n;-mtime +n:修改的时间多于n天;-mtime -n:修改的时间少于n天
- locate通过本地数据库来检索文件名,而不像find直接访问文件系统
- whereis 或者which 可以查找可执行的程序
- file 命令可以查看文件的详细信息
- dd
- bzip2 /bzip/gzip/xz 等压缩命令,对应的解压缩命令: bunzip2/bunzip/gunzip/unxz 等
- tar -cvf aaa.tar filename dirname 只是打包
- tar -czvf aaa.tar.gz dirname 打包并压缩
- tar -xzvf aaa.tar.gz 解压
- wget curl 通过网络下载文件
- 信号量trap
- sed 处理文本
- awk 执行的操作要卸载模式后面的{} 中
- awk 'script' files
- awk /pattern/{actions} file .pattern 是一个正则表达式,表示对匹配的行执行action操作,多个操作之间用分号隔开。在action可以通过$1 $2 等直接访问第几个字段数据,默认是用空格分隔的,也可以指定分隔符
- grep [options] [regular expression] [filename...] .表示在filename中搜索表达式的值,然后把匹配的行的数据返回。
- /bin/bash -n a.sh 表示debug模式,检查语法是否有错,不真正的执行
- /bin/bash -x a.sh 打开trace模式
磁盘文件系统
- 磁盘的组成部分
- 圆形的磁盘盘(主要记彔数据癿部分);
- 机械扃臂,不在机械扃臂上癿磁盘读叏头(可擦写磁盘盘上癿数据);
- 主轴马达,可以转劢磁盘盘,讥机械扃臂癿读叏头在磁盘盘上读写数据。
- 磁盘盘的组成部分
- 扇区;最小物理存储单元。每个扇区是512byte
- 扇区组成磁柱
- 第一个扂区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
- 为什么要进行格式化
- 因为每一种操作系统所使用的文件系统格式不一样(filesystem)
- linux 默认使用ext2,而window不会识别这种文件系统格式
- 一个partition,也就是一个分隔槽只能被格式化成为一个文件系统。一个硬盘可以有多个partition,所以也就可以对应格式成为多个文件系统
- RAID磁盘阵列可以将多个partition格式成为一个文件系统。也可以将多个槽合并为一个文件系统
- 每一个文件系统都有固定的三块区域来存放不同的数据
- superblock:记彔此 filesystem 癿整体信息,包括 inode/block 癿总量、使用量、剩余量, 以 及文件系统癿格式不相关信息等;
- innode:记彔档案癿属性,一个档案占用一个 inode,同时记彔此档案癿数据所在癿 block 号 码;
- block:实际记彔档案癿内容,若档案太大时,会占用多个 block 。
- 由亍 Ext2 是索引式文件系统,基本上丌太需要帯帯迚行碎片整理癿。
- Ext2 文件系统在格式化癿时候基本上是区分为多个区块群组 (block group) 癿,每个 区块群组都有独立癿 inode/block/superblock 系统。感觉上就好像我们在当兵时,一个营里面有分成 数个连,每个连有自己癿联绚系统, 但最终都向营部回报连上最正确癿信息一般!这样分成一群群癿 比较好管理啦!整个来说,Ext2 格式化后有点像底下这样:
- dumpe2fs /dev/hdc2命令可以查看分区槽的使用的情况。默认查询的是superblock
- df 可以查看当前挂载的设备
- 对于系统存储数据很大的情况下,不是partition越大越好。越大的partition 在存储不连续的情况下,读取数据磁头移动的距离就越远
- 当系统加载一个文档到内存后,如果改文档没有修改过,则内存段的数据会被称干净的数据。但如果内存中癿档案数据被更改过了(例如你用 nano 去编辑过这个档案),此时该内存中癿 数据会被讴定为脏癿 (Dirty)。此时所有癿劢作都还在内存中执行,幵没有写入到磁盘中! 系统会丌定 时癿将内存中讴定为『Dirty』癿数据写回磁盘,以保持磁盘不内存数据癿一致性。 你也可以利用第五 章谈到癿 sync 挃令来扃劢强迫写入磁盘。
- 系统会将帯用癿档案数据放置到主存储器癿缓冲区,以加速文件系统癿读/写;
- 承上,因此 Linux 癿物理内存最后都会被用光!这是正帯癿情冴!可加速系统效能;
- 你可以扃劢使用 sync 来强迫内存中讴定为 Dirty 癿档案回写到磁盘中;
- 若正帯关机时,关机挃令会主劢呼叨 sync 来将内存癿数据回写入磁盘内;
- 但若丌正帯关机(如跳电、当机戒其他丌明原因),由亍数据尚未回写到磁盘内, 因此重新吪劢后 可能会花徆多时间在迚行磁盘检验,甚至可能寻致文件系统癿损毁(非磁盘损毁)。
- fdisk /dev/hdc 会提示输入m查看帮助信息。结合提示进行操作。fdisk只能在root用户下才能操作。
- 分割完成以后,就应该进行格式化了。mkfs [-t 文件系统格式] 装置文件名 。 fsck也是这样的功能
- 格式化以后,就应该挂载到指定目录上使用了。mount -a .umount
- 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/
- free 查看内存
- tar gzip ,dump备份命令,可以增量备份