首先打开终端,可用 Ctrl+Alt+T 快捷键打开.
下面是一些常用的简单命令:
日期
date //显示当前时间
cal //显示日历(一般是一整个月)
磁盘
df //查看磁盘剩余空间
free //显示空闲内存数量
结束终端
exit
幕后控制台
幕后控制台是和终端仿真器环境相同,不过外表不太美观,在不打开终端的情况下,也可以调用幕后
控制台.幕后控制台一共有6个,可以分别用下列命令打开:
Ctrl+Alt+F1
Ctrl+Alt+F2
Ctrl+Alt+F3
Ctrl+Alt+F4
Ctrl+Alt+F5
Ctrl+Alt+F6
主要命令:
pwd //打印输出当前工作目录
cd //更改目录
ls //列出目录里所包含的内容
下面对这些命令详细介绍:
pwd 和 ls 命令比较直观,只需要注意 ls 命令后面可以跟有一些参数,用以控制输出的格式和内容,具体如下表
ls -options //统一格式
ls -a //输出所有文件,包括隐藏文件
ls -d //目录本身的信息
ls -F //在每个名字后加上指示符,用以区分目录和文件,若是目录,则加‘/’
ls -h //以长格式列出时,以人们可读格式输出,例如文件大小不能以字节数显示
ls -l //以长格式显示结果
ls -r //以相反的顺序来显示结果,不加 -r 选项,默认按照字母升序排列
ls -S //输出结果以文件大小来排序
ls -t //按照修改时间排序
相比之下,cd 命令后跟两种路径表示法:
绝对路径
绝对路径开始于根目录,以 ‘/’ 开头表示,例如:
cd /usr/bin //进入主目录下的 usr 目录中的 bin 目录
上面的是绝对路径表示法,下面介绍相对路径表示法:
相对路径
相对路径主要注意两个,父目录和子目录
cd .. //进入到当前目录的上一级目录,即父目录中去
cd ./dir //进入到当前目录的子目录 dir
cd dir //进入到当前目录的子目录 dir
小提示:如果觉得每次输入长长的文件名和目录名很麻烦,你要记住Linux对你很贴心,所以提供了自动补全功能,输入开头几个字母,按下Tab键,即可自动补全文件名,但是要注意,Tab键只能补全唯一的名字,如果有多个文件名与开头几个字母匹配,则无法自动补全.
其它常用的 cd 命令:
cd //切换到主目录下,即用户家目录
cd - //切换到上一个工作目录
cd ~user_name //切换到用户名为 user_name 的家目录下
file //确定文件类型
less //浏览文件内容
file filename 会显示出文件内容的简单描述。如下
less 命令用以浏览文本文件内容,用法如下:
less filename
less /etc/filename
less 程序在浏览时常用到的命令如下:
PageUp or b //向上翻一页
PageDown or space //向下翻一页
Up Arrow //向上一行
Down Arrow //向下一行
G //移动到最后一行
1G or g //移动到开头一行
/characters //向前查找制定字符串
n //向前查找下一个出现的字符串,与 /characters 命令配合使用
q //推出 less 阅览界面,回到终端
主要命令:
cp //复制文件和目录
mv //移动or重命名文件和目录
mkdir //创建目录
rm //删除文件和目录
ln //创建硬链接和符号链接
首先介绍通配符,相当于对文件(夹)名的模糊匹配.
通配符 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不属于字符集中的字符
[[:class:]] 匹配任意一个属于制定字符类中的字符
常用字符类 意义
[:alnum:] 匹配任意一个字母或者数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper:] 匹配任意一个大写字母
匹配模式 匹配对象
* 所有文件
g* 文件名以 “g” 开头的文件
b*.txt 以“b”开头,中间有另个或者任意多个字符,并且以“.txt”结尾的文件
Data??? 以"Data"开头,其后紧跟3个字符的文件
[abc]* 文件名以"a","b",或"c"开头的文件
BACKUP.[0-9] 以"BACKUP"开头,并且紧跟一个数字的文件
[[:upper:]]* 以大写字母开头的文件
[![:digit:]] 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以"1","2",或"3"结尾的文件
------------------------------------------------------------------------------*
mkdir directory
需要注意,可以同时创建多个目录:
mkdir dir1 dir2 dir3
将item1复制到item2中去
cp item1 item2
也可以将多个目录或文件复制到同一个目录下:
cp item... directory
cp命令后面也常跟一些附加选项,用以控制命令的效果. 下面列出一些常见选项:
选项 意义
-a 复制文件和目录,以及它们的属性,包括权限信息
-i 重写已存在文件前,提示用户确认. 若不指定,默认重写
-r 递归复制目录以及目录中的内容,如果要复制的时目录,则需要此选项
-u 复制时仅复制目标目录中不存在的文件,或者更新已经存在的文件
-v 显示详实的命令操作信息
mv的用法跟cp基本相同,但是mv操作之后,原来目录下的文件不再存在.
mv item1 item2
表示把文件或者目录"item1"移动或者重命名未"item2",此时item1则被删除,只剩下item2.
如要移动或者重命名多个条目,则可用如下命令:
mv item... directory
mv 与 cp 一样,也可以附加一些选项,常见选项如下:
选项 意义
-i 重写已有文件之前,提示用户确认信息
-u 只更新目标文件或文件夹中没有的内容
-v 显示详实操作信息
rm item
同上面操作命令一样,rm 命令也有基本相同的选项:
选项 意义
-i 删除文件前,提示用户确认信息
-r 递归删除文件,删除目录时必须指定此选项
-f 忽视不存在的文件,不显示提示信息
-v 显示详实操作信息
例子 意义
rm file1 默默删除文件
rm -i file1 删除文件之前提示用户确认信息
rm -r file1 dir1 删除文件file1和目录dir1 以及dir1中的内容.
rm -rf file1 dir1 同上,如果file1或者dir1不存在,rm仍会执行
温馨提示:用rm命令时,尤其注意通配符的使用,有可能会删除掉大量我们不想删除的文件
ln命令既可以创建硬链接也可以创建符号链接,用法如下:
ln item link //创建硬链接
ln -s item link //创建符号链接
注意
硬链接无法关联其所在文件系统之外的文件,不与链接在同一分区,无法关联
硬链接无法关联一个目录
符号链接
相当于一个快捷方式
ls -s fun fun-sym //fun-sym 链接到 fun
ls -s ../fun dir1/fun-sym //dir1文件夹下的一个fun-sym链接到上一级目录中的fun文件
ls -s ../fun dir2/fun-sym
创建符号链接,既可以使用绝对路径,也可以使用相对路径。另外,符号链接也可以关联目录。
当对链接进行操作时,我们实际上时对链接所指向的对象进行操作。但rm命令除外
rm fun-sym
rm fun-hard
都是删除链接本身,而不会删除链接指向的对象
当我们删除链接指向的对象后,与对象相关联的链接随之损坏
常用命令以及意义如下:
命令 意义
type 说明一个命令的属性
which 显示会执行那个可执行程序
man 显示命令手册
apropos 显示一系列合适的命令
info 显示命令info
whatis 显示一个命令的简介描述
alias 创建命令别名
type command
例如输入一些命令名测试如下:
type type
type ls
which ls
注意,此命令只对可执行程序有效,不包括内部命令和命令别名
例如 cd 命令,是一个shell内部命令,用 which 命令查找时得不到正确的回应
要查看一个命令的属性,可以用上面的 type 命令,如果是内部命令,会提示
built-in
用法如下:
help command
许多可执行程序也支持 --help 选项,用以显示命令的用法说明:
mkdir --help
用法:
man command
此命令在 less 阅读程序中显示命令的参考手册,分为及部分,各部分对应如下:
章节 内容
1 用户命令名
2 程序接口的内核系统调用
3 C库函数程序接口
4 特殊文件,比如设备节点和驱动程序
5 文件格式
6 游戏娱乐,如屏幕保护程序
7 其它方面
8 系统管理命令
可以用man命令制定显示章节内容,例如
man 5 passwd
apropos search_term
用以搜寻含有search_term的参考文档
man命令加上 “-k” 选项,也能完成此项工作
如果你觉得linux常用的命令行太长或者太难记,则可以用别名来替代,这样每次只需要输入别名
即可启动命令. 别名定义方法:
alias newName='command1; command2; command3'
注意 “newName” 和 “=” 之间是没有空格存在的.
下次我们想运行 command1,comman2,command3 时,即可直接输入 newName
若要删除别名,则只需输入如下命令:
unalias newName
需要注意的是,直接在命令行中定义的别名只是暂时的,如果关闭了终端,再次打开终端时,
别名就消失了,如要长期保持别名存在,需要在系统文件中定义.
I/O 重定向简单来说就是将改变输入/输出的方向,例如从标准输出变为输出到指定文件等.
常见命令如下:
命令 意义
cat 连接文件
sort 排序文本行
unique 省略重复行
grep 打印匹配行
wc 打印文件中的换行符,字和字节个数
head 输出文件第一部分
tail 输出文件中最后一部分
Unix哲学中,最核心的一点就是一切皆是文件,标准输入/输出、标准错误都是文件.
通常情况下标准输出和标准错误都连接到屏幕,标准输入连接到键盘.
I/O 重定向可以将程序的运行结果信息保存到文件中,便于后续查看.
重定向标准输出
重定向标准输出到一个文件,可以使用 “>” 重定向符, 后跟文件名.
例如:
ls -l /usr/bin > ls-output.txt
将目录 /usr/bin 的列表信息输出到文件 ls-output.txt 中去.
但是要注意, 上面的重定向符只是重定向标准输出,而对标准错误则不起作用.
例如我们让 ls 后跟一个不存在的目录,让其输出错误信息:
ls -l /bin/usr > ls-output.txt
但是我们会在屏幕上看到一条提示目录不存在的错误信息, 细想一下,我们已经将输出重定向到
文件 ls-output.txt 中了,但错误信息还是输出到了屏幕上,而且当你打开文件 ls-output.txt
时,你会发现文件是空的. 这是因为标准错误和标准输出不同,ls 指令将错误信息输送到标准错误
而非标准输出,但是我们仅仅重定向了标准输出,而没有重定向标准错误,因此错误信息输出到屏幕
另外需要注意,重定向操作会重写文件, 原来文件中的内容会被抹去,相当于删除了原来的文件
如果想把重定向的输出结果追加到文件后面,可以使用 “>>” 顶相符,如下:
ls -l /usr/bin >> ls-output.txt
如果文件 ls-output.txt 不存在,则会创建此文件.
重定向标准错误
shell 中,没有专门的重定向标准错误操作符,可以用文件描述符来定义.
标准输入、标准输出、标准错误的文件描述符分别是 0, 1, 2, 重定向标准错误可以如下:
ls -l /bin/usr 2> ls-error.txt
文件描述符 “2” ,后面紧跟重定向标准输出,组合成重定向标准错误到文件 ls-error.txt 中.
重定向标准输出和标准错误到同一文件
有两种方法:
利用 2>&1 操作符
ls -l /bin/usr > ls-output.txt 2>&1
需要十分注意重定向的顺序,标准错误的重定向必须只能出现在标准输出重定向之后
如果上面的命令改为:
ls -l /bin/usr 2>&1 ls-output.txt
则标准错误定向到屏幕而不是文件中
利用 &> 操作符
ls -l /bin/usr &> ls-output.txt
错误信息丢弃不输出:
2>/dev/null
cat [files]
cat 后面跟文件时,会把多个文件拼合起来,就像它们是一个文件中的内容一样.
cat test_split/* > test
单独的 cat 命令会等待标准输入
cat
如果我们输入“I love Linux”,然后输入 Ctrl+d ,则此文本行重复出现. 下面命令行:
cat > test.txt
此命令会等待从标准输入读取数据,直到遇见 Ctrl+d ,然后将文本存入到 test.txt 中去.
重定向标准输入
cat < test.txt
“<” 操作符是重定向输入操作符,将标准输入源从键盘改到文件 test.txt.
一i个命令的标准输出可以作为另一个命令的标准输入
command1 | command2
例如: less 命令接受标准输入,可将 ls 输出结果作为less的标准输入:
ls -l /usr/bin | less
多个命令放在一起组成管线的命令序列成为过滤器
ls /bin /usr/bin | sort | less
ls 命令的对于每一个目录的输出都是由有序列表组成,各自针对一个目录,经过sort之后,
该表输出数据产生一个有序列表.
ls /bin /usr/bin | sort | uniq | less
输出的结果不含有重复行. 但是如果我们向看到重复的列表可在 uniq 之后加上选项 -d
ls /bin /usr/bin | sort | uniq -d | less
wc ls-output.txt #打印行数,字数,字节数
wc -l ls-output.txt #只打印行数
比如要找到文件名中包含单词“zip”的所有文件,可以用如下命令
grep zip
grep -i #忽略大小写搜索
grep -v #只打印不匹配的行
head 默认打印文件前十行,tail 默认打印文件后十行,也可添加 -n 选项来调整打印行数
head -n 5 ls-output.txt
tail -n 5 ls-output.txt
ls /usr/bin | tee ls.txt | grep zip
上述命令均可应用在管道线中.
clear #清屏
history #显示历史列表
按键 效果
Ctrl+a 移动光标到行首
Ctrl+e 移动光标到行尾
Ctrl+f 光标向右一个字符,相当于右箭头
Ctrl+b 光标向左一个字符,相当于左箭头
Alt+f 光标前移一个字
Alt+b 光标后移一个字
Ctrl+l 清空屏幕,相当于clear
按键 效果
Ctrl+d 删除光标所在位置的字符
Ctrl+t 光标位置字符和
Alt+t 光标位置字和前面的字互换位置
Alt+l 光标位置到字尾的字符转成成小写字母
Alt+u 光标位置到字尾的字符转换成大写字母
按键 效果
Ctrl+k 剪切从光标位置到行尾的文本
Ctrl+u 剪切从光标位置到行首的文本
Alt+d 剪切从光标位置到词尾的文本
Alt+Backspace 剪切从光标位置到词头的文本,若在一个单词词头,剪切前一个单词
Ctrl+y 粘贴文本到光标位置
需要注意的是,一些电脑上的一些Alt组合键可能不能出现上述控制效果
按键 效果
Tab 自动补全
Alt+? 显示可能的自动补全列表,也可以按两次Tab键来实现
Alt+* 插入所有可能的自动补全
history
默认显示最近500条历史命令.
常用的命令及意义如下:
命令 意义
history | less 显示最近500条命令,输出到 less 程序
!88 显示历史列表第88行内容
Ctrl+r 递增搜索
Ctrl+j 复制命令
Ctrl+p 移动到上一历史命令,等同于上箭头
Ctrl+n 移动到下一历史命令,等同于下箭头
Alt+< 移动到历史列表开头
Alt+> 移动到历史列表结尾,即当前命令行
Ctrl+r 反向递增搜索,从当前命令行开始,向上递增搜索
Alt+p 反向搜索,非递增顺序,输入要查找的字符串,Enter
Alt+n 向前搜索,非递增顺序
Ctrl+o 执行历史列表当前项,并移动到下一个
命令 意义
!! 重复最后一次执行的命令,等同于上箭头
!n 重复历史列表中第 n 行的命令
!string 重复最近历史列表中,以这个字符串开头
!?string 重复最近历史列表中,包含这个字符串的命令
命令 意义
id 显示用户身份号
chmod 更改文件模式
umask 设置默认的文件权限
su 以另一个用户身份来运行shell(提高权限)
sudo 以另一个用户的身份来执行命令(提高权限)
chown 更改文件所有者
chgrp 更改文件所有权
文件的权限包括 可读(r)、可写(w)、可执行(x).
chmod命令使用符号表示法来完成命令:
影响对象+执行操作+权限类别
影响对象包括以下几种:
u user,文件或者目录所有者
g 用户组
o others,其他所有的人
a all,u,g,o三者的联合
如果没有制定字符,则默认使用 a 选项.
执行操作有三种,添加(+),删除(-),指定(=,其它权限被删除)
权限类别有上面所说的 r,w,x 三种.
下面是一些组合例子
命令 意义
u+x 为文件所有者添加可执行权限
u-x 删除文件所有者的可执行权限
+x 为所有人添加可执行权限
o-rw 除了文件所有者和用户组,删除其他所有人的读权限和写权限
go-rw 给群组的主任和任意文件拥有者的人读写权限,并且删除执行权限
u+x,go=rw 给文件所有者可执行权限,并且给组合其他人读写权限
umask 后加掩码值,可以设置用户对文件的访问权限。
掩码值是4位八进制数表示的,每一位都代表了一类使用者
掩码 二进制数 权限
0000 000 000 000 000 -rw-rw-rw-
0002 000 000 000 010 -rw-rw-r--
即:二进制中数字1出现的位置,相应的属性被删除.
命令 作用
su [-[1]] [user] 切换到另一个 user 用户
su - 切换到超级用户,切换之后,会提示输入密码并出现#提示符
exit 退出超级用户登陆
su - 'command' 只对本条命令以超级用户执行
除了用 su 命令,用户还可以用 sudo 命令来允许一个普通用户以不同的身份来执行命令.
sudo 不要求使用超级用户密码, 用户可用自己的登录密码进行认证, sudo 所跟的命令不需要用‘’
包含起来,因为sudo命令不会启动一个shell.
chown [owner] [:[group]] file...
例如:
参数 结果
bob 把文件所有者从当前属主改为用户bob
bob:users 把文件所有者噶为用户bob,文件用户组改为users
:admins 把文件用户组改为admins,文件所有者不变
bob: 文件所有者改为用户bob,文件用户组改为bob登陆时所属的用户组
更改用户 user 的密码
passwd [user]
若要更改当前用户的密码,可直接输入 passwd,shell会提示输入旧密码和新密码
ps 报告当前进程快照
top 显示任务
jobs 列出活跃的任务
bg 把一个任务放到后台
fg 把一个任务放到前台
kill 给一个进程发送信号
killall 杀死指定名字的进程
shutdown 关机或者重启系统
ps 可单独使用,也可后跟选项来构成特殊的进程查看指令
默认情况下,ps命令只列出与当前终端会话相关的进程,加上x选项,是告诉ps命令,展示所有进程
ps aux
显示每个用户的进程详细信息
top
显示进程动态信息,默认情况下,每三分钟更新一次,top显示结果由系统概要和进程列表两大部分
组成,以CPU使用率排序,top程序可以接受一系列从键盘输入的命令,两个最常用的命令是h和q,
h显示程序的帮助屏幕, q为退出top程序
Ctrl+c
Ctrl+c 中断一个程序,注意,后台程序是不能采用此方法中断的.
在输入命令启动程序时,可以在程序名称后面加上&符号,使得程序在后台执行,终端会返回提示
符,此时可用ps命令或者jobs命令查看进程信息
fg %n
其中 %n 表示工作序号为 n 的进程,如果只有一个后台进程,则 %n 可省略.
将进程返回到前台之后,即可通过Ctrl+c来终止进程.
停止进程不同于终止进程,停止进程只是将进程暂停,移动到后台进行等待.
Ctrl+z
进程暂停之后,可以用 fg 将进程移动到前台执行,也可以用 bg 将进程移动到后台执行
bg %n
同样,如果只有一个进程,%n 可以省略
信号编号 信号名 含义
1 HUP 挂起
2 INT 中断
9 KILL 杀死(强制)
15 TERM 终止
18 CONT 继续
19 STOP 停止(暂停)
其它一些系统信号:
信号编号 信号名 含义
3 QUIT 退出
11 SEGV 段错误
20 TSTP 终端停止
28 WINCH 改变窗口大小
可以用 kill -l 来得到完整的信号列表.
killall [-u user] [-signal] processName...
命令 意义
pstree 输出树形进程列表
vmstat 输出系统资源使用快照,可加延时秒数(vmstat 5),Ctrl+c终止
xload 图形界面程序,画出系统负载图形
tload 在终端画出系统负载图形,使用Ctrl+c终止输出
printenv 打印部分或者所有的环境变量
set 设置 shell 选项
export 导出环境变量
alias 设置命令别名
printenv | less 将环境变量输出到 less 程序中查看
printenv USER 打印变量名为 USER 的值
set | less 输出变量到 less 程序中,且变量按字母顺序排列
echo $HOME 查看 HOME 变量内容
如果一个变量既不能用set命令来显示,也不能用printenv来显示,那么这个变量是别名, 可用
不加参数的alias命令来查看
alias
变量 内容
DISPLAY 显示器的名字,通常是“:0”,表示登陆的第一个显示器
EDITOR 文本编辑器的名字
SHELL shell程序名字
HOME 用户家目录
LANG 定义了字符集和语言编码方式
OLD_PWD 先前的工作目录
PAGER 页输出程序的名字,一般为less程序
PATH 目录列表,由冒号分开,用以命令搜索
PS1 定义shell提示符内容
PWD 当前工作目录
TERM 终端类型名
TZ 指定所在时区
USER 用户名
文件 内容
/etc/profile 应用于所有用户的全局配置脚本
~/.bash_profile 用户私人的启动文件
~/.bash_login 如果文件~/.bash_profile没有找到,则尝试读取此文件
~/.profile 如果~/.bash_profile和~/.bash_login都没找到,尝试读取此文件
/etc/bash.bashrc 应用于所有用户的全局配置文件
~/.bashrc 非登陆shell会话用户的私有启动文件
例如,打开.bashrc文件,为保险起见,可创建.bashrc的文件副本.bashrc.bak.
用自己喜欢的编辑器打开并添加以下内容:
#change umask to make directory sharing easier
umask 0002
#ignore duplicates in command history and increases
#history size to 1000 lines
export HISTCONTROL=ignoredups
export HISTCONTROL=1000
#add some helpful aliases
alias ll='ls -l --color=auto'
shell环境修改之后,不会立即生效,还需关闭终端再打开,因为.bashrc文件只会在终端启动
时被读取. 如果想要强制bash重新读取修改,可使用如下命令:
source .bashrc
这样我们所做的修改就会体现在新的shell会话里,例如我们可以输入命令别名ll
ll
同许多程序一样,可直接从终端输入vi(或vim)启动vi(vim)
vi
vi有三种模式,命令模式,插入模式,观察者模式,下面是一些常见的命令及其含义
按键 含义
vi 启动vi编辑器
vi filename 打开文件,如果文件不存在,则创建文件
Esc 退出命令模式
i 切换到插入模式(进入vi界面时默认为命令模式)
:w 将文本保存到文件
:q 退出vi编辑器
:q! 强制退出vi编辑器(放弃修改)
:wq 将文本保存到文件并退出vi
按键 移动光标
l or 右箭头 向右移动一个字符
h or 左箭头 向左移动一个字符
j or 下箭头 向下移动一行
k or 上箭头 向上移动一行
0 移动到当前行首
^ 移动到当前行的第一个非空字符
$ 移动到当前行尾
w 移动到下一个单词或标点符号的开头
W 移动到下一个单词的开头,忽略标点
b 移动到上一个单词或者标点符号的开头
B 移动到上一次单词的开头,忽略标点
Ctrl+f or PageDown 向下翻页
Ctrl+b or PageUp 向上翻页
numberG 移动到第number行
G 移动到文件末尾
除了G之外,其他有些命令也能在前面加上数字,表示希望重复此命令的次数,例如5j,表示希望
光标向下移动5行.
o 在当前行下方打开一行
O 在当前行上方打开一行
命令 删除的文本
x 当前字符
3x 当前算起向后3个字符
dd 当前行
5dd 当前行及随后4行文本
dW 从光标位置开始到下一个单词的开头
d$ 从光标位置开始到当前行的行尾
d0 从光标位置开始到当前行的行首
d^ 从光标位置开始到文本行的第一个非空字符
dG 从当前行到文件末尾
d20G 从当前行到第20行
u 撤销上一步更改
上面d命令不仅删除文本,还能剪切文本,删除的内容暂存到剪切板,然后可以用p或P粘贴到光标前
或光标后. 复制命令用y,和d相似,下面是一些常见的组合用法:
命令 复制内容
yy 当前行
5yy 当前行以及随后的4行
yW 从当前光标位置到下一个单词的开头
y$ 从当前光标位置到当前行尾
y0 从当前光标位置到行首
y^ 从当前光标位置到文本行的第一个分空字符
yG 从当前光标位置到文件末尾
y20G 从当前行到文件的第20行
复制命令:
p 粘贴到当前行的下面
P 粘贴到当前行的前面
J 将后面一行和当前行连接起来
f 查找一行,移动光标到下一个所指定的字符上
fa 把光标定位到同一行中下一个出现的a字符上
/string 查找string字符串
n 查找下一个匹配的项
要执行替换操作,可以用如下格式的命令:
:%s/Line/line/g
上面命令的含义是:
命令 含义
% 指定要操作的行数范围,%指全文,可用1,5替代,指第1行到第5行
s 指定操作,s指替换(查找与替代)
/Line/line 查找类型与替代文本
g 全局,指对所有的匹配项都进行替换,若省略,则只替换第一个匹配项
可以用vi同时打开多个文件,命令形式如下:
vi file1 file2 file3...
编辑多个文件,涉及到各个文件之间的切换问题,vi可以使用命令来满足这一需求
:n 从这个文件转到下一个文件
:N 回到上一个文件
另外,为了使多个文件更容易管理,vi提供了:buffers命令来查看正在编辑的文件列表. 这时候
就可以使用:buffer命令加上缓冲区号码来切换文件
将一个文件插入到当前文件
过程:首先打开一个文件,移动光标到我们想要插入的地方,然后切换到命令模式,输入如下命令
:r insertFileName
即可将insertFileName文件的内容插入到当前位置.
复制某文件部分内容到当前文件
首先打开一个文件,移动光标到我们想要插入的地方,然后切换到命令模式,输入如下命令
:sp copyFileName
选中内容,y复制,Ctrl+W切换回原文件,p粘贴.
:w
如果所编辑的文件是已经存在的,那我们在编辑完成之后输入 :w 命令,如果我们想将此文件
另存为不同名字的文件,那么我们可以输入命令 :w newName 即可,但是需要注意,在保存之后
我们编辑的文件仍然是原来的文件,而不是名为newName的文件;
如果所编辑的文件是不存在的,也就是文件还未被创建,那么在编辑完成之后输入 :w filename
命令,将当前文件保存为名为filename的文件.
sudo apt-get install name 从网上资源库安装名为name的软件
dpkg --install package_file 从软件包安装软件
sudo apt-get update;sudo apt-get upgrade 更新软件
sudo apt-get remove package_name 卸载软件
dpkg --install package_file 从软件包更新软件
dpkg --list 列出安装的所有软件包
dpkg --status package_name 查看是否安装了某个软件
apt-cache show package_name 显示所安装软件包的信息
dpkg --search file_name 查找安装了某个文件的软件包
命令名 作用
mount 挂载一个文件系统
umount 卸载一个文件系统
fsck 检查和修复一个文件系统
fdisk 分区表控制器
mkfs 创建文件系统
fdformat 格式化一张软盘
dd 把面向块的数据直接写入设备
genisoimage(mkisofs) 创建一个ISO9660的镜像文件
wodim(cdrecord) 把数据写入光存储媒介
md5sum 计算MD5检验码
执行不带参数的mount命令可查看当前挂载的文件系统
locate 通过名字查找文件
find 在目录层次结构中搜索文件
xargs 从标准输入生成执行命令行
touch 更改文件时间
stat 显示文件或者文件系统状态
locate bin/zip 输出包含 bin/zip 字符串的所有路径或者文件
locate zip | grep bin 将搜索到的包含zip字符串的路径管道到grep,匹配含有bin的选项
find ~ 输出家目录列表(~代表家目录,常用)
find ~ | wc -l 输出家目录列表,并管道进wc统计列表行数
find ~ -type d | wc -l 限制只搜索目录
find ~ -type f | wc -l 限制只搜索文件
文件类型 代表含义
b 块设备文件
c 字符设备文件
d 目录
f 普通文件
l 符号链接
同时,我们也可以根据其他一些条件来限制搜索范围,例如下面的例子:
find ~ -type f -name "\*.JPG" -size +1M | wc -l
即表示我们希望有文件名以.JPG结尾和文件大小大于1M的文件
常被用来指定的测量单位有以下几种:
符号 大小
b 512字节块
c 字节
w 两个字节的字
k 千字节(1024个字节单位)
M 兆字节(1048576个字节单位)
G 千兆字节(1073741824个字节单位)
find命令还有其他大量不同的测试条件,下面列出了一些常见的测试条件
测试条件 描述
-cmin n 匹配
-cnewer file 匹配文件和目录内容或属性最后修改时间早于file
-ctime n 匹配文件和目录最后修改时间在n小时之前
-empty 匹配空文件和目录
-group name 匹配的文件和目录属于一个组,组可用组名或组ID表示
-iname pattern 类似于-name,但不区分大小写
-inum n 匹配的文件的inode号是n
-mmin m 匹配的文件被修改于n分钟之前
-mtime n 匹配的文件或目录的内容被修改于n小时之前
-name pattern 用指定的通配符模式匹配的文件和目录
-newer file 匹配的文件和目录的内容早于制定的文件
-nouser 匹配的文件和目录不属于一个有效用户
-nogroup 匹配的文件和目录不属于一个有效组
-perm mode 匹配的文件和目录的全权限已经设置为指定的mode
-samefile name 类似于-inum测试条件
-size n 匹配大小为n的文件
-type c 匹配文件类型是c的文件
-user name 匹配的文件或目录属于某个用户
更详细的列表可参见find命令手册
操作符 描述
-and 两边同时满足
-or 只满足一个即可
-not 不满足此条件的选项
() 组合测试条件和操作符,控制逻辑优先级
观察如下命令:
find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)
意即我们想查找权限不是0600的文件和权限不是0700的目录.
带有操作符的find查找命令通用格式如下:
( expression 1 ) -operator ( expression 2 )
需要注意的是,圆括号需要用转义符进行转义. 另外,-and命令是find默认的操作符,
通常情况下可以省略.
操作 描述
-delete 删除当前匹配的文件
-ls 对匹配的文件执行等同的 ls-dils命令
-print 把匹配文件的全路径名输送到标准输出,为默认操作
-quit 一旦找到匹配,退出
例如,如果要删除符合一定条件的文件,扩展名为“.BAK”,可使用如下命令:
find ~ -type f -name '*.BAK' -delete
需要注意,在执行删除操作之前一定要了解自己所要删除的文件,尽量防止误删
可用 -print命令代替-delete命令先查看所要删除的文件
除了上述提到的预定义行为外,我们也可以在find后定制自己的命令,可通过
-exec command {} ;
的方式来对find搜索到的结果进行处理,例如可以使用rm命令来达到上述-delete
命令的效果:
find ~ -type f -name '*.BAK' -exec rm '{}' ';'
效果等同于上面的删除命令
gzip 压缩或者展开文件
bzip2 块排序文件压缩器
tar 磁带打包工具
zip 打包压缩文件
rsync 同步远端文件和目录
执行gzip压缩命令时,压缩文件会替代原来的文件,并以.gz作为文件后缀
gzip filename
可以在当前目录下得到filename.gz文件,而原来的文件则被替代.
再次运行gunzip命令可以得到原始文件,而压缩文件则被替代.
gunzip filename.gz
gzip命令有许多选项,常见选项如下:
选项 说明
-c 把输出写入到标准输出,保留原始文件
-d 解压缩,同gunzip
-f 强制压缩,即使已经存在了压缩文件
-h 显示用法信息,同--help
-l 列出每个被压缩文件的压缩数据
-r 递归压缩目录中的文件
-t 测试压缩文件的完整性
-v 显示压缩过程中的信息
-number 设置压缩指数,1(最快)到9(最慢)之间的整数
bzip程序用法与gzip基本相同,只是采用了不同的压缩算法,压缩后
的文件后缀不同,为.bz2
用法如下:
tar mode [options] pathname...
这里mode常见的有以下操作模式:
c 为文件或目录列表创建归档文件
x 抽取归档文件
r 追加具体的路径到归档文件末尾
t 列出归档文件的内容
例如:
首先创建一些文件夹和文件:
han@han:~$ mkdir -p playground/dir-{00{1..9},0{10..99},100}
han@han:~$ touch playground/dir-{00{1..9},0{10..99},100}/file-{A-Z}
如上即可创建dir-001到dir-100的整整100个文件夹,且每个文件夹内都有
26个文件.
tar cf playground.tar playground
此命令创建了名为playground.tar的tar包,其中包含整个playground
的目录层次结果,模式c和选项f,用来指定tar包的名字,注意,
必须首先指定模式,然后才能指定其它选项
如果要查看归档内容,可以用以下命令:
tar tf playground.tar
tar tvf playground.tar
后一条指令可以显示更加详细的列表信息
抽取tar包到新位置
tar xf path/playground.tar
抽取playground.tar中的文件到当前目录下
需要注意的一点tar指令默认使用相对目录,如果在生成tar包时
原文件使用了绝对路径,则生成的tar包内包含所有的文件路径
例如:
tar cf playground2.tar ~/playground
原文件使用了绝对路径,会展开成/home/han/playground,
此时如果抽取文件playground2.tar, 如下:
tar xf playground2.tar
ls
可发现ls输出的文件列表里多出了一个home文件夹,而并不是我们
所期望的playground
从归档文件中抽取内容时,可以制定抽取的内容,例如:
tar xf archive.tar pathname
tar xf playground2.tar --wildcards 'home/han/playground/dir-\*/file-A'
上述第二条指令表示从playground2.tar中抽取file-A文件
另外,tar命令经常与find命令同时使用,从而归档搜索到的文件
find playground -name 'file-A' -exec tar rf playground.tar '{}' '+'
唤醒带有追加模式的tar命令
find playground -name 'file-A' | tar cf - --files-from=- | gzip > playground
在上面这个例子里面,find产生匹配文件列表,管道进入tar命令,指定"-"为
标准输入或输出,–files-from选项使得tar命令从一个文件而不是命令行来
读取其路径名列表,这里指定了文件为"-",也就是从标准输入输出来读取,
最后,tar命令生成的tar包管道到gzip命令生成playground.tgz文件
rsync options source destination
source和destination为以下选项之一:
本地文件或目录
一个远端文件或目录,以[user@]host:path的形式存在
一个远端服务器,由rsync://[user@]host[port]/path指定
注意source和destination之一必须为本地文件,rsync不支持远端到远端的复制
例如,同步playground目录和它在foo目录中相对应的副本
rsync -av playground foo
-a选项是递归和保护文件属性,-v选项是冗余输出
注意,rsync命令只会更新foo中没有的项目,如果两者已经相同,则不会有
复制更新
正则表达式是一种符号表示法,用来识别文本模式,与shell
匹配文件和路径的通配符比较相似
grep命令前面已经学过,用于匹配特定字符串,用法如下:
grep string
ls /usr/bin | grep zip
表示列出位于目录/usr/bin中,文件名中包含zip的所有文件
grep的完整形式为
grep [options] regex [file...]
regex就是一个正则表达式,例如我们上面的zip,常见的option
选项如下:
选项 描述
-i 忽略大小写
-v 打印不匹配的项,即取反
-c 打印匹配数量,而不是文本行本身
-l 打印包含匹配项的文本名
-L 打印不包含匹配项的文本名
-n 在每个匹配行之前打印出其位于文件中的相应行号
-h 应用于多文件搜索,不输出文件名
正则表达式中的字符分为原义字符和元字符:
^ $ . [ ] { } - ? * + ( ) / \
其它字符被认为是原义字符
圆点元字符可以用来匹配任意字符,但是要注意,在此位置一定要有一个字符
例如下面表达式:
grep -h '.zip' file
表示在file文件中寻找包含正则表达式".zip"的文本行,需要注意的是,在
圆点所在的位置必须有字符存在,字符是任意的;因此,此正则表达式是不能
匹配到zip文件的,zip之前必须有其它字符存在
正则表达式中有两个锚点,一个是插入符号^,另一个是$;插入符号表示
开头匹配,$符号表示末尾匹配
grep -h '^zip' filelist
grep -h 'zip$' filelist
分别表示匹配以zip开头和结尾的文本
因此,可以推知,正则表达式’^$'表示匹配空行
利用正则表达式可以完成很多复杂的匹配,例如,如果我们想匹配一个
五个字母的单词,第三个字母是j,最后一个字母是r,则可用如下的
正则表达式:
grep -i '^..j.r$' dictionary
表示在dictionary文件中搜寻满足条件的单词
[list]
中括号中的内容表示并列,表示一个集合,例如:
grep -h '[bg]zip' filelist
表示在filelist中匹配bzip或gzip的任意文件或目录
在中括号表达式中,元字符会失去特殊含义,会有两种情况出现:
"^"插入字符
插入字符放到中括号第一个位置,则插入字符变为否定字符
grep -h '[^bg]zip' filelist
表示在filelist中搜索不包含bzip和gzip的文件或者文件夹
“-” 连字符
连字符在中括号中表示范围,如下:
[a-z]
表示所有的小写字母
grep -h '^[A-Za-z0-9]' filelist
表示匹配任意以字母或者数字开头的文件或者文件夹
如果想要匹配连字符,只需将连字符放在表达式中的第一个
字符
grep -h '[-AZ]' filelist
表示匹配任意或以-开头,或以A开头,或以Z开头的文件名
字符集 说明
[:alnum:] 字母数字字符
[:word:] 与上面相同,增加了下划线字符
[:alpha:] 字母字符
[:blank:] 包含空格和tab字符
[:cntrl:] 控制码
[:digit:] 数字0-9
[:graph:] 可视字符
[:lower:] 小写字母
[:punct:] 标点符号字符
[:print:] 可打印字符
[:space:] 空白字符,包括换行和回车,tab键等等
[:upper:] 大写字母
[:xdigit:] 十六进制数字字符
注意到上述字符集合与shell展开通配符基本相同
注意?表示前面的一个字符可以匹配或者不匹配,例如下面的例子
'^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
表示可以匹配两种格式的数字:
(nnn) nnn-nnnn
nnn nnn-nnnn
当然,其实从正则表达式上来说,也可以匹配如下格式:
(nnn nnn-nnnn
nnn) nnn-nnnn
与?一样,*也用来表示一个可选字符,但是,*表示可以出现人一多次,而不是
仅仅一次. 例如下面匹配一句话,字符串开始于一个大写字母,然后包含任意多
个大写和小写的字母和空格,最后以句号结尾:
[[:upper:]][[:upper:][:lower:] ]*.
例如下面:
echo "This works." | grep -E '[[:upper:]][[:upper:][:lower:] ]*.'
??? 但是经过实验也发现只要保证右端中括号数量正确,左端半中括号是多少
都无所谓,例如下面的指令也能输出正确的结果:
echo "This Works." | grep -E '[[[[[[[:upper:]][[:upper:][:lower:] ]*.'
符号+与*非常相似,只是+要求前面至少出现一次匹配,它只匹配由一个或多个
字母字符组构成的文本行,字母或者字符之间由空格分开
echo "a b c" | grep -E '^([[:alpha:]]+ ?)+$'
这个{}元字符被用来指定匹配的次数,有一下四种方法进行指定
限定符 意思
n 匹配前面的元素,如果它确切出现了n次
n,m 匹配前面的元素,出现次数在n和m之间
n, 匹配前面的元素,如果出现次数不小于n
,m 匹配前面的元素,如果出现次数不大于m
例如前面电话号的例子,可以改写为:
'^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$ '
find . -regex '.*[^-\_./0-9a-zA-Z].*'
上面命令可以查找包含空格和其它潜在不规范字符的路径名
locate程序也支持正则表达式,基本的(–regexp)和扩展的(–regex)
通过将正则表达式与locate结合起来,我们可以快速执行许多操作:
locate --regex 'bin/(bz|gz|zip)'
表示搜索bin目录下的bz或gz或zip开头的目录
less和vim查找文本的方法相同,按下/键,然后输入正则表达式即可
另外,vim支持基本的正则表达式,元字符集合为 ^ $ . [ ] * 其它的字
符都被认为是文本字符,因此如果要使用扩展正则表达式的元字符,要
注意字符的转义,例如搜索号码的例子,{}属于扩展正则表达式中的元
字符,在vim中需要转义:
/([0-9\{3\}]) [0-9]\{3\}-[0-9]\{4\}
注意这里的()没有像之前一样用反斜线转义,因为对于vim来说,其本来
就是文本字符,无需转义就可匹配, 而对扩展正则表达式来说,()是元
字符,需要转义成文本字符才能进行匹配.
cat 连接文件并且打印到标准输出
sort 给文本排序
uniq 报告或者省略重复行
cut 从每行中删除文本区域
paste 合并文件文本行
join 基于某个共享字段来联合两个文件的文本行
comm 逐行比较两个有序的文件
diff 逐行比较文件
patch 给原始文件打补丁
tr 翻译或者删除字符
sed 用于删选和转换文本的流编辑器
aspell 交互式拼写检查器
直接用cat命令来创建简单的文件,以Ctrl+z来标志文件结尾
输入一句或者多句话,最后回车按下Ctrl+z结束,文件写入成功
保存成功之后可用cat命令查看foo.txt文件的内容,加上-A选项,
可查看所有字符,总体流程代码及输入输出如下:
han@han:~$ cat >foo.txt
You are just a single dog.
^Z
[2]+ Stopped cat > foo.txt
han@han:~$ cat -A foo.txt
^IYou are just a single dog.$
可以看到开头多了一个^I符号,即为开头的Tab键,结尾多了一个
$符号,即为文件结尾符
cat命令有两个经常用到的选项
-n 用来给文本行添加行号
-s 用来禁止输出多个空白行
示例如下:
han@han:~$ cat > foo.txt
a
c
^Z
[1]+ Stopped cat > foo.txt
han@han:~$ cat -ns foo.txt
1 a
2
3 c
可以看到,每行输出都有编号,且我们输入时多余的空白符在显示时被删除掉
sort命令可以对标准输入内容或者命令行中指定的一个或者多个文件进行
排序,然后把排序结果发送到标准输出,如下
han@han:~$ sort > foo.txt
c
b
a
han@han:~$ cat foo.txt
a
b
c
同时,sort,还可以接受多个文件作为参数,把多个文件合并成一个有序文件
sort file1.txt file2.txt > final_sorted_list.txt
sort程序也有一些选项,下面列出常见的几个:
选项 描述
-b 默认整行排序,忽略开头空格
-f 排序不区分大小写
-n 基于字符串长度或者数字值排序
-r 按相反顺序排序
-k 对从field1到fiel2之间的字符排序
-m 归并排序,把每个文件看成排好序的
-o 把排好序的输出结果发送到文件
-t 定义域分隔符,默认情况下为空格或制表符
下面给出几个示例进行讲解:
sort --key=1,1 --key=2n file
表示对于第一个字符(起点和终点都在第一个字段),按照字母排序,
对于第二个字段,按照数值排序; 下面再看一个例子:
sort -k 3.7nbr -k 3.1nbr -k 3.4nbr file
是指起始于第三个字段的第七个字符,到第三个字段的末尾结束;另外还
指定了第三个字段的第一个和第四个字符做反向数值排序
自定义分隔符
sort -t '/' -k 7 file
表示以斜线为分割符号,且按照第七个字段来排序
uniq经常和sort程序搭配使用,等于 sort -u,可以从排序结果中删除重复行
但是需要注意,uniq只会删除相邻的重复行!
同其他程序一样,uniq也有一些选项,常用的有:
选项 说明
-c 输出所有的重复行,每行开头显示重数
-d 只输出重复行,而不是特有的文本行
-f n 忽略每行开头的n个字段,字段由空格隔开
-i 比较文本行时忽略大小写
-s n 跳过每行开头的n个字符
-n 只输出独有的文本行
例如与sort配合使用时:
sort foo.txt | uniq -c
删除重复行并在每行开头显示重复次数
cut程序被用来从文本行中抽取文本,并把其输出到标准输出,可以接受
多个文件参数或者标准输入
一些常用的选项:
选项 说明
-c charlist 从文本行中抽取charlist定义的文本
-f fieldlist 从文本行中抽取由fieldlist定义的字段
-d delimchar 当指定-f选项后,可使用delimchar做分隔符
-complement 抽取整个文本行,除了由-c和/或-f指定的文本
paste功能与cut功能相对应,可以认为是cut的反过程
其输入为多个具有一个或多个共同列元素的文件,输出为合并
重复列的合并文件,例如:
han@han:~$ head foo.txt
aan root
cheng master
zheng junior
han@han:~$ head foo2.txt
aan 111
cheng 222
zheng 333
han@han:~$ join foo2.txt foo.txt | head
aan 111 root
cheng 222 master
zheng 333 junior
这里需要注意的是,在实践过程中发现,如果共享数据域不在同一位置(开头),
则无法使用join进行合并
使用方法如下:
han@han:~$ head alpha1.txt
a
b
c
d
han@han:~$ head alpha2.txt
b
c
d
e
han@han:~$ comm alpha1.txt alpha2.txt
a
b
c
d
e
上面输出结果中,第一列表示第一个文件独有的,第二列表示第二个文件独有的
第三列表示两者共同有的元素
需要注意的是,在实践过程中发现,只有当两个比较的内容都是单列时,comm才
能发挥作用,否则如下例子:
han@han:~$ head foo.txt
aan
cheng
zheng
han@han:~$ head foo2.txt
aan 111
cheng 222
zheng 333
han@han:~$ comm foo.txt foo2.txt
aan
aan 111
cheng
cheng 222
zheng
zheng 333
可以看出,第一个文件和第二个文件尽管有相同的内容,但是由于第二个文件
不是单列,comm认为其两列就是一列,因此文件一和文件二的内容完全不同
han@han:~$ diff alpha1.txt alpha2.txt
1d0
< a
4a4
> e
diff程序使用上下文搜索模式时(-c),可以看到如下输出:
han@han:~$ diff -c alpha1.txt alpha2.txt
*** alpha1.txt 2017-05-27 09:46:37.752125763 +0800
--- alpha2.txt 2017-05-27 09:47:22.813567092 +0800
***************
*** 1,4 ****
- a
b
c
d
--- 1,4 ----
b
c
d
+ e
可以看到上面结果中,多出来了很多信息,
***1,4**** 第一个文件1-4行
---1,4---- 第二个文件1-4行
此外还有其他的指示符 - + 等
diff输出常见的指示符如下:
blank 上下文显示行,不代表差异
- 删除行,只在第一个文件中
+ 添加行,只在第二个文件中
! 更改行,显示某个文本行的两个版本
同时,diff也有统一模式(-u),类似于上下文模式,但更简洁
han@han:~$ diff -u alpha1.txt alpha2.txt
--- alpha1.txt 2017-05-27 09:46:37.752125763 +0800
+++ alpha2.txt 2017-05-27 09:47:22.813567092 +0800
@@ -1,4 +1,4 @@
-a
b
c
d
+e
统一模式下的开头字符意义如下:
空格 两个文件都包含这一行,相同
- 在第一个文件中删除此行
+ 添加这一行到第一个文件中
patch程序常和diff配合使用,用来合并修改,例如:
han@han:~$ diff -Naur alpha1.txt alpha2.txt > diff_file
han@han:~$ cat diff_file
--- alpha1.txt 2017-05-27 09:46:37.752125763 +0800
+++ alpha2.txt 2017-05-27 09:47:22.813567092 +0800
@@ -1,4 +1,4 @@
-a
b
c
d
+e
han@han:~$ patch < diff_file
patching file alpha1.txt
han@han:~$ cat alpha1.txt
b
c
d
e
从输出结果可以看出,我们在文件alpha2.txt中所做的修改应用到了
alpha1.txt中,从而使得,alpha1.txt与新文件alpha2.txt相同
例如:
han@han:~$ echo "lowercase letters" | tr a-z A-Z
LOWERCASE LETTERS
当然,也有可能这样转换:
han@han:~$ echo "lowercase letters" | tr [:lower:] A
AAAAAAAAA AAAAAAA
tr命令可以跟选项-d表示删除特定字符进行转换,如下:
tr -d '\r' < old-file > new-file
表示将old-file中的换行符\r删掉,将转换的内容保存到新文件new-file
中去.
sed命令类似于查找替换,将输入文件中的字段替换为另一个字符段
han@han:~$ echo "front" | sed 's/front/back/'
back
可以看到sed将front替换成了back并输出
默认情况下,sed对文件中所有的文件行进行操作,我们也可以指定行号,对
其中一行进行操作:
han@han:~$ echo "front" | sed '1s/front/back/'
back
han@han:~$ echo "front" | sed '2s/front/back/'
front
在第一个命令中,我们在s前指定对第一行进行操作,实际上,我们的输入只有
一行,因此可以看到操作的结果,将front替换成back输出
在第二个命令中,我们制定操作第二行,然而我们的输入只有一行,故操作失败
输出的仍然是front
常见的指定文本行地址如下
地址 说明
n 行号,n为整数
$ 最后一行
/regexp/ 匹配基本正则表达式的行
addr1,addr2 从addr1到addr2范围内的文本行
first~step 匹配由数字first代表的文本行,然后间隔step处的文本行
addr1,+n 匹配地址addr1和随后的n个文本行
addr! 匹配除了addr外的所有文本行
sed除了上面的s查找替换模式,还有打印模式p,还有其它的编辑命令:
命令 说明
= 输出当前号
a 在当前行之后追加文本
d 删除当前行
i 在当前行之前插入文本
p 打印当前行,默认只打印一行
q 退出sed
s/regexp/replacement
y/set1/set2 执行字符转写操作,需要两个字符有相同长度
注意
sed命令默认只能替换第一个匹配项,如果有两个或以上的匹配项,则后面的忽略
使用-g选项可以使sed对文本行执行全范围查找替代,
han@han:~$ echo "front-front" | sed '1s/front/back/'
back-front
han@han:~$ echo "front-front" | sed '1s/front/back/g'
back-back
基本用法如下:
aspell check textfile
此命令会输出textfile文件中拼写可以的单词,并给出可能的替换选项
nl 添加行号
fold 限制文件列宽
pr 让文本为打印做好准备
fmt 一个简单的文本格式转换器
printf 格式化数据并打印出来
groff 一个文件格式系统
用来给文件添加行号,类似于cat -n
han@han:~$ nl alpha1.txt
1 b
2 c
3 d
4 e
nl可以附加一些选项
选项 含义
-b style 把body按被要求方式数行,有
a(所有行),t(非空行),n(无),pregexp(正则表达式)
-f style 将footer按被要求设置数,默认无
-h style 将header按被要求设置数,默认是
-i number 将页面增加量设置为数字,默认一
-n format 格式,ln(左偏无前导零),rn(右偏无前导零),rz(右偏有零)
-p 不在没有逻辑页面的开始重设页面数
-s string 在每行的末尾加字符作分隔符号,默认为tab
-v number 将每个逻辑页面的第一行设置成数字,默认是一
-w width 设置行宽,默认是六
pr 转换需要打印的文本文件
lpr 打印文件
lp 打印文件(System V)
a2ps 为PostScript打印机格式化文件
lpstat 显示打印机状态信息
lpq 显示打印机队列状态
lprm 取消打印任务
cancel 取消打印任务(System V)