1.Shell简介
Shell 是运维和系统管理员操作Linux 系统的首选,简单说,它是一个命令解释器,是内核外层的一个壳
- 命令行相关:
行首“$” 或 “#” “-” 命令行提示符
行中 “##” ”-“ 视为注释开始
注意: 命令行是区分大小写的! - 使用命令行补全(Tab) 和通配符可以提高输入效率
通配符共有3个: “ * ”,“ ? ”,“ [ ] ”
-: 用于匹配文件名中任意长度的字符串;
?: 只匹配一个字符;
[ ]: 用于匹配所有出现在方括号内的字符。可以使用短线“-”来指定字符集范围。如:ls text[1-3] 或 ls test[a-z]
mkdir test
ls
cd test
touch test1 test2 test3 test4 testa testb
ls
ls test?
ls test[1-3]
ls test[a-b]
Linux 下环境下有几种不同Shell ,常用的有 BASH 、TCSH Shell和 Z-Shell 等
.BASH 是默认安装和使用的Shell。
2.必备命令
(1)寻求帮助 - man 命令
作用: Linux 为所有命令和系统调用编写了帮助手册。使用man 命令可以方便地获取某个命令的帮助信息。
用法: man [手册编号] 命令名 (注意[ ]可选)
man 命令在显示手册页时实际调用less 完成显示,J K可以上下翻动,空格用于向下翻页。Q键退出。
手册总共分为9 节,各部分内容如下:
注意:默认未安装gcc,所以手册中没有man2、man3
安装gcc:
sudo apt-get install gcc
(2)用户间切换SU
作用: 切换到其他用户
用法: su [用户名]
$ su jessie (切换到jessie这个用户)
注意: Ubuntu 默认情况下,系统没有合法的root权限,不能直接使用su命令提升到 root 权限,而必须要用 sudo 来获得 root 权限
(3)特权命令 sudo
切换到特权用户 root:
sudo su
sudo su -
sudo su root
文件操作常用命令
(4)显示当前目录 pwd
pwd 命令
作用: 显示当前目录,即工作目录
用法: pwd
(5)改变目录 cd
cd命令
作用: 改变目录位置
用法: cd . . .[OPTION] . . .[FILE]. . .
cd 目录路径 - 进入指定的目录中去
cd .. - 返回父目录
cd ../ -到同级目录
cd / - 进入根目录
cd 或 cd ~ - 进入用户主目录
cd ./* - 进入当前目录下*表示的子目录
注意:只有超级管理员root才能cd到根下
(6)显示目录 ls
用法: ls . . .[OPTION] . . .[FILE]. . .
常用参数:
1.不带任何参数 列出当前目录下的所有文件和子目录
2. -F 分类显示,方便阅读
3. -a 显示隐含文件 (eg: .jessie文件)
4. -l 查看文件的各种属性
(7)列出目录内容: dir 和 vdir
用法: dir . . .[OPTION] . . .[FILE]. . .
vidr . . .[OPTION] . . .[FILE]. . .
dir 和 ls 差不多,但比ls 功能少
vdir 相当于 ls -l 命令
(8)建立目录mkdir、创建文件touch
用法: mkdir . . .[OPTION] . . .[FILE]. . .
mkdir 一次可以建立一个或 几个目录
常用参数:
不带任何参数 创建相应目录,如果目录的父级目录路径不存在,则创建失败;
-p 创建相应目录,如果目录的父级目录路径不存在,则一起创建;
touch创建文件,如果文件已存在则修改最终修改时间
(9)移动mv、复制cp和删除rm
1.移动命令 mv
用法: mv . . .[OPTION] 源文件 目标文件
常用参数:
不带任何参数 将源文件移动到目标文件,注意:如果目标文件存在则替换;
-i 将源文件移动到目标文件,如果目标文件存在则提示是否替换;(更安全)
-b 将源文件移动到目标文件,如果目标文件存在则不进行覆盖,而是在目标文件后加~(更安全)
2.复制命令 cp
用法: cp . . .[OPTION] 源文件 目标文件
常用参数:
不带任何参数 将源文件复制到目标文件,注意:如果目标文件存在则替换;
-i 将源文件复制到目标文件,如果目标文件存在则提示是否替换;
-b 将源文件复制到目标文件,如果目标文件存在则不进行覆盖,而是在目标文件后加~
-r 将子目录及其中的文件一起复制到另一个子目录下
3.删除命令 rm
删除命令可以一次永久性删除一个或几个文件(包含目录)
用法: rm . . .[OPTION]. . . [FILE]. . .
常用参数:
不带任何参数 删除文件或相应目录,不给予任何提示;
-i 删除文件或相应目录,删除时进行提醒;
-f 强制性删除文件或相应目录;
-r 将子目录及其中的文件一并删除。(慎用!特别时在root 权限下)
注意:命令参数都可以组合 如:-ir
(10)文件链接ln
ln 建立文件链接
用法: ln . . .[OPTION] 源文件 目标文件
常用参数:
不带任何参数 创建硬链接
ls -i 查看可以看到两个文件的inode 值一致;
-s 创建软链接,即别名,如果源文件删除,则软链接(别名)也无法访问。
ln test1.c ln_demo //硬链接
ln -s test1.c ln_demo_s //软链接
(11)改变文件所有权 chown 和 chgrp
第1位:d代表目录、l代表链接、-代表是隐藏文件
第2-4位:代表用户具有的权限–r读、w写、x执行
第5-7位:同组其他成员权限
第8-10位:其他组的成员权限 -代表没有相应的权限
chown 命令用于改变文件的所有权。
用法: chown . . .[OPTION] [OWNER][:[GROUP]] FILE . . .
常用参数:
不带任何参数 改变单个或多个文件的属主和属组;
-r 改变一个目录及其下所有文件(和子目录)的所有权设置。
sudo su
chown root test3
ls -la
chown :root test3
ls -la
注意: “.“可以替代”:”
chgrd 用于单独设置文件的属组。
用法: chown . . .[GROUP] FILE . . .
(12)改变文件权限 chmod
chmod 用于改变一个文件的权限。它以“用户组 +/- 权限”的表达方式来增加/删除相应的权限。
具体来说,用户组包括了文件属主(u)、文件属组(g)、其他人(o) 和所有人(a),
而权限则包括读取(r、w、x)
用法: chmod . . .[OPTION] . . .[FILE]. . .
chmod a+x test2
chmod g-w,o-w,o-x test4
也可以用二进制的方式表示
chmod 600 test1 //-rw-------
添加用户和属组:
groupadd bl
useradd -g jessie bl
password bl
sudo su bl
(13)阅读文件的头部和尾部: head 和 tail
用法: head/tail . . .[OPTION]. . . FILE
常用参数:
不带任何参数 显示文件的头部/尾部 10 行;
-n 按指定的行数显示文件的头部/尾部 ;
(14)查看文本文件: cat 、more 和 less
cat命令用来一次性查看全部文本文件的内容,后跟文件名作为参数.也可以带上 -n 显示每行的行号。如果文件长达几十上百页,不建议使用 cat.
more 命令用来分页查看文本文件。(空格翻页;回车向下滚动一行;Q键退出)
less命令更人性化的文本阅读工具。
(15)编辑器: vim
vim 是UNIX 和 Linux 上标配的编辑器,功能十分强大。
用法 :
vim file 或 vim
编辑保存文件:分插入和命令两种模式。
插入模式
操作:输入字符,并可以按光标键移动输入字符位置.
命令 | 操作 |
---|---|
a | 在光标后插入 |
i | 在光标所在位置插入 |
o | 在光标所在位置的下一行插入 |
Esc | 进入命令模式 |
: | 进入行命令模式 |
命令模式
执行除输入字符之外的所有操作,包括保存、搜索、移动光标等。
vim 启动默认是在命令模式,如果在编辑模式,需要按 Esc 切换回命令模式.
可以使用光标键控制上下左右移动,或者 h、j、k、l移动。
保存和退出:
保存文件、退出等需要切换到行命令模式,在插入模式下输入 Esc 再 输入
:w :q 或 :wq 等。
前提:须切换到命令模式。注意组合命令执行的顺序:w ->q ->!
命令 | 操作 |
---|---|
:w | 保存文件 |
:w filename | 另存为filename |
:q | 退出Vim |
: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 | 替换一行中的所有匹配项(这个选项通常需要使用) |
i | 不区分大小写 |
如Windows 环境下的源码经常会有 “^M”的字符,要清除可以使用下面的命令:
:%s/^M$//g
删除、复制、粘贴
前提:须切换到命令模式。
x | 删除光标所在位置的字符 |
---|---|
dd | 删除光标所在的行, 2 dd 表示删除2行 |
D | 删除光标所在位置到行尾之间所有的字符 |
d | 普遍意义上的删除命令,和移动命令配合使用。例如dw 表示删除光标所在位置到下一单词词头之间所有的字符 |
yy | 复制光标所在的行 |
y | 普遍意义上的复制命令,和移动命令配合使用。例如yw表示复制光标所在位置到下一个单词词头之间所有的字符 |
p | 在光标所在位置粘贴最近复制/删除的内容 |
撤销和重做
前提:须切换到命令模式。
语法 : :[range]s/pattern/string/[c、e、g、i]
命令 | 操作 |
---|---|
u | 撤销一次操作 |
Ctrl+R | 重做被撤销的操作 |
程序员特有配置
:syntax on | ## 语法高亮 |
---|---|
:set autoindent | ## 自动缩进 |
:set shiftwidth=4 | ## 设置Tab 键对应的空格数 |
查找和定位常用命令
(16)指定范围内查找 - find 命令
作用: 在指定范围内迅速查找到文件。
用法: find [OPTION] [path . . .] [expression]
例:
$find /usr -name test.txt
【OPTION选项】
特殊情况才会使用,建议日后查帮助
常用参数:
参数 | 含义 |
---|---|
-type | 查找时指定文件的类型,可使用参数如下表; |
-atime n | 查找最后一次使用在n天前的文件,n 使用负数表示; |
-mtime n | 查找最后一次修改在n天前的文件; |
-maxdepth n | 查找目录的最大深度 |
-mindepth n | 从指定的目录的第几层深度开始查找 |
参数 | 含义 | 参数 | 含义 |
---|---|---|---|
b | 块设备文件 | f | 普通文件 |
c | 字符设备文件 | p | 命名管道 |
d | 目录文件 | l | 符号链接 |
(17)更快速的定位文件 - locate 命令
作用: 火箭般的速度定位文件。
用法: locate [expression] pattern
locate 并不进入子目录进行搜索,它通过检索数据库来确定文件的位置。可以使用 updatedb 来更新检索数据库。
(18)查找文件内容 - grep 命令
作用: 在文件中寻找某些信息。
用法: grep [OPTIONS] PATTERN [FILE…] ## pattern 使用基础正则表达式
grep open ./test1.c