linux部分
Linux部分
Linux基础部分
初识shell
使用shell的两种方式
- 交互式命令行
- 默认等待用户输入命令,输入一行回车后执行一行命令
- 效率低 适合少量的工作
- shell脚本
- 将需要执行的命令和逻辑判断语句都写入一个文件中,一起运行
- 效率高 适合完成复杂,重复性工作
bash shell提示符
shell语法
命令 选项 参数
1 | [root@localhost ~]# cal --year -m 2020 |
命令
cal
是命令,用于查看日历
选项
--year
是选项,表示显示一整年,这个是一个长选项,也就是单词都拼全了,需要两条-
符号-m
是短选项,是首字母,表示每个星期的星期一作为第一天- 对于有些命令而言,可以不写选项,这样命令会有个默认的行为
- 短选项可以多个合并在一起,比如上面的命令可以写成
-ym
其中y是year简写,可以和m写在一起,而长选项不支持写在一起
ls
用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)
1 | ls [-alrtAFR] [name... |
-a:显示所有文件及目录 (**.**开头的隐藏文件也会列出)
-l:除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r:将文件以相反次序显示(原定依英文字母次序)
-t:将文件依建立时间之先后次序列出
-A:同 -a ,但不列出 “.” (目前目录) 及 “..” (父目录)
-F:在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/“,链接加”@”
-R:若目录下有文件,则以下之文件亦皆依序列出
-h:将显示出来的文件大小以合适的单位显示出来
实例
查看当前目录下的文件
1
[root@localhost ~]# ls
- 查看根目录下的文件,查看/usr目录下的文件
1 | [root@localhost ~]# ls / |
echo
用于字符串的输出
选项
-n:不输出行尾的换行符
-e
:允许对下面列出的加反斜线转义的字符进行解释
- \ 反斜线
- \a 报警符(BEL)
- \b 退格符
- \c 禁止尾随的换行符
- \f 换页符
- \n 换行符
- \r 回车符
- \t 水平制表符
- \v 纵向制表符
-E 禁止对在STRINGs中的那些序列进行解释
grep
针对文件内容进行过滤
实例
1 | [root@xwz ~]# grep 'root' /etc/passwd |
文件管理
文件管理命令
几个常见的处理目录的命令
ls(英文全拼:list files): 列出目录及文件名
cd(英文全拼:change directory):切换目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir(英文全拼:make directory):创建一个新的目录
rmdir(英文全拼:remove directory):删除一个空的目录
cp(英文全拼:copy file): 复制文件或目录
rm(英文全拼:remove): 删除文件或目录
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
touch:创建新文件
mkdir (创建新目录)
- -m:配置文件的权限喔!直接配置,不需要看默认权限 (umask)
- -p:帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
- -v:显示目录创建的过程
cp (复制文件或目录)
- -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
- -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
- -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
- -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
- -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
- -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
- -r:递归持续复制,用於目录的复制行为;(常用)
- -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
- -u:若 destination 比 source 旧才升级 destination !
- -v:显示复制的详细过程
mv(移动文件与目录,或修改名称)
- -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i:若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u:若目标文件已经存在,且 source 比较新,才会升级 (update)
- -v:显示复制的详细过程
rm (移除文件或目录)
- -f:就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i:互动模式,在删除前会询问使用者是否动作
- -r:递归删除啊!最常用在目录的删除了!这是非常危险的选项!
文本文件查看
cat
- -n:由 1 开始对所有输出的行数编号
- -b:和 -n 相似,只不过对于空白行不编号。
- -s:当遇到有连续两行以上的空白行,就代换为一行的空白行。
- -A:显示控制字符。
less
可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页
head
查看文件的开头部分的内容
- -q:隐藏文件名,默认是隐藏
- -v:显示文件名
- **-c<数目>**:显示的字节数。
- **-n<行数>**:显示的行数。
tail
会把文本文件里的最尾部的内容显示在屏幕上
- -f:循环读取
- -q:隐藏文件名,默认隐藏
- -v:显示文件名
- **-c<数目>**:显示的字节数
- **-n<行数>**:显示文件的尾部 n 行内容
- -s:与-f合用,表示在每次反复的间隔休眠S秒
grep
针对文件内容进行过滤,本工具属于文本三剑客.
实例
1 | [root@xwz ~]# grep 'root' /etc/passwd |
文本文件编辑
- vi:所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。
- vim:具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
vim/vi的使用
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i
,并不会输入一个字符,i
被当作了一个命令。
以下是常用的几个命令:
- i切换到输入模式,以输入字符。
- x删除当前光标所在处的字符。
- **:**切换到末行模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠末行模式输入更多命令。
按键说明:
移动光标的方法
n | 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。 |
---|---|
$ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
0 或功能键[Home] | v这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
n | n 为数字。光标向下移动 n 行(常用) |
G | 移动到这个档案的最后一行(常用) |
文本的搜索与替换
/word | 向光标之下寻找一个名称为 word 的字符串。 (常用) |
---|---|
n | 这个 n 是英文按键。代表重复前一个搜寻的动作。 |
:n1,n2s/word1/word2/g | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 (常用) |
:1,$s/word1/word2/g 或 :%s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
删除、剪切,复制与粘贴
dd | 删除/剪切光标所在的那一整行(常用) |
---|---|
ndd | n 为数字。删除/剪切光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
. | 重复前一个动作。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
进入输入或取代的编辑模式
i, I | 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用) |
---|---|
a, A | 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) |
o, O | 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用) |
r, R | 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) |
[Esc] | 退出编辑模式,回到一般模式中(常用) |
末行模式下的储存,离开等指令
:w | 将编辑的数据写入硬盘中(常用) |
---|---|
:w! | 若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的权限有关 |
:q | 离开 vi (常用) |
:q! | 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存。 |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出) |
:x | 效果等同于(保存并退出) |
:X | 大写的X,用于加密文件 |
ZQ | 不保存,强制退出。效果等同于**:q!**。 |
:w [filename] | 将编辑的数据储存成另一个文件(类似文件另存为) |
:r [filename] | 在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到光标所在行后面 |
:n1,n2 w [filename] | 将 n1 到 n2 的内容储存成 filename 这个文件。 |
:! command | 暂时离开 vi 到bash命令行下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的文件信息! |
vim环境变量修改
:set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
---|---|
:set nonu | 与 set nu 相反,为取消行号! |
文件基本属性与文件查找
文件时间
stat
用于显示文件时间和 inode 内容,inode相关的知识会在后面的磁盘管理章节详细讲解,这边主要来看文件的时间
1 | [root@localhost ~]# export LANG="en_US.UTF-8" |
- Access:访问时间,也叫atime
- 当文件被访问的时候,这个时间就会发生改变
- Linux文件运行的时候查看文件又频繁数量又大,如果每次atime发生变化的时候都记入硬盘,或造成很大的压力。RHEL6开始relatime,atime延迟修改,必须满足其中一个条件:
- 自上次atime修改后,已达到86400秒
- 发生写操作时
- Modify:修改时间,也叫mtime
- 当文件内容发生变化的时候,这个时间就会发生改变
- Change:改变时间,也叫ctime
- 当文件状态被改变的时候,这个时间就会发生修改
文件类型
判断文件类型
文件查找
which
用于查找文件
which指令会在环境变量$PATH
设置的目录里查找符合条件的文件
1 | which [文件...] |
find
实时查找工具,通过遍历指定路径下的文件系统完成文件查找
工作特点:
- 查找速度略慢
- 精确查找
- 实时查找
- 可以满足多种条件匹配
1 | find [选项] [路径] [查找条件 + 处理动作] |
查找条件
根据文件名查找
1
2
3[root@localhost ~]# find /etc -name "ifcfg-ens33"
[root@localhost ~]# find /etc -iname "ifcfg-ens33" # 忽略大小写
[root@localhost ~]# find /etc -iname "ifcfg*"按文件大小
1
2
3
4[root@localhost ~]# find /etc -size +5M # 大于5M
[root@localhost ~]# find /etc -size 5M # 等于5M
[root@localhost ~]# find /etc -size -5M # 小于5M
[root@localhost ~]# find /etc -size +5M -ls # 找到的处理动作-ls指定查找的目录深度
按时间找
按照文件属主、属组找,文件的属主和属组,会在下一篇详细讲解。
按文件类型
按文件权限,文件权限会在下一篇详细讲解
按正则表达式
条件组合
- -a:多个条件and并列
- -o:多个条件or并列
- -not:条件取反
用户权限管理
进程管理
systmed 是一个用户空间的程序,属于应用程序,不属于 Linux 内核范畴。Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit(这个是centos6中的初始化系统)固有的缺点,提高系统的启动速度。
systemd 的主要命令行工具是systemctl
1 | systemctl [选项...] {命令} ... |
systemctl常用命令:
start :启动服务
stop :停止服务
status :检查服务状态检查服务是否启动
enable :启用开机自启服务
查看系统中的进程
ps
常用组合:ps aux, ps -aux, ps -ef, ps -efH
按照CPU使用率排序查看所有进程
1
2[root@localhost ~]# ps aux --sort %cpu # 递增
[root@localhost ~]# ps aux --sort -%cpu # 递减按照实际内存使用排序查看所有进程
1
2[root@localhost ~]# ps aux --sort rss # 递增
[root@localhost ~]# ps aux --sort -rss # 递减
top 实时显示 process 的动态
删除执行中的程序和工作
kill
常用命令
kill -9 ‘ ‘
kill -15 ‘ ‘
pkill
pkill 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令
1 | pkill [选项] name |
- name: 进程名
- -u:指定用户名
- -t:指定终端
进程优先级
nice
使用ps查看
1 | [root@localhost ~]# ps axo pid,command,nice --sort=nice |
PR
jobs
jobs 命令可以用来查看当前终端放入后台的任务
- 在命令后面加入
空格 &
。使用这种方法放入后台的命令,在后台处于执行状态 - 命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于暂停状态
fg 命令用于把后台工作恢复到前台执行