一 简介
shell是一个命令解释器,是运维和系统管理员操作Linux系统的首选;
同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
命令行相关:行首 “$” 或 “#” - 命令行提示符
行首 “##” - 视为注释开始
注:命令行严格区分大小写!
使用命令行补全(Tab)和通配符可以提高输入效率
通配符一共三个:
* -- 用于匹配文件名中任意长度的字符串,如 alphabet ,你只记得 alp , 那么就可以用 alp* 来匹配
? -- 只匹配一个字符,如,一个单词 test ,你不记得 e 位置是什么,就可以用 ? 来代替,如 t?st
[ ] -- 用于匹配所有出现在方括号内的字符。可以使用 “-” 来指定字符集范围,如 ls test[1-3] 和 ls test[a-z]
二 急速入门必备命令
2.1 寻求帮助 - man 命令
作用: Linux为所有用户和系统调用编写了帮助手册。使用 man 命令可以方便快捷地获取某个命令的帮助信息
用法: man[手册编号] 命令名
man 命令在显示手册页时调用 less 完成显示,J K 可以上下翻动,空格 用于向下翻页,Q 键退出
手册分9节,内容如下:
目录 | 内容 |
---|---|
/usr/share/man/man1 | 普通命令和应用程序 |
/usr/share/man/man2 | 系统调用 |
/usr/share/man/man3 | 库调用,主要是libc()函数的使用文档 |
/usr/share/man/man4 | 设备驱动和网络协议 |
/usr/share/man/man5 | 文件的详细格式信息 |
/usr/share/man/man6 | 游戏 |
/usr/share/man/man7 | 文档使用说明 |
/usr/share/man/man8 | 系统管理命令 |
/usr/share/man/man9 | 内核源代码或模块的技术指标 |
2.2 用户间切换 su
作用: 切换到其他用户
用法: su [用户名]
$ su sign ##切换到sign这个用户
$ su ##切换到特权用户 root
注意:部分Linux系统如 Ubuntu 等,在默认情况下,系统没有合法 root 权限,不能直接使用 su 命令提升到 root 权限,而必须使用 sudo 来获得 root 权限
2.3 特权命令 sudo
作用: 提升当前执行命令的权限,root 权限去执行命令
用法: sudo 命令
$sudo su ##切换到 root 用户
$sudo rm root.txt ##使用 root 权限执行 rm 命令,删除文件 root.txt
三 文件操作常用命令
3.1 显示当前目录 pwd 和改变目录 cd
pwd 命令
作用: 显示当前目录,即工作目录
用法: pwd
cd 命令
作用: 改变目录位置
用法: cd 目标路径 ##进入指定的目录中
cd .. ##返回父目录
cd / ##进入根目录
cd 或 cd ~ ##进入用户主目录
cd ./* ##进入当前目录的子目录 *
3.2 ls 命令
用法: ls [参数]
常用参数及意义:
ls 不带任何参数 ##列出当前目录下的所有文件及子目录(文件夹)
ls -F ##分类显示,更直观,方便辨识
ls -a ##显示隐藏文件
ls -l ##列出文件,并显示各个文件的属性
更多用法可用 man ls 命令去查询。
列出目录下内容的命令还有:dir 与 vdir (功能与 cmd 的 dir 命令类似)
dir = ls 但功能比 ls 少 vdir = ls -l
3.3 创建目录(文件夹)命令: mkdir
用法: mkdir [目录名1] [目录名2]...
mkdir 命令可以一次性创建一个或多个目录
常用参数:
mkdir 不带任何参数 ##创建相应目录,如果目录的父目录不存在,则创建失败
mkdir -p ##创建相应目录,如果目录的父目录不存在,则一起创建,多用于创建多级目录,如 mkdir -p x1/x11/x111
3.4 移动、复制和删除命令
移动命令 mv
用法: mv [参数] 源文件 目标文件(目录)
常用参数:
不带参数 ##将源文件移动到目标文件,注意:如果目标已存在同名文件,则会替换掉原本的文件
-i ##将源文件移动到目标文件,如果如果目标已存在同名文件,将询问是否替换原本的文件
-b ##将源文件移动到目标文件,如果如果目标已存在同名文件,则不替换,而会在已有文件的文件名后面加一个 ~
复制命令 cp
用法: cp [参数] 源文件 目标文件(目录)
常用参数:
不带参数 ##将源文件复制到目标文件,注意:如果如果目标已存在同名文件,则会替换掉原本的文件
-i ##将源文件复制到目标文件,如果如果目标已存在同名文件,将询问是否替换原本的文件
-b ##将源文件复制到目标文件,如果如果目标已存在同名文件,则不替换,而会在已有文件的文件名后面加一个 ~
-r ##将子目录及其中文件一起复制到另一个子目录下
删除命令 rm
用法: rm [参数] [目标文件1] [目标文件2]...
删除命令可以一次删除一个或者多个文件
常用参数:
不带参数 ##删除目标文件或者目录,不带任何提示
-i ##删除目标文件或者目录,删除时进行提醒
-f ##强制删除目标文件或者目录
-r ##将子目录及其文件一并删除(慎用,特别是在 root 权限下)
链接命令 ln
用法: ln [参数] 源文件 目标文件
常用参数:
不带参数 ##创建硬链接,使用 ls -i 查看可以看到两个文件的 inode (索引节点)值一致,也就是文件信息一致
-s ##创建软链接,即别名,如果源文件被删除,则软链接(别名)也无法访问
3.5 文件权限命令
3.5.1 改变文件所有权 chown 和 chgrp
chown 用于改变文件的所有权
用法: chown [用户][:][属组] [文件名]...
常用参数:
不带参数 ##改变单个或者多个文件的属主和属组
-R ##改变一个目录及其下的所有文件以及子目录的属主和属组
chgrp 用于单独改变目标文件的属组
用法: chgrp [用户组] [文件名]
3.5.2 改变文件权限 chmod
chmod 可以改变文件的读写权限,他可以以“用户组 +/- 权限”的表达方式来增加/删除相应的权限,用户组包括了文件属主(u)、属组(g)、其他人(o)和所有人(a),用户权限包括(r、w、x);同时他也可以通过一个二进制数来修改文件的权限如 755 代表 111 101 101 转换成 权限则为 rwx r-x r-x;
用法:
1. chmod [用户组] [+/-] [文件名]
2. chmod 755 [文件名]
例子:
$chmod u+x test.txt ##属主增加 x (可执行)权限
$chmod ug-r test.txt ##属主与属组 移除 r (读)权限
$chmod ug=rw、o=r test.txt ##属主与属组可读写,其他用户可读
$chmod 755 test.txt ##文件权限改为 rwxr-xr-x
3.6 文件阅读命令
3.6.1 head 和 tail
head 命令由于阅读文件的头部
tail 命令用于阅读文件的尾部
用法: head/tail [参数] [文件名]
常用参数:
不带参数 ##显示头部/尾部十行
-n ##按指定的行数显示文件的头部/尾部
3.6.2 cat、more and less
cat 命令用来一次性查看全部文件内容,后跟文件名作为参数,也可以带上 -n 来显示行号,当文件内容过多时,不建议使用
例子:
more 命令用分页来查看文本文件,空格翻页,回车向下滚动一行,q键退出
less 更人性化的文本阅读工具
3.6.3 文本编辑器 vim
vim 是Unix 和 linux 系统上面标配的编辑器
用法: vim [文件名] 或者 vim
1.编辑保存文件
分插入和命令两种模式
插入模式
操作:输入字符,并可以按光标键移动输入字符位置
命令 | 操作 |
---|---|
a | 在光标后插入 |
i | 在光标所在位置插入 |
o | 在光标所在位置的下一行插入 |
Esc | 进入命令模式 |
: | 进入行命令模式 |
命令模式
执行初输入字符外的所有操作,包括保存,搜索,移动光标等
vim 启动默认是在命令模式,如果在编辑模式,需要按 Esc 键切换回命令模式
可以使用光标键上下左右移动,或者 h、j、k、l 移动。
保存和退出
保存文件、退出等需要切换到行命令模式,在插入模式下按 Esc 键再输入 :w、:q 或 :wq 等
前提:需切换到命令模式,组合命令按先后顺序执行,如:w->q->!
命令 | 操作 |
---|---|
:w | 保存文件 |
:w filename | 另存为filename |
:q | 退出 |
:q! | 强行退出,放弃保存 |
搜索字符串
/string ##向下搜索一个字符串
?string ##向上搜索一个字符串
启动/关闭大小写敏感,执行:
:set ignorecase
:set noignorecase
替换字符串
用法: :[range]s/pattern/string/[c、e、g、i]
将 pattern 所代表的字符串替换成 string ,range 用于指定替换作用的范围,如 “1,10” 表示从 1 到 10 行,“1,$” 代表 1 到最后一行,也就是全文,可以用 “%” 替代。
最后的方括号是可选选项,内容如下
标志 | 含义 |
---|---|
c | 每次替换前询问 |
e | 不显示错误信息 |
g | 替换一行中的所有匹配项(常用) |
a | 不区分大小写 |
如Windows环境下的源码经常会有 “^M” 的字符,可以使用一下命令清除:
%s/^M//g
删除、复制、粘贴
命令 | 操作 |
---|---|
x | 删除光标所在位置的字符 |
dd | 删除光标所在的行,2 dd表示删除两行 |
D | 删除光标所在位置到行尾之间的所有字符 |
d | 普遍意义上的删除命令,和移动命令配合使用。如 dw 表示删除光标所在位置到下一单词词头之间的所有字符 |
yy | 复制光标所在的行 |
y | 普遍意义上的复制命令,和移动命令配合使用。如 yw 表示复制光标所在位置到下一单词词头之间的所有字符 |
p | 在光标所在位置粘贴最近复制/删除的内容 |
撤销和重做
u 撤销一次操作
Ctrl + R 重做被撤销的操作
程序员特有配置
:syntax on ##语法高亮显示
:set autoindent ##自动缩进
:set shiftwidth=4 ##设置Tab键对应的空格数
四 查找和定位常用命令
4.1 find 命令
作用: 在指定范围内查找指定文件
用法: find [目录] [选项] [参数] -name [文件名]
例子: find ./home -type f -name test ##在当前目录的home目录下查找文件类型为普通文件的 test 文件
常用参数:
-type ##查找时指定文件类型,类型参数看下表
-atime n ##查找最后一次使用在 n 天前的文件,n 使用负数表示
-mtime n ##查找最后一次修改在 n 天前的文件
参数 | 含义 |
---|---|
b | 块设备文件 |
c | 字符设备文件 |
d | 目录文件 |
f | 普通文件 |
p | 命名管道 |
l | 符号链接 |
4.2 更快速的定位文件 locate
作用: 更快速地定位文件
用法: locate [文件名]
locate 并不进入子目录进行搜索,他通过检索数据库来确定文件的位置,当查找不到目标文件时可以使用 updatedb 来更新检索数据库后再进行查询。
4.3 查找文件内容 -grep 命令
作用: 在文件中查找某些信息
用法: -grep [内容] pattern [文件名] ##pattern 使用基础正则表达式
例子: $-grep open ./test.c ##在当前目录的 test.c 文件中查找 open