linux指令学习
命令语法
一次输入多条命令,可以在命令之间用 ;
分割开来
语法: 命令名称 选项 参数
选项有时被称为开关(switches)或标志(flags),选项通常是由一个连字符后面接着一些字母,或者两个连字符后接着一个单词构成。例如 —help,—version(显示版本信息)
使用多个单字符选项时,可以把他们连接在一起,用一个连字符来表示。例如 ls -lF
。注意,unix的选项区分大小写
实际上许多长参数有着对应的短参数,但是长参数是一个完整的单词,为了便于记忆,有时也是用长参数,这时就要用两个连字符
输入命令时,必须要把每个选项和参数用空格分隔开
有些命令有默认值,有些命令没有默认值,例如 ls 如果只输入ls的话他会返回当前工作目录下所有文件
手册中提示的语法
- 方括号中的项是可选的
- 不再方括号中的项是必选项
- 黑体字必须原样输入
- 斜体字可以用适当的值代替
- 有省略号代表可以重复多次
- 如果一个单独的选项和参数组合在一起,这二者必须同时出现
- 由竖线(|)字符分开的两个或者多个项,宝石可以从这个列表中选择任意一项
用户提醒命令
- who 用来显示用这个计算机的用户
- whoami 用来显示当前用户标识
- quota 用来看自己拥有多少空间
- lock 临时上锁 lock -5 锁5分钟
- leave leave +15 十五分钟后离开 leave 1344 13点44分离开,到了时间它会不停的提醒你,相当于一个闹钟
- id 用来显示你的基本信息
- date 时间 date -u 协调世界时间(UTC时间)
- cal 显示日历 cal+某一年份可以显示某一年份的日历 cal 7 2019 显示2019年7月的日历 cal -j +… 会显示第几天,所以想要知道这一年是不是闰年只需 cal -j 12 + 年份,看看12月最后一天是不是366天就可以了
- su(substitute user) 这个指令是用来切换用户的,如果你知道一个用户的口令,那么就可以采用su+用户名的方式切换,这个时候用户标识改变了,但是你仍位于旧的环境之中。就像你让别人来你家做事,如果你想让别人在自己家做事,就要用su+’-‘+用户名
特别的,如果你想拥有root权限,你需要 su - root ,这时你输入的是你自己的口令而不是root口令,因为在计算机中有特殊的配置文件,这个文件只有管理员能操作,他可以修改那些人可以通过su口令获得root权限
- man 联机文档帮助 当你查看联机文档时,可以用/符加上你想搜索的内容进行搜索,用n来显示下一个,用N来显示上一个。?符是向下搜索。
如果想在查看man文档时执行指令,只需输入!在输入命令,之后按enter键又能回到man文档中 - foo bar 可以指代任意标识
man文档显示的内容
- 命令
- 系统调用
- 库函数
- 特殊文件
- 文件格式
- 游戏
- 杂项
- 系统管理
- whatis 显示说明书页的第一行(名字和用途)例如 whatis time date,这样同时显示两条指令的信息。这种指令可以用 man -f 替换
- apropos 搜索命令 他将显示所有带有该字符的命令。这种命令可以用man -k代替
info 另一种搜索命令,这种命令的特点是它有到其他命令的连接,就好像网页一样。这时一种树形结构,n跳转到下一个节点,p跳转到上一个节点,t跳转到当前文件的顶节点
登入登出命令
exit 退出当前用户,例如想从root模式退出用exit
- sudo 以超级用户模式运行一条指令。如果你经常使用超级用户,可能在无意间删去一些重要文件导致系统出现故障,因此超级用户需慎用。因此要用可以用sudo命令。
- less 浏览配置文件。例如我想浏览passwd文件,只需 less /etc/passwd
配置文件就像windows系统下的注册表和ini文件
- dmesg 显示启动信息,但是这种显示太快,看不清
- dmesg | less 显示启动信息
- init 设置运行级别,1为单用户,2为多用户,等等,0是关机,6是重启
如果想重启,可以用 sudo init 6
- reboot 重启 sudo reboot
- shutdown 关机,这个要说关机时间,经常用的是sudo shutdown now
快捷键和便捷输入命令
- erase 删除最好一个键入的字符,Ctrl+H
- werase 删除最后一个单词 Ctrl+W
- kill 删除一行 Ctrl+U
- intr 停止程序 有些系统是Ctrl+C,有些是delete
- quit 停止程序 Ctrl+\ 它不仅会停止程序,还会生成一个副本保存在core的文件中
- stop 停止屏幕显示,Ctrl+S
- start 开始屏幕显示 Ctrl+Q
- eof 文件终止信号 Ctrl+D
可以通过Ctrl+D终止shell,但是有时候会不小心按到。为了让shell忽略eof,需要使用一个叫IGNOREEOF的环境变量,这个变量表示注销前BASH会忽略多少次eof,设置这个变量时,要 IGNOREEOF = 数字 - stty -a 显示键盘映射,这个命令是表示各个快捷方式如erase的快捷键。stty是set terminal(设置终端)-a表示显示所有设置
- stty 修改键映射。例如想修改kill命令 ,可以 stty kill Ctrl a
- 返回字符 ^M,指的是返回到这一行的开头
- 换行字符 ^J
文件每一行最后一定是一个返回加换行 - stty sane,reset 候终端的设置被弄乱,可以采用这个命令是终端恢复到初始值
- up 向上键,会转到上一条指令
- down 转到下一条指令
- fc 查看历史命令列表,用fc -l来查看,前面都有一个编号。如果想转到某一条指令,可以 fc -s(substitute) 编号。如果后面不接编号,则默认为上一条指令。但是用fc -s会立刻执行这条指令
可以对这条命令进行小范围修改,格式为 fc -s pattern=replacement number
。pattern和replacement 都是字符串,而number是要修改时间的编号
- tab 自动补全命令,按一下如果有歧义,会发出提示声
立即使用的程序
- gedit 文本编辑器,相当于windows下的记事本
- which 看某个命令会使用那些程序,如果显示地址,则说明有这些程序,如果没有输出,或者输出错误信息,则说明这个命令无法使用
- quit 终止程序命令,但是也可以输入eof使程序终止
- bc 计算器 如果想用bc内部的函数,要用bc -l命令(library)。如果是多个算式,中间要用”;”号隔开
常用函数s(x) sinx 弧度制
c(x) cosx
a(x) arctanx
ln(x)
j(n,x) x的n次整阶贝塞尔函数
如果想用小数运算,先要设置标度因子 scale 来确定精确到小数点后多少位。如果输入scale 则会返回scale的当前值 scale=3,则设置小数点后三位
有一点需要注意,当你用来 bc -l时,scale会自动设置为20
bc实际上是一套功能完整的数学编程语言,可以使用的变量有26个字母
例如 x=100 就是将x变量设为100
变量显示命令
环境变量实际上就是全局变量,用env显示环境变量,如果想让输出按字母表排序,可以用 env | sort | less
set 显示shell变量
echo 显示赋予它对象的值,例如 echo I 将会输出I
如果要显示一个变量的值,可以用$(美元符号),后面的变量最好加花括号({})
例如 echo ${TERM}
实际上,很多标点符号都有特殊的用途,为了能正确显示他们,要在最外面用双引号
变量创建只需要一边写变量名,另一边写值即可。例如,HARLEY=cool,如果希望变量中有空格,则需使用双引号
export 将变量导出环境中(即变成全局变量)。还可以在创建同时导出。用 export 变量名=值即可
unset 删除变量。实际上没有办法简单的从环境中移除变量,因此最简单的办法是直接删除它。
set 显示shell所有选项的当前值,如果用 -o 则会简要的显示 +o是详细的显示。例如,set -o ignoreeof 这样在按 Ctrl+D的时候就不会突出shell了,如果想复位,只要+o
alias 建立别名,语法为alias name=command 例如
alias It='-l temp*'
。这种时候,单引号就比双引号要好,因为这样可以防止一些特殊字符被转义。此外,可以通过alias name 知道这个别名的当前值。可以只输入alias得知所有别名,通过unalias删去别名。如果想暂时不用别名,可以在命令之前输入” \ “
文件显示指令
- less,这条指令是让大量的数据分成一页一页进行查看,如果不使用这个程序。那么输出时会直接到这些数据的末尾。less在正常情况下是区分大小写的,如果想不区分,可以使用I选项。此外,less命令内部还有许多搜索,翻页等指令,这些指令可以通过help去查看。
less还有一个特殊的功能,就是直接跳转到某一页。less +5g …代表跳转到第5页,less +/buffer …是从第一个buffer处开始。
显示十六进制文件
显示二进制文件的命令是 hexdump(显示十六进制文件),od(显示八进制文件),
hexdump -C file。将自动选取适合的选项组合进行输出。
-s 偏移一定字节数开始输出。
-n 显示多少字节输出
strings: 显示二进制文件中的字符串
条件执行指令
command1 && command2
在条件1满足的情况下执行command2
command1|| command2
在条件1不满足的情况下也执行command2
正则表达式
regular expression 通常简写成regex或re,是一种指定字符串模式的输出方式。
例如: harley1 harley2 harley3 ,作为正则表达式,可以用harley[123]表达这组模式。
从这里我们可以了解到,正则表达式就像把许多字符串化为一个表达式。
下面介绍一些常用的正则表达式
元字符 | 含义 |
---|---|
. | 除新行字符外,匹配任意的单个字符 |
^ | 锚,匹配行的开头 |
$ | 锚,匹配行的末尾 |
\ < | 锚,匹配单词的开头 |
\ > | 锚,匹配单词的末尾 |
[list] | 字符类,匹配list中的任意字符 |
[ ^ list] |
子父类,匹配不再list中的任意字符 |
() | 组,视为一个单独的单元 |
竖线 | 匹配选择之一 |
\ | 引用: 从字面上解释元字符 |
注意 | 下面是判定匹配次数的字符 |
* | 匹配0次或者多次 |
+ | 匹配一次或者多次 |
? | 匹配0次或1次,如果是多个字符,则代表最小匹配。例如 <.*?>,这是用来匹配html标签的,如果同时匹配到多个,则选取匹配数目最少的 |
{n} | 匹配n次 |
{0,m} | 最多匹配m次 |
{n,} | 最少匹配n次 |
{,m} | 最多匹配m次 |
{n,m} | 最少n次,最多m次 |
注意 | 预定义字符类 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:alpha:] | 大小写字母 |
[:alnum:] | 大小写字母,数字 |
[:digit:] | 数字 |
[:punct:] | 标点符号 |
[:blank:] | 制表符或者空格 |
基本和扩展正则表达式
匹配行和单词
有些元字符具有定位的作用,这些字符叫做锚。例如,harley$仍是匹配字符串harley,但是这个时候只匹配行末尾的字符了。
如果我们要找以harley开头的行,可以
grep ‘^harley’ data
注意,当我们使用含有元字符的表达式时,为了不干扰,最好加上单引号
通过使用 ^$ ,我们可以很方便的查找空行。这个的意思就是既找行首又找行尾,只有空行才满足这个条件。
例如: grep ‘^$’ data | wc -l
如果我们要找 某个字符位于开头的,可以用 \<
例如: grep ‘\<kn’ data,这个就是找kn为于单词开头的单词。或者grep ‘kn>‘ data
在linux系统中,可以采用\b代替\<和>,\b相当于边界标记。此外,要尊重客观规律,不能把开头标记和结尾标记都写在开头。
如果想匹配所有包含字母 H ,后面加a或者A的,可以用 grep ‘H[aA]’ data
如果想表示一个范围,可以用 [a-b],例如 [3-6] 或 [a-z],这应该是按ascii码来的
grep ‘A-Z,a-z‘ data可以用来搜索所有不包含字母的行
重复使用运算符
例如,如果我想找首字母是大写H,后面接了0个或者多个字母的行,可以使用
grep ‘HPost not found: :alpha:*’ data
如果想搜索一个或者多个,可以用+号,
例如: grep ‘variable[0-9]+’ data
到现在,我们一直使用单个字符作为查找对象,如果想用多个字符作为查找对象,就需要用到组(小括号)
例如: (xyz){5},这条命令就是查找重复出现xyz五次的字符串
如果我们想搜索多个单词,可以用 | 分隔开来。
例如: grep ‘(cat | dog | bird) ‘ data
如果我们想搜索有特殊含义的元字符,可以用(转义字符)把这些字符的含义变成常规字符,如果我们想搜索 \ 本身,那么可以用两个 \
例如: grep ‘$‘ data
字典文件
字典顾名思义,就是许多经常用的单词放到一起,每个单词一行,并且按照字母表顺序排列。一般储存在 /usr/share/dict/words中。
利用这个文件,我们就可以很方便的查找单词。例如,那些单词以qu开头并且以y结尾呢?
grep ‘^qu[a-z]+y$’ /usr/share/dict/words
环境变量
变量名 | 作用 |
---|---|
PATH | 设置shell搜索路径 |
PS1 | 设置标识符 |
SHELL | shell路径 |
HISTSIZE | fc中最大保存的指令数 |