在学习过程中记录的一些常用命令,供日常参考。
1 在线求助#
1.1 man page##
1.1.1 壳程序
文本模式登入后所取得的程序被称为壳,这是因为这支程序负责最外面跟使用者沟通,所以被戏称为壳程序
1.1.2 指令太长可以使用\进行分行
1.1.3 英文大小写字母是不一样的
1.1.4 语系的支持:
echo $LANG 或 locale
1.2 基础指令的操作
1.2.1 date:显示日期与时间的指令
date格式化:date +%Y/%m/%d 或 date +%H:%M
1.2.2 cal:显示日历的指令
cal [month][year]
1.2.3 bc
简单好用的计算器(如需小数点下位数,需执行scale=number,quit离开)
1.2.4 ctrl+d
类似于exit,能够直接离开
1.3 Linux系统的在线求助
1.3.1 man 之后,主动搜索关键词
向下搜索:输入/word,向上搜索:?string
1.3.2 man之后,常见的几个数字意义
如DATE(1)
| 代号 | 内容说明 |
|---|---|
| 1 | 用户在shell环境中可以操作的指令或可执行文件 |
| 2 | 系统核心可呼叫的函数与工具等 |
| 3 | 一些常用的函数与函式库,大部分为C的函式库 |
| 4 | 装置档案的说明,通常在/dev下的档案 |
| 5 | 配置文件或者是某些档案的格式 |
| 6 | 游戏 |
| 7 | 惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明 |
| 8 | 系统管理员可用的管理指令 |
| 9 | 跟kernel有关的文件 |
1.3.3 man 之后,大致分为几个部分
| 代号 | 内容说明 |
|---|---|
| NAME | 简短的指令,数据名称说明 |
| SYNOPSIS | 简短的指令下达语法简介 |
| DESCRIPITION | 较为完整的说明,这部分最好仔细看看 |
| OPTIONS | 针对SYNOPSIS部分中,有列举的所有可用的选项说明 |
| COMMANDS | 当这个程序在执行的时候,可以在此程序中下达的指令 |
| FIFES | 这个程序或数据所使用或参考或连结到的某些档案 |
| SEE ALSO | 可以参考的,跟这个指令或数据有相关的其他说明 |
| EXAMPLE | 一些可以参考的范例 |
| BUGS | 是否有相关的bug |
- man –f 指令(相当于whatis [指令或数据]):找出命令的所有完整名称
- man –k 指令(相当于apropos[指令或数据]) 找出含有该指令的关键字的所有档案
- whatis和apropos指令能使用,必须要建立whatis数据库才行,建立方法:makewhatis
1.4 man 和 info的区别
1.4.1 man page
一口气输出一堆信息
1.4.2 info page
将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写,并且各个页面中还有类似网页的【超链接】来跳到各不同的页面中,每个独立的页面也被成为一个节点。
1.4.3 info page 文件放置
/usr/share/info/
1.4.4 /usr/share/doc
1.4.5 man page 显示内容的档案放置目录
/usr/share/man/ 、/usr/local/man
1.5 观察系统的使用状态
1.5.1 who
查看当前在线用户及详细信息
1.5.2 netstat –a
查看网络的联机状态
1.5.3 ps –aux
查看背景执行的程序
1.6 几个与关机/重启相关的指令
1.6.1 sync
将数据同步写入硬盘中的指令(系统关机或重启之前最好多执行几次)
1.6.2 shutdown
管用的关机指令
1.6.3 reboot,halt,poweroff
重新启动
1.6.4 halt和shutdown的区别:
- halt:能够不理会目前系统状况下,进行硬件关机
- shutdown:可以依据目前已启动的服务来逐次关闭各服务后才关机
- Linux的7种执行等级
- run level 0:关机
- run level 3:纯文本模式
- run level 5:含有图形接口模式
- run level 6:重新启动
1.6.6 fsck
文件系统检查的指令
1.6.7 如果根目录损坏
可以使用Live CD利用光盘开机进入Linux操作系统,然后fsck设备名
1.7 建议划分的磁盘区块
/ /boot /usr /home /var
1.8 root密码忘记,更改方法
http://jingyan.baidu.com/article/fec7a1e51096481191b4e746.html
2 Linux的档案权限与目录配置
2.1 Linux用户身份与群组记录的档案
2.1.1 /etc/passwd
记录系统上账号和root相关信息
2.1.2 /etc/shadow
记录个人的密码
2.1.3 /etc/group
所有的组名
2.2 基本命令
2.2.1 ls –l –full-time
能够显示完整的时间格式
2.2.2 权限修改指令
- chgrp:改变档案所属群组
- chown:改变档案拥有者
- chmod:改变档案的权限,SUID,SGID,SBIT等的特性
- 能不能进入目录和X权限有关,和r权限无关
- 不管other身份是否具有某文件的r w x权限,只要在自己的home目录下,都有删除该文件
2.3 FIFO-数据输送文件
主要的目的解决多个程序同时存取一个档案所造成的错误问题
2.4 档案名
避免将档案档名的开头以-或+来命名
2.5 Linux目录配置的依据
FHS(Filesystem Hierarchy Standard)标准
- 重点在于规范每个特定的目录下应该要放置什么样的数据
- 根据FHS,目录定义为
| : | 可分享的 | 不可分享的 |
|---|---|---|
| 不变的(static) | /usr(软件放置处) | /etc(配置文件) |
| 不变的(static) | /opt(第三方协力软件) | /boot(开机与核心档) |
| 可变动的(variable) | /var/mail(使用者邮件信箱) | /var/run(程序相关) |
| 可变动的(variable) | /var/spool/news(新闻组) | /var/lock(程序相关) |
2.6 Linux登录数据记录位置
/var/log/wtmp
2.7 文件类型
2.7.1 连结档
类似Windows系统底下的快捷方式,第一个属性为l,例:lrwxrwxrwx
2.7.2 设备与装置文件
与系统周边及存储等相关的一些档案,通常都集中在/dev这个目录下,通常分为两种
- 区块(block)设备档:储存数据,字符b
- 字符(character)设备文件:一些串行端口接口设备,字符c
2.7.3 数据接口文件(socket),第一个属性为s
2.7.4 数据传送文件,第一个属性为p
2.8 /lib/modules/放置核心相关的模块(驱动程序)
2.9 /proc
本身是一个“虚拟文件系统”,放置的数据都是在内存当中,例如:系统核心、行程信息、周边装置的状态及网络状态
2.10 下面五个目录不可与根目录分开在不同的分割槽
- /etc:配置文件
- /bin:重要执行档
- /dev:所需要的装置档案
- /lib:执行档所需的函式库不核心所需的模块
- /sbin:重要的系统执行文件
2.11 usr
Unix Software Resource Unix操作系统软件资源
2.12 /selinux
此目录的内容数据是在内存中的信息,不会占用任何硬盘容量,它是Linux核心的重要外挂功能之一,Secure Enhance Linux的执行目录
2.13 ./代表本目录
如果执行文件放置在本目录,但本目录并非正规的执行文件目录(/bin,/usr/bin等为正规),需要严格指定该执行档案,例./文件名.sh
2.14 查看Linux基本信息
- uname –r 可以察看实际的核心版本
- lsb_release –a:查看LSB版本
2.15 要开放目录给任何人浏览时,应至少给予r及x的权限,但w权限不可随便给
2.16
/bin放置的是一般用户惯用的指令,/sbin是系统管理员才会使用的指令,它们俩都与开机、单人维护模式有关,更多执行档被放置到/usr/bin及/usr/sbin底下
3 Linux档案与目录管理
3.1 – 代表前一个工作目录
3.2 pwd –P显示确实的路径
3.3 mkdir
- –m 创建目录,并配置权限
- –p 直接将所需要的目录递归建立起来
3.4 rmdir 仅能“删除空的目录”
3.5 echo $PATH $表示后面接的是变量
3.6 使用PATH=”$PATH”:/root
将/root路径加入到PATH中
3.7 ll=ls –l
3.8 cp复制
cp –a 源文件 目标文件 会将将档案所有特性都一起复制过来
cp –s 建立符合链接,类似一个快捷方式
cp –l 实体链接
cp –d 可以将链接文件的属性复制来
可以将多个数据文件一次复制到同一个目录中去
例:cp ~/.bashrc ~/.bash_history /tmp
3.9 删除带-开头的档案
rm ./–aaa-
3.10 touch(修改档案时间或建置新档)
3.10.1 可以建立空档案
3.10.2 时间参数
- mtime:modification time 当该档案的内容数据变更时,会更新此时间
- ctime: status time当该档案状态改变时,会更新此时间,如权限和属性
- atime:access time 当档案的内容被取用时,更新此时间
3.10.3 如果系统时间来自未来,touch一下即可,三个时间参数都会变成当前时间
3.11 rename
可以用来更改大量档案的档名
3.12 取得路径的文件名与目录名称
3.12.1 basename 取得最后档案名
例:basename /etc/sysconfig/network 输出:network
3.12.2 dirname 取得目录名
例:dirname /etc/sysconfig/network 输出:/etc/sysconfig
3.13 档案内容查阅
3.13.1 cat
由第一行开始显示档案内容
-A 显示完整内容(包含特殊字符) tab(^I表示) 断行字符($表示)
3.13.2 tac
从最后一行开始显示
3.13.3 nl
显示的时候,顺道输出行号
3.13.4 more
一页一页的显示档案内容
3.13.5 less类似more,它可以往前翻页
3.13.6 head只看头几行
例:head –n -100 文档 除了后面100行数据都打印
3.13.7 tail 只看最后几行
例:tail –f 文档名 持续监测后面所接的文档,tail –n +100 文档名,档案从100行后都会被列出来
3.13.8 od 以二进制的方式读取档案内容
3.14 档案与目录的默认权限与隐藏权限
- 其他系统隐藏属性,chattr来设定,lsattr来查看
- chattr +i 文档,设置一个档案无法被删除,改名,或者写入等,取消-i
- lsattr 查看隐藏的属性
3.15 umask(档案预设权限)
3.15.1 档案预设权限666
-rw-rw-rw- -022 == -rw-r—r--
3.15.2 目录预设权限777
drwxrwxrwx -022 == -drwxr-xr-x
3.15.3 修改值
直接在umask后面添加数字即可
3.16 Set UID,简称SUID特殊权限,限制和功能如下
- 仅对二进制程序有效
- 执行者对于该程序需要具有x的可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
- 对目录无效
3.17 Set GID,功能如下
- SGID对二进制程序有用
- 程序执行者对于该程序来说,需具备x的权限
- 执行者在执行的过程中将会获得该程序群组的支持
3.18 Sticky Bit,简称SBIT,对于目录的作用
- 当用户对于此目录具有w,x权限,亦即具有写入的权限时;
- 当用户在该目录下建立档案或目录时,仅有自己与root才有权利删除该档案
3.19 SUID(4)/SGID(2)/SBIT(1)权限设定
例 chmod 4755 filename
3.20 file 观察文件类型
3.21 搜索
3.21.1 which 脚本文件名的搜索(执行档)
-a列出所有可以找到的同名执行文件,非仅显示第一个;which预设是找PATH内所规范的目录,bash内建的指令不会查找
3.21.2 whereis(寻找特定档案)
速度快的原因:系统内的所有档案都记录在一个数据库档案里,使用whereis都会以此数据库档案的内容为准
3.21.3 locate
- 方便忘记完整档案名时使用;
- 它是由“已建立的数据库/var/lib/mlocate/”里面的数据所搜寻到的,缺点,数据库更新频率慢
- 手动更新数据库方法:updatedb
3.21.4 find
可以找到n天内,或者n天前更动过的内容档案
- find /etc –newer /etc/passwd :寻找/etc底下的档案,如果档案日期比/etc/passwd新就列出
- find /home –user vbird:寻找/home 底下属于vbird的档案
- find / -nouser 搜寻系统中不属于任何人的档案
- find / -perm +7000 –exec ls –l {} ;
- find 参数-a 表示and,-o表示or
3.22 alias 命令别名
3.23 id 账号 查阅账号的属性
4 Linux磁盘与文件系统管理
4.1 磁盘分区完毕后,格式化的原因
以便成为操作系统能够利用的“文件系统格式”
4.2 文件系统运作
4.2.1 档案权限(rwx)与文件属性(拥有者、群组、时间参数等)
4.2.2 inode
放置档案权限和属性,一个档案占用一个inode,有档案数据放置的block号码
4.2.3 data block区块
放置实际数据,若档案太大,会占用多个block
4.2.4 superblock超级区块
记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等,以及文件系统的格式与相关信息等,大小:1024bytes
4.2.5 优点
可以一口气将多个block内容全部读出来
4.2.6 由于ext是索引式文件系统,基本不需要碎片整理
4.3 data block(资料区块)
- block大小与数量在格式化完就不能再改变
- 每个block内最多放置一个档案的数据
- 如档案大于block的大小,则一个档案会占用多个block数量
- 如档案小于block,则该block的剩余容量就不能够再被使用了
4.4 inode table
4.4.1 每个inode大小均固定为128bytes
4.4.2 每个档案都仅会占用一个inode
4.4.3 文件系统能够建立的档案数量与inode的数量有关
4.5 superblock
4.5.1 只有在第一个block group内会含有superblock
4.5.2 大小1024bytes
4.6 Filesystem Description(文件系统描述说明)
可以描述每个block group的开始与结束的block号码,以及说明每个区段(superblock,bitmap,inodemap,data block)分别介于哪一个block号码之间
4.7 查看Linux支持的文件系统
ls –l /lib/modules/$(uname -r)/kernel/fs
4.8 已加载到内存中支持的文件系统
cat /proc/filesystems
4.9 Linux管理认识的文件系统
通过一个名为Virtual Filesystem Switch的核心功能去读取filesystem
4.10 /proc
这个目录本身是一个虚拟文件系统,放置的数据都是在内存中,如系统核心、行程信息、周边装置的状态及网络状态等,本身不占用任何硬盘空间上
4.11 磁盘与目录的容量
4.11.1 df
列出文件系统的整体磁盘使用量
4.11.2 du
评估文件系统的磁盘使用量
- 直接输入,不加任何选项时,会分析“当前所在目录”的档案与目录所占用的硬盘空间
- du –sm /* 检查根目录底下每个目录所占用的容量
4.12 实体链接和符号链接
4.12.1 Hard Link实体链接,硬式链接或实际连结
只是在当前目录价的block多写入了一个关联数据,既不会增加inode也不会耗用block数量
- 不能跨Filesystem
- 不能link目录
4.12.2 Symbolic Link 符号链接,亦即快捷方式
- 建立一个独立的档案,读取档案link的那个档案档名
- 修改符号链接档,实体文件也会跟着修改
4.12.3 当建立一个新目录时,新目录link数为2,上层目录数+1
4.13 延伸分割最好能够包含所有未分割的区间
- SATA硬盘最多能够支持15号的分割槽
- IDE则可以支持到63号
- fdisk无法处理大于2TB以上的磁盘分区槽
4.14 磁盘格式化(make filesystem)
4.14.1 mkfs
例:mkfs –t ext3 /dev/hd2
4.14.2 格式化话需要指定详细信息,使用mke2fs
4.15 磁盘检验:fsck,badblocks
badblocks用来检查硬盘或软盘扇区有没有坏轨的指令
4.16 磁盘挂载和卸除
单一文件系统不应该被重复挂载在不同的挂载点(目录)中
单一目录不应该重复挂载多个文件系统
要作为挂载点的目录,理论上应该都是空目录才是
挂载命令:mount
linux支持的文件系统之驱动程序都写在如下目录中:
/lib/modules/$(uname -r)/kernel/fs/正确的磁盘文件名要看你的光驱是什么连接接口的环境
如果带有中文文件名的数据,可以指定挂载文件系统使用的语系,使用iocharset=utf-8
mount –bind :将某个目录挂载到其他目录
umount(将装置档案卸除):如果挂载的是目录,一定要用挂载点
e2label:修改文件系统标头(Label)
tune2fs:可以列出superblock的内容,还可以更新文件系统,ext2变成ext3等
4.17 dumpe2fs
每个区段与superblock的信息都可以使用该指令来查询
4.18 hdparm
可以帮助设定一些进阶参数
4.19 dump
一个用来作为备份的指令,可以透过fstab指定哪个文件系统必须进行dump备份,0代表不做dump备份,1代表每天进行dump的动作,2代表其他不定日期的dump备份动作
4.20 /etc/fstab
开机时的配置文件,主要记录的是挂载的文件系统
4.21 挂载光盘/DVD映像文件,无需刻录成光盘,也能使用
- mkdir 目录
- mount –o loop 文件所在目录(loop挂载回旋设备以及ISO镜像文件)
4.22 swap
- 应付物理内存不足的情况下所造成的内存延伸记录的功能
- 被利用到的时刻通常是物理内存不足的情况
4.23 partprobe
告知核心必须要读取新的分割表
4.24 开机管理程序
安装到boot sector,在superblock之前,如果block>2024byte,那么他们俩在一个block(0),如果block<2024byte,那么两者分别在不同的block
4.25 使用GUN的parted进行分割
4.25.1 parted 【装置】 【指令【参数】】
5 档案与文件系统的压缩与打包
5.1 常见的压缩指令
- *.Z compress 程序压缩癿档案;
- *.gz gzip 程序压缩癿档案;
- *.bz2 bzip2 程序压缩癿档案;
- *.tar tar 程序打包癿数据,并没有压缩过;
- *.tar.gz tar 程序打包癿档案,其中并且经过 gzip 癿压缩
- *.tar.bz2 tar 程序打包癿档案,其中并且经过 bzip2 癿压缩
5.1.1 compress:比较老旧的压缩指令
5.1.2 gzip:压缩之后,源文件不再存在
- gzid –d == gunzip解压缩 gzip –c 保留原文档
- zcat:读取纯文本档被压缩后的压缩文件
5.1.3 bzip2,bzcat
- 是为了取代gzip并提供更佳的压缩比而来的
- 压缩:bzip2 –z
- 读取压缩的文档:bzcat
- 解压缩:bzip2 –d == bunzip2
5.1.4 tar
压缩:tar –jcv –f filename.tar.bz2 要被压缩的档案或目录名称
查询:tar –jtv –f filename.tar.bz2
解压缩:tar –jxv –f filename.tar.bz2 –C 欲解压缩的目录
仅解开单一档案的方法:
- 先查询找到我们要的档名
- 将档案解开
tar –jxv –f /root/etc.tar.bz2 etc/shadow
打包某目录,但不含该目录下的某些档案
例:tar –jcv –f /root/system.tar.bz2 –exclude=/root/etc* \ exclude=/root/system.tar.bz2 /etc /root基本名称:tarfile,tarball
- tarfile:仅是打包
- tarball:打包并压缩
5.2 完整备份工具:dump
5.2.1 可以备份整个filesystem,也可以针对目录来备份
5.2.2 备份完整的文件系统
- 先找出需要备份的那个文件系统 df –h
- 测试备份此文件系统需要多少容量:dump –S 文件系统
- 完整备份文件系统:dump -0u –f /root/boot.dump /boot
- –u 是将备份时间更新至/etc/dumpdates 档案,只支持完整备份
5.2.3 dump –W 查看是否有文件系统被dump过
5.2.4 备份目录时,需要完整备份,且不使用level和-u
5.3 restore复原
5.3.1 restore –C [-f dumpfile] [-D 挂载点]:比较dump与实际档案
5.3.2 restore –t [-f dumpfile] [-h] :查看dump档案
5.3.3 retore –i [-f dumpfile]:进入互动模式,可以从备份数据中只取出一部分
5.4 光盘写入工具
5.4.1 文本模式刻录作法
- 先将所需要备份的数据建置成为一个映像档,利用mkisofs指令来处理
- 将该映像文件刻录至光盘或DVD中,利用cdrecord指令来处理
5.4.2 mkisofs:建立映像档
5.4.3 cdrecord:光盘刻录工具
查询刻录机:cdrecord –scanbus dev=ATA
5.4.4 CD-RW会自动抹除,DVD-RW要自己手动抹除才行
5.5 其他常用的压缩和备份工具
5.5.1 dd
可以读取磁盘装置的内容,然后将整个装置备份成一个档案
dd if=”input_file” of=”output_file” bs=”block_size” count=”number”
tar可用来备份关键数据,dd则可以用来备份整颗partition或整颗disk
需要建置两颗一模一样的磁盘时,命令:
dd if=/dev/sda of=/dev/sdb
5.5.2 cpio
- 可备份任何东西,不会主动的去找档案来备份,需配合find
- 备份:cpio –ovcV > [file|device]
- 还原:cpio –ivcdu < [file|device]
- 察看:cpio –ivct < [file|device]
6 vim 程序编辑器
6.1 多窗口功能
(:sp),ctrl+w进行切换
6.2 多档案编辑
vim file1 file2 ;(:n 下一个档案 :N上一个档案 :files列出目前开启的所有档案)
6.3 查找设定值
一般模式下(:set all)
6.4 整体的vim设定值时放置在/etc/vimrc这个档案
6.5 记录动作的档案:(~/.viminfo)
6.6 DOS与Linux的断行字符
- dos2unix [-kn] file [newfile] DOS转换成linux
- unix2dos [-kn] file [newfile] linux转换成DOS
6.7 语系编码转换
6.7.1 iconv
7 认识与学习BASH
7.1 管理计算机硬件的是核心kernel,我们只能透过shell来跟核心沟通
7.2 Linux使用的shell版本称为:Bourne Again Shell(简称bash)
7.3 用户登录取得的shell记录在/etc/passwd这个档案内
7.4 bash优点:
7.4.1 命令编修能力:能记忆使用过的1000个指令(上下键),1000个指令放在个人目录下面的.bash_history(即~/.bash_history)
7.4.2 命令与档案补全功能
7.4.3 命令别名设定功能(alias)
7.4.3.1 直接输入alias,查看当前命令别名有哪些
7.4.3.2 也可以直接下达命令设定别名:如:alias lm=’ls -al’
7.4.4 工作控制、前景背景控制(Linux过程控制中讲解)
7.4.5 程序化脚本(shell scripts)
7.4.6 通配符
7.5 使用type指令可以观察某个指令是来自于外部还是内建的bash中
7.5.1 例 typy [-tpa] name
7.6 Shell的变量功能
7.6.1 环境变量是大写,自定义变量是小写
7.6.2 变量设定规则
7.6.2.1 等号=两边不能直接接空格符
7.6.2.2 变量名称开头字符不能是数字
7.6.2.3 var=”lang is $LANG” echo $var 可得lang is en_US
7.6.2.4 var=’lang is $LANG’ echo $var可得 lang is $LANG
7.6.2.5 可使用\将特殊符号变成一般字符
7.6.2.6 取消变量的方法为使用unset
7.6.2.7 若变量需要在其他子程序执行,则需以export来使变量变成环境变量
7.6.2.8 当需要其他指令执行的信息时,使用指令 或$(指令)
- 7.6.2.8.1 例 cd /lib/modules/
uname -r/kernel - 7.6.2.8.2 cd /lib/modules/$(uname –r)/kernel
7.6.2.9 例:列出相关档名的权限 ls –l locate crontab
7.7 环境变量的功能
7.7.1 查看默认的环境变量,可以利用env(environment)和export两个指令查阅
7.7.2 用set观察所有变量(含环境变量与自定义变量)
7.7.3 查看自己个人账号的pid使用:echo $$
7.7.4 echo $?关于上个执行指令的回传值
7.7.5 export:让父程序的变量值继续在子程序中使用,如果没有接变量,会把所有的环境变量显示出来.被export后的变量,可称为“环境变量”
7.7.6 declare:将环境变量转成自定义变量
7.7.7 在linux当中,通常仅设定LANG这个变量,因为它是最主要的设定变量
7.7.8 整体系统默认的语系定义在/etc/sysconfig/i18n
7.8 变量键盘读取、数组与宣告:read,array,declare
7.8.1 read:读取来自键盘输入的变量
7.8.1.1 read [-pt] 变量
7.8.2 declare / typeset
7.8.2.1 宣告变量的类型
7.8.2.2 declare [-aixr] 变量
7.8.2.3 declare +x sum 将-变成+,可以进行“取消”动作
7.9 bash对变量有几个基本定义:
7.9.1 变量类型默认为“字符串”
7.9.2 数值计算,仅能达到整数形态,如1/3结果是0
7.10 数组(array)变量类型:通过${数组}读取
7.11 ulimit:限制用户的某些资源
7.11.1 ulimit [-SHacdfltu] [配额] 显示信息中,0代表没有限制
7.12 变量内容的删除与取代
7.12.1 ${variable#/(开始符号)*符号(结束符号)}
| 变量设定方式 | 说明 |
|---|---|
| ${变量#关键词} ${变量##关键词} | 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除。若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除 |
| ${变量%关键词} ${变量%%关键词} | 若变量内容从尾向前的数据符合【关键词】,则将符合的最短数据删除;若变量内容从尾向前的数据符合【关键词】,则将符合的最长数据删除 |
| ${变量/旧字符串/新字符串} ${变量//旧字符串/新字符串} | 若变量内容符合【旧字符串】则【第一个旧字符串被新字符串取代】;若变量内容符合【旧字符串】则【全部的旧字符串会被新字符串取代】 |
7.12.2 new_var = ${old_var-content}
- 如果old_var未设定内容,则content内容赋予new_var。
- 如果old_var设定了内容,则new_var=old_var
7.12.3 new_var = ${old_var:-content}
加上:后若变量内容为空或是未设定,都能够以后面的内容替换
7.13 history
7.13.1 !number 执行第几笔指令的意思
7.13.2 !command 由最近的指令向前搜索的那个指令,并执行
7.13.3 !!执行上一个指令
7.14 bash进站与欢迎讯息:/etc/issue,/etc/motd(所有的使用者登录时都会显示)
7.15 bash的环境配置文件
7.15.1 login:
- 7.15.1.1 取得bash时需要完整的登录流程
- 7.15.1.2 只会读取这两个配置文件
- 7.15.1.2.1 /etc/profile:系统整体设定文件
- 7.15.1.2.1.1 PATH环境变量设置在此文件中设置,建议更改~/.bashrc
- 7.15.1.2.2
/.bash_profile或/.bash_login或~/.profile 属于使用者个人设定,只会读取三个档案中的一个,按顺序。
- 7.15.1.2.1 /etc/profile:系统整体设定文件
- 7.15.1.3 source:读入环境配置文件的指令
7.15.2 non-login shell:
- 7.15.2.1 取得bash接口的方法不需要重复登入的举动,一般以图形化登入时
- 7.15.2.2 仅会读取~/.bashrc
- 7.15.2.3 如果~/.bashrc不小心删除了,可以从/etc/skel/.bashrc复制过来
7.16 终端机的环境设定:stty,set
- 7.16.1 stty:设定终端机的输入按键代表的意义
- 7.16.2 按键功能的设定在/etc/inputrc
7.17 数据流重导向
- 7.17.1 标准输入stdin:代码0 使用< 或<<
- 7.17.2 标准输出stdout:代码1 使用>或>>
- 7.17.3 标准错误输出(stderr): 代码为2,使用2> 或2>>
- 7.17.4 /dev/null可以吃掉任何导向这个装置的信息
例:2/dev/null
- 7.17.5 将指令的数据全部写入名为list的档案中
例:find /home –name .bashrc list 2&1
或 find /home –name .bashrc &list
- 7.17.6 >> 代表的是【结束的输入字符】的意思
例cat catfile << “eof”
7.18 关机的时候可以先执行两次sync同步化写入磁盘后才shutdown计算机
sync;sync;shutdown –h now
7.19 选取命令:cut,grep
7.19.1 cut 可以将某段讯息的某一段给切出来(同一行里面的数据进行分解)
语法:cut –d ‘分隔字符’ –f fields 用于有特定分隔字符的
7.20 last : 显示登入者的信息
7.21 sort:排序
7.22 uniq:将重复的资料仅列出一个显示
7.23 wc:统计档案里的字数和行数
7.24 tee:双向重导向 -a以累加的方式,将数据加入到file中
7.25 字符转换命令:tr,col,join,paste,expand
- 7.25.1 tr 用来删除一段讯息当中的文字
- 7.25.2 join 处理两个档案之间的数据,两个档案中,有相同数据的哪一行,才将他加在一起的意思
- 7.25.3 paste:直接将两行贴在一起,且中间以tab键隔开
- 7.25.4 expand:将tab按键转换成空格键
7.26 分割命令:将一个大档案依据档案大小或行数来分割
- 语法:split [-bl] file PREFIX
- 例:split –b 300k /etc/termcap test
- 将上面分割的几个小档案合成一个档案,档名为termcapback
- cat test* >> termcapback
7.27 finger
finger: 为系统管理员提供知道某个时候到底有多少用户在使用这台Linux主机的方法, 通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。
7.28 减号-的用途:
tar –cvf - /home | tar –xvf –
解释:将/home里面的档案打包,但打包的数据不是记录到档案,而是传送到stdout,经管线后,将tar –cvf - /home 传送给后面的tar –xvf -,后面的-则是取用前一个指令的stdout
8 正规表示法和文件格式化处理
8.1 正规表示法和通配符
- 8.1.1 正规表示法是一种字符串处理的表示方式
- 8.1.2 通配符是bash操作接口的一个功能
8.2 dmesg – 可列出核心产生的讯息
8.3 grep
grep [-A] [-B] [--color=auto] '搜寻字符串' filename
**选项不参数: **
-A :后面可加数字,为 after 的意思,除了列出该行外,后续癿 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面癿 n 行也列出来;
–color=auto 可将正确癿那个撷叏数据列出颜色
当有共通的‘t?st’存在时,使用下面的命令
grep -n 't[ae]st' regular_express.txt
反向选择:
例:grep -vn 'the' regular_express.txt
不区分大小写:
grep -in 'the' regular_express.txt
某字符前不要有小写字符
grep -n '[^a-z]oo' regular_express.txt
定位行首
例:grep -n '^[^[:alpha:]]' 文件名
找出行尾结束为小数点(.)的那一行
例:grep -n '\.$' 文件名
去掉空白行与开头为#的那一行是批注
例:grep -v '^$' /etc/syslog.conf | grep -v '^#'
8.4 特殊符号代表意义
| 特殊符号 | 代表意义 |
|---|---|
| [:alnum:] | 代表英文大小写字符及数字,即0-9,A-Z,a-z |
| [:alpha:] | 代表任何英文大小写字符,即A-Z,a-z |
| [:blank:] | 代表空格键与【Tab】按键两者 |
| [:cntrl:] | 代表键盘上面的控制按键,即包括CR,LF,Tab,Del。。。等等 |
| [:digit:] | 代表数字而已,即0-9 |
| [:graph:] | 除了空格符(空格键与【Tab】按键)外的其他所有按键 |
| [:lower:] | 代表小写字符,即a-z |
| [:print:] | 代表任何可以被打印出来的字符 |
| [:upper:] | 代表大写字符,即A-Z |
| [:space:] | 任何会产生空白的字符,包括空格键,[Tab],CR等等 |
| [:xdigit:] | 代表16进位的数字类型 |
小数点.与重复字符* 和 限定连续字符范围{}
.(小数点):代表【一定有一个任意字符】的意思;
*(星号):代表【重复前一个0到无穷多次】的意思,为组合形态。
{}:限定字符个数,因为{}符号在shell中有特殊意义,因此需要使用字符\来让它失去意义
例:至少两个o以上的字符串时:
grep -n ‘ooo*’ regular_express.txt
例:查找g….g:
grepp -n ‘g.g’ regular_express.txt
例:找出【任意数字】的行列
grep -n ‘[0-9][0-9]‘ regular_express.txt
例:找到两个o的字符串
grep -n ‘o{2}‘ regular_express.txt
例:找出g后面接2~5个o
grep -n ‘go{2,5}g’ regular_express.txt
例:找出g后面接2个以上o
grep -n ‘go{2,}g’ regular_express.txt
- du -s /home:查看home目录下的大小,单位k
- du -sh /home:单位M
- dmesg 列出核心信息
‘^’符号
- 在【】内代表‘反向选择’
- 在【】之外则代表定位在行首的意义
总结
| 字符 | 意义与范例 |
|---|---|
| ^word | 待搜寻的字符串在行首 |
| word$ | 待搜寻的字符串在行尾 |
| . | 代表【一定有一个任意字符】的字符 |
| \ | 跳脱字符,将特殊字符的特殊意义去掉 |
* |重复0个到无穷多个的前一个字符
[list] |列出想要搜寻的字符,[]当中代表一个搜寻字符
[n1-n2] |列出想要搜寻的字符范围
[^list] |列出不要的字符串或范围
{n,m} |连续n到m个的【前一个字符】
例:以 ls -l配合grep找出/etc/底下文件类型为链接文件属性的文件名
ls -l /etc | grep '^l'
特别声明
正规表示法的特殊字符与一般在指令列输入指令的通配符并不相同
sed工具
用途
sed [-nefr] [动作]
动作说明:[n1[,n2]]function
function:a(新增);c(取代);d(删除);i(插入);p(打印);s(取代)
- 如果增加两行,需要在每一行之间添加反斜杠\
- 整行取代,例:nl 文件名 | sed ‘2,5c No2-5number’
- 列出第11~20行
- head -n 20 文件名| tail -n 10
- nl 文件名 | sed -n ‘11,20p’
- 参数n代表安静模式,如果不使用安静模式,那么输出的结果将会重复显示
- sed如果后面要接超过两个以上的动作时,每个动作前加
- 才可以。
部分数据的搜索并取代的功能
sed ‘s/要被取代的字符串/新的字符串/g’
示例1如下图所示:

直接修改档案,例(在文件最后一行加入‘#This is a test’):
sed -i '$a #This is a test' 文件名
$代表的是最后一行,a的动作是新增
什么情况下会使用sed直接修改档案内容的这个功能
比如在一个档案包含100万行,而需要在100行添加某些文字,那么vim不是很好的选择,这是可以使用sed的修改/取代的功能
延伸型的正规表示法
egrep -v '^$|^#' regular_express.txt ==== grep -v '^$' regular_express.txt | grep -v '^#'
RE字符 | 意义与范例
+ |重复一个或一个以上的前一个RE字符,例:egrep -n ‘go+d’ 文件名
? |零个或一个的前一个RE字符,例:egrep -n ‘go?d’ 文件名
| |用或(or)的方式找出数个字符串,例:egrep -n ‘gd|good’ 文件名
() |找出【群组】字符串,例:egrep -n ‘g(la|oo)d’ 文件名
()+ |多个重复群组的判别
文件格式化与相关处理
printf格式化打印
printf ‘打印格式’ 实际内容
awk好用的数据处理工具
awk运作模式
awk ‘条件类型1{动作1} 条件类型2{动作2}…’ filename
例(取出账号与登入者的IP,且账号与IP之间以【tab】隔开):
last -n 5 |awk ‘{print $1 “\t” $3}’
其中$1~$5 代表第一栏至第五栏,而$0代表所有列的资料
- awk是以行为一次处理的单位,以字段为最小的处理单位
- awk如果想知道数据有几行或者几栏,需要awk的内建变量帮忙
| 变量名称 | 代表意义 |
|---|---|
| NF | 每一行($0)拥有的字段总数 |
| NR | 目前awk所处理的是【第几行】数据 |
| FS | 目前的分割字符,默认是空格键 |
备注 awk后续所有动作是以单引号‘’括住的,单引号中如果需要用引号,则必须使用双引号来定义。
实例如下图所示

例(以passwd文件为基础,查阅第三栏小于10以下的数据,并且仅列出账号与第三栏)
cat /etc/passwd | awk ‘{FS=”:”} $3 < 10 {print $1 “\t” $3}’
备注 当读入第一行时,变数$1,$2…默认还是以空格键为分割,即使定义了FS=“:”,但却仅能在第二行后才生效
解决办法:预先设定awk的变量,使用BEGIN关键词
awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}'
几点重要说明
- awk指令间隔:当需要多个指令辅助时,可利用‘;’间隔,或者直接用Enter按键来隔开每个指令
- 逻辑运算中,如果是等于,一定要使用两个等号‘==’
- 格式化输出时,在printf的格式设定中,务必加上\n,才能进行分行
- 在awk中,变量可以直接使用,不需要加上$符号。
- awk动作内{}也是支持if条件的。
档案比对工具
使用场景
通常是同一个软件包的不同版本之间,比较配置文件与原始档的差异;
通常是用在ASCII纯文本档的比对上
diff
语法:diff [-bBi] fromfile tofile
比对两个档案之间的差异,以行为单位来比对,通常用在同一档案的新旧版本差异上。
还可以比对整个目录下的差异,比对不同目录下的相同文件名的内容。
cmp
用途没有diff广泛
主要利用“字节”单位去比对语法:cmp [-s] file1 file2
参数-s:将所有的不同点的字节处都列出来,因为cmp预设仅会输出第一个发现的不同点
patch
用来升级,将旧的档案升级成为新的档案
操作方法如下:
- 制作补丁档案:diff -Naur passwd.old passwd.new > passwd.patch
- 更新旧档案,使其变成和新档案一样的内容:patch -pN < patch_file;N为0代表当前目录下
- 如果更新错误,还可以还原成旧档案:patch -R -pN < patch_file
pr档案打印准备
使用pr可以设定时间、页码、标题等等属性。
9 学习 Shell Scripts
9.1 什么是Shell Script
定义
shell 是一个文字接口底下与系统沟通的一个工具接口
shell script是利用shell功能缩写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,搭配正规表示法、管线命令与数据流重导向等功能,以达到我们想要的处理目的。
无需编译即可执行,且拥有不错的debug工具。
学习shell scripts的理由:
- 自动化管理的重要依据
- 追踪与管理系统的重要工作
- 简单入侵检测功能
- 连续指令单一化
- 简易的数据处理
- 简易的数据处理
- 跨平台支持与学习历程较短
shell script处理数据速度慢的原因
用的是外部的指令与bash shell的一些默认工具,常去呼叫外部的函式库,在处理大量数据运算上,不够好。
shell script撰写需要注意的事项
1. 指令的执行从上而下,从左到右分析与执行;
2. 指令、选项与参数间的多个空白都会被忽略掉;
3. 空白行也将被忽略掉,并且tab同样视为空格键;
4. 如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令;
5. 如果一行内容太多,则可使用\Enter来延伸至下一行;
6. #可作为批注
执行档案的几个方法
1.直接指令下达(需具备可读与可执行的权限(rx)):
- 绝对路径:例如 使用/home/dmtsai/shell.sh
- 相对路径:使用./shell.sh来执行
- 变量【PATH】功能:将shell.sh放在PATH指定目录内,例如:~/bin/
2. 以bash程序来执行:透过【bash shell.sh】或[sh shell.sh]来执行
3. 还可以利用sh的参数,如-n及-x来检查与追踪shell.sh的语法是否正确
程序大致内容
1. 第一行#!/bin/bash表明这个script使用的shell名称
2. 程序内容的说明:
- 除第一行之外,其他的#都是批注,描述整个程序的基本功能
- 说明该script一般包含以下内容:
- 内容与功能
- 版本信息
- 作者与联络方式
- 建档日期
- 历史记录
3. 主要环境变量的宣告:PATH与LANG最重要,方便直接下达外部指令,不必写绝对路径
4. 主要程序部分
5. 执行结果告知:使用exit指令
备注使用撰写script的工具最好使用vim而不是vi,因为vim有额外的语法检验机制,能够在第一阶段撰写时就发现语法方面的问题