本文是Linux操作系统相关的知识,参考的资料主要有《鸟哥的Linux私房菜-基础版(第四版)》的第四到第十二章,以及尚硅谷的Linux教程。笔记不可能面面俱到,但是常用的命令和知识应该都包括了,此外指令的选项有很多,笔记中也是只列出了常用的几个,较完整的介绍还请大家自行搜索。如果有什么错误还请大家指出。
一、Linux基础知识
1. Linux文件目录
(1) 文件目录
/bin:binary的缩写,存储可执行文件/boot:存储开机会用到的文件/dev:存储装置和接口设备/ect:存储配置文件/lib:存储函式库文/media:存储可移除的装置,如软盘、光盘、DVD等/mnt:存储暂时挂载的其他文件系统/opt:存储第三方安装软件/run:存储开机后产生的各项信息/sbin:s是Super User的意思,存储开机、修复、还原系统所需要的程序/tmp:存储一般用户或正在执行的程序所产生的文件/usr:存储各种软件/var:存储变动性的数据,包括日志文件等/home:默认的用户家目录/root:root用户的家目录
(2) 目录符号
.:本层目录..:上层目录-:前一个目录~:当前用户的家目录~用户名:该用户的家目录/root:root 用户的家目录/home/用户名:普通用户的家目录/:根目录,即所有目录最顶层的目录
2. 快捷键
(1) 切换控制台
Ctrl+Alt+[F1~F6]:在桌面按下可进入编号为1~6的文本模式(又称终端接口、terminal、console),再按下相同的按键返回图形化窗口
(2) Tab键
Tab:具有命令补全和文件补全的功能- 在一个没打完的命令名后按两次
Tab就可以显示所有以该字符串为前缀的命令名 - 在一个没打完的文件名后按两次
Tab就可以显示所有以该字符串为前缀的文件名 - 在
-或--后面按两次Tab就可以显示改命令所有的可选项
- 在一个没打完的命令名后按两次
(3) Ctrl相关快捷键
-
Ctrl+其他键Ctrl+c:终止当前进程的运行Ctrl+z:挂起当前进程Ctrl+d:键盘输入结束,即EOF,并且该组合键还可以当作exit命令来使用Ctrl+a:让光标移动到整个指令串的最前面Ctrl+e:让光标移动到整个指令串的最后面Ctrl+?:清除本行指令
3. 命令格式
-
command [-options] 参数1 参数2 ...:一般的指令格式-
command:指令名 -
[]:表示可选 -
-:表示是缩写,如-h -
--:表示全称,如--help -
参数:命令的参数在某些特殊情况下选项和参数前面也有可能带有正号
+。
-
在指令中无论空几格都视为一格。在Linux中大小写字母是不一样的
4. 通配符
*:0到无穷多个任意字符?:一个任意字符[abcd]:取[]中的任意一个字符-:在编码顺序内的所有字符,如[0-9]表示0-9共10个数字^:反向选择,如[^abc]表示除了abc之外的其他一个字符
二、vi和vim编辑器
1. vi和vim基本介绍
-
Linux会内建vi编辑器,而vim是进阶版的vi,可以用不同颜色显示文字内容,并且具有程序编写的功能,可以根据程序的类型来进行显示。
-
在vim编辑器下按
Ctrl+S会锁定屏幕,此时可以用Ctrl+Q解除锁定 -
如果输入
alias显示 vi=‘vim’,则说明在执行vi指令时,默认使用的是vim
2. vi和vim的三种模式
vi 文件名当文件名存在时直接打开,不存在时新建。一般输入i进入编辑模式,输入ESC键退出编辑模式,输入:进入指令行命令模式,:wq!中w是写入保存,q是退出,!是强制执行
(1) 一般指令模式
用vi打开文件后默认进入一般指令模式
i) 常用命令
Ctrl+f或PageDown:下一页Ctrl+b或PageUp:上一页0或home:移动到这一行的最前面字符$或end:移动到这一行的最后一个字符Shift+g:移动到文件的最后一行gg:移动到文件的第一行/字符串:从光标处开始往下寻找字符串?字符串:从光标处开始往上寻找字符串n:向下重复前一个搜寻操作dd:删除光标所在的一整行yy:复制游标所在的那一行p:在光标的下一行粘贴
ii) 不常用命令
-
30↓:往下移动30行 -
n+Enter:光标往下移动n行 -
n+Space:光标右移n个字符,n表示数字 -
:n1,n2s/word1/word2/g:在第n1行和n2行之间搜寻word1并将其替换为word2 -
:1,$s/word1/word2/g:从第一行到最后一行寻找word1,并将其地换为word2 -
u:复原上一个动作 -
.:重做上一个动作
(2) 编辑模式
按下i,I,o,O,a,A,r,R中的任意一个字母后进入编辑模式,一般按i即可,按下ESC键退出
(3) 指令行命令模式
输入:或/后进入指令行命令模式,按ESC键返回到一般指令模式。在输入命令时,如果想输入多行,可以先输入\,然后立刻输入回车键,就可以在下一行继续写了。
:set nu:显示行号:set nonu:取消行号
3. 多文件编辑
可以用vim 文件名1 [文件名2...]来同时对多个文件进行编辑,在指令行模式下
:n:是编辑下一个文件:N:是编辑上一个文件- ``:files`:是列出目前这个vim所开启的所有文件
:sq [文件名]:可以同时浏览多个文件,当加文件名时则在一个新窗口打开该文件,当不加文件名时,在同一个窗口内打开Ctrl+w+↑:切换到上面的窗口Ctrl+w+↓:切换到下面的窗口Ctrl+w+q:退出当前窗口
三、开机、重启和用户登录注销
1. 关机、重启命令
主要有shutdown、halt、reboot这三条指令,常用第一个。以及保存内存数据到磁盘的syn命令
-
shutdown [-krhc] [时间] [警告信息]:关机-k:只发出警告信息不关机-r:重新启动-h:立即关机-c:取消正在进行的shutdown指令时间:系统关机的时间,单位是分钟,默认为1分钟
例:
shutdown -h now:立即关机shutdown -h 20:25:下一个20点25分关机
-
halt:关机 -
reboot:重启系统 -
syn:让内存中尚未更新保存的数据写入到磁盘中,关机或重启时应先执行该命令
2. 用户登录和注销
logout:可注销用户,该指令在图形运行级别无效,在运行级别 3下有效,关于运行级别,请看本文5.1节
四、用户和用户组管理
1. 基本介绍
(1) 用户和用户组
- Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
- Linux 的用户需要至少要属于一个组
- 用户组类似于角色,系统可以对有共性的多个用户进行统一的管理
(2) 用户权限
用ls命令查看文件属性后,显示:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
- 第0位表示文件类型
d:目录-:文件,文件名的第一个字符为.时表示为一个隐藏文件l:链接档
- 第1-3位表示所有者权限,r表示可读,w表示可写,x表示可执行
- 第4-6位表示所在组权限
- 第7-9位表示其他用户权限
2. 用户操作
(1) 添加用户
useradd [-degsu] 用户名:新建用户帐号(超级用户可用)-d 目录名 用户名:指定用户登入时的主目录-e 日期 用户名:帐号终止日期-g 群组 用户名:指定账户所属的用户组-s shell 用户名:指定账户登录后所使用的shell-u uid 用户名:指定用户ID
(2) 用户密码操作
-
passwd [-dlus] 用户名:设置或修改用户口令及其属性-d:删除用户的口令l:暂时锁定指定的用户帐号-u:结束指定用户帐号的锁定-s:显示指定用户帐号的状态
例:
passwd zuzhiang:给zuzhiang用户设置密码
-
sudo passwd root:然后输入两遍密码,即可更新root用户的密码
(3) 修改用户
usermod [-degsul] 用户名:修改用户属性(超级用户可用)-d 目录名 用户名:指定用户登入时的主目录-e 日期 用户名:帐号终止日期-g 群组 用户名:指定账户所属的用户组-s shell 用户名:指定账户登录后所使用的shell-u uid 用户名:指定用户ID-l 新用户名 旧用户名:修改用户名
(4) 删除用户
-
userdel [-rf] 用户名:删除指定的用户帐号(超级用户可用)-
无参数:删除用户,但保留家目录 -
-r:不仅删除帐号,还删除所属文件 -
-f:删除用户登入目录及目录中的所有文件
-
(5) 查看用户信息
id 用户名:查看用户的UID、GID和用户所属组的信息,默认为当前用户whoami:查看当前用户名w:查看当前登录系统用户和详细信息who:查看当前有哪些用户在线
(6) 切换用户
su 用户名:切换用户身份,权限高的用户可切换为权限低的用户,而不输入口令,反之需要。使用exit可以返回原来的用户
3. 用户组操作
(1) 增加组
groupadd [-go] 用户组名:新建组群(超级用户可用)-g:指定用户组ID-o:允许组ID不唯一
(2) 修改组
groupmod [-gno] 用户组名:修改指定用户组的属性(超级用户可用)-g:指定新的用户组ID-n:指定新的用户组名字-o:允许组ID不唯一
(3) 删除组
groupdel 用户组名:删除指定的用户组(超级用户可用)
4. 权限操作
(1) 修改文件访问权限
-
chmod 对象 操作符 权限:修改文件的访问权限对象:
u:文件所有者g:同组用户o:其他用户
操作符:
+:增加-:删除=:赋予
权限:
r:读w:写x:执行s:设置用户ID
例:
chmod g-w file:取消同组用户对file文件的写入权限chmod 755 pict:将pict目录的访问权限设置为775
(2) 修改文件所有者
chown [-cR] 用户或用户组 文件名:将指定文件的拥有者改为指定的用户或用户组-c:显示更改的部分的信息-R:处理指定目录以及其子目录下的所有文件
(3) 修改文件所属用户组
-
chgrp [-cR] 组名 文件名:改变文件的所属用户组-c:显示更改的部分的信息-R:处理指定目录以及其子目录下的所有文件
5. 用户/口令/组的配置文件
(1) 用户配置文件
位于/etc/passwd
记录用户的各种信息,每行的格式为用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
(2) 口令配置文件
位于/etc/shadow
保存密码和登录信息,文件内容是加密的。每行的格式为``登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志`
(3) 组配置文件
位于/etc/group
记录Linux包含的组信息,每行的格式为`组名:口令:组标识号:组内用户列表
五、运行级别
1. 运行级别介绍
0:关机1:单用户(用于找回密码)2:多用户状态无网络服务3:多用户状态有网络服务4:系统未使用,保留给用户5:图形界面6:系统重启
常用的运行级别是3和5,要修改默认的运行级别可以修改/etc/inittab文件
2. 切换运行级别
init [012356]切换到指定运行级别,注意没有4
3. 单用户状态找回密码
可以通过init 1切换到单用户状态,此时不需要密码即可登录,可以用于找回密码
具体操作
开机 -> 在引导时输入回车 -> 看到新界面,输入e -> 看到新界面,选择第二行(编辑kernel),输入e -> 输入空格 1 -> 输入回车键 -> 输入b -> 进入单用户模式 -> 使用passwd命令来修改root密码
只有在能接触到电脑主机时才能执行这个操作,所以是安全的
六、帮助指令
1. conmand命令
command --help:查看指令的帮助信息,即怎样使用
2. man命令
-
man 命令或配置文件:查看命令的帮助信息快捷键:
Space:往下翻页q:退出/:后加字符串,可以向下搜索该字符串?:向上搜索字符串n:搜索下一个
3. help命令
help 命令:查看命令的帮助信息
七、历史命令
1. 查看历史指令
-
history [n]:查看历史命令n:数字,列出最近的n条命令
-
history [-c]:将所有历史命令全部清除 -
history [-raw] histfiles:查看历史命令-a:将历史命令额外保存在histfiles文件中-r:将histfiles文件中的内容读入到history记忆中-w:将目前的history记忆内容写入到histfiles中
2. 运行历史指令
!number执行history记忆中的第number个命令!command向前搜索以command为开头的指令并执行!!执行上一个命令
八、目录/文件操作命令
1. 更改目录
cd:变换目录(change directory),cd后不加任何目录表示回到家目录
2. 显示目录/文件
(1) pwd命令
pwd [-P]:显示当前目录(print working directory)-p:显示确实的路径,而不是用链接路径
(2) ls命令
ls [-ahl] 文件名或目录名:显示文件或目录信息-a:显示所有文件(包括以.开头的隐藏文件)-h:将文件的容量以人类易读的方式显示-l:长数据串行出,包含文件的属性与权限等数据
3. 创建目录
-
mkdir [-mp] 目录名:创建一个新的目录-m:配置文件的权限-p:直接将所需的目录(包括上层目录)递归的建立起来
例
mkdir -m 777
4. 复制目录/文件
cp [-adfirsu] 源文件名 目标文件名:复制文件或目录-a:相当于`-dr --preserve=all``- ``-d`:若源文件为链接文件的属性,则复制链接文件属性而非文件本身
-f:强制的意思-i:若目标文件已经存在,则在覆盖时会先进行询问-r:递归持续复制,用于目录的复制行为-s:复制为符号链接文件,即快捷方式文件-u:当源文件比目标文件新或目标文件不存在时才进行更新或复制--preserve=all:连同文件的各种属性也复制过去
5. 移动目录/文件
-
mv [-fiu] 源文件名或目录名 目标文件名或目录名:移动文件或目录,或更名-f:强制覆盖目标文件-i:覆盖前先询问-u:若源文件比目标文件新时才更新
例:
mv 旧文件名 新文件名:实际是更名的效果mv 文件名1 文件名2 目录名:当有多个文件或目录名是,最后一个一定是目录,其作用是将所有文件都移动到目录中rm *:删除当前目录下的所有文件rm *.txt:删除当前目录下的所有文本文档
6. 删除目录/文件
(1) rmdir命令
-
rmdir [-p] 目录名:删除空目录-p:连同上层的空目录一起删除,若目录中有内容则无法删除
例:
rmdir -p a/b/c
(2) rm命令
-
rm [-fir] 文件名或目录名:移除文件或目录-f:强制执行,可以忽略不存在的文件,不出现警告信息-i:互动模式,删除前会先询问-r:递归删除
例:
rm -i bashrc*:删除以bashrc开头的文件或目录,其中*表示0到无穷任意多个字符rm ./-aaa:删除名为-aaa的文件,不能直接运行rm -aaa,因为-会被当作选项
7. ln命令
ln [-sf] 源文件 目标文件:制作链接档-s:软链接(符号链接),类似于Windows系统下的快捷方式,默认是硬连接-f:强制执行,若目标文件存在则将其删除后再建立
九、文件属性操作命令
1. 修改文件时间
-
touch [-am] 文件名:修改文件或目录的时间属性-a:仅修改access time-m:仅修改modification time
例:
touch hello.txt:创建名为hello.txt的新文件
2. 查看/设置文件权限
-
umask [-S]:查看或指定当前用户在建立文件或目录时的权限默认值。不加参数:显示四个数字,分别表示root用户、当前用户、用户组和其他用户的权限,其中读权限r为4分,写权限w为2分,执行权限x为1分-S:以人能读懂的方式显示当前用户、用户组和其他用户的权限,如drwxr-xr-x中的第一个d表示为目录,若为-表示为普通文件,当没有相应的权限时用-占位
例:
umask 022:指定当前用户、用户组和其他用户的权限
3. 配置文件隐藏属性
-
chattr [+-=][ai] 文件名或目录名:配置文件隐藏属性+:增加一个特殊参数-:删除一个特殊参数=:设定一定,且仅有后面的参数-a:设定文件只能增加数据,不能删除和修改-i:设定文件不能删除、改名或增加数据等。-ai只有root用户才能设定。
4. 显示文件隐藏属性
-
lsattr [-adR] 文件名或目录名:显示文件隐藏属性-a:将隐藏文件的属性也显示出来-d:如果是目录则只列出目录本身的属性而非目录内文件的属性-R:连同子目录的数据也一并列出来
十、文本编辑命令
1. 输出内容到控制台
-
echo 输出内容:输出内容到控制台例:
echo $PATH:将环境变量的路径信息输出到控制台
2. 以只读方式显示文件内容
(1) cat命令
-
cat [-nv] 文件名:由第一行开始显示文件内容,以只读的方式打开,cat是concatenate(连续)的缩写-n:打印出行号,空白行也有行号-v:列出一些看不出来的特殊字符
例:
cat > 文件名:创建文件并在下一行写入文本内容,输入Ctrl+C表示输入结束cat >> 文件名:在文件中追加内容
(2) tac命令
tac 文件名:从最后一行开始显示(是cat倒着写)
3. 显示时输出行号
nl [-bnw] 文件名:显示的时候输出行号,cat和nl都不可以用PageDown或PageUp进行翻页-b a:无论是否为空行,都显示行号-n ln:在屏幕的最左方显示行号
4. 显示开头/结尾内容
(1) head命令
head [-n number] 文件名:从头开始显示指定行数的文件内容
(2) tail命令
-
tail [-f] [-n number] 文件名:从末尾开始显示指定行数的文件内容-f:持续侦测文件内容,当文件正在写入时使用
例:
tail -n +100 /etc/man_db.conf:显示第100行往后的内容
5. 按页显示文件内容
(1) more命令
-
more 文件名:以全屏幕的方式按页显示文本文件的内容快捷键:
Space:往下翻页b:往上翻页Enter:往下翻一行/字符串:在当前显示内容中往下搜索字符串:f:显示文件名和当前显示的行数q:退出
(2) less命令
-
less 文件名:分屏查看文件内容,比more指令更强大,随时加载要显示的内容,而非一次全加载,对显示大型文件具有较高的效率快捷键:
-
Space:往下翻页 -
b:往上翻页 -
Enter:往下翻一行 -
/字符串:在当前显示内容中往下搜索字符串 -
:f:显示文件名和当前显示的行数 -
q:退出 -
PageDown:往下翻页 -
PageUp]:往上翻页 -
?字符串:向上搜索字符串 -
n:重复前一个搜索 -
g:跑到文件的第一行 -
Shift+g:跑到文件的最后一行
-
6. 以指定字码显示文件内容
od [-t TYPE] 文件名: 读取文件的内容,并将其内容以默认字码呈现出来-t a:用默认字符来输出-t c:用ASCII字符来输出-t d:用十进制来输出-t f:用浮点数来输出-t o:用八进制来输出-t x:用十六进制来输出
7. 输出重定向
输出重定向即将本来要输出到屏幕的内容输出到其他位置
-
命令 > 文件名:覆盖写入 -
命令 >> 文件名:追加例:
ls -l > a.txt:将列表内容写入到a.txt中,会自动创建a.txt文件echo 内容 >> 文件名:向文件里追加内容,若文件不存在则新建1>和1>>是标准输出的重定向,即将指令正常运行时的信息重定向输出2>和2>>是标准错误输出的重定向,即将指令运行错误时的信息重定向输出&>可以将正确和错误信息输出到同一个文件中,并且顺序不会乱
8. 输入重定向
输入重定向即将本来要从键盘输入的内容改为由其他方式(如文件)输入
命令 < 文件名: 指定文件作为命令的输入设备命令 << 文件名:由文件输入之后必须通过键盘输入EOF之后才结束
9. 文本内容按行排序
sort [-fbnru] 文件名: 将文本文件内容加以排序,以行为单位-f:忽略大小写-b:忽略最前面的空格-n:以纯数字(而不是字符)的方式排序-r:反向排序-u:对于相同的数据只显示一行
10. 去除重复的行
uniq [-ic] 文件名:对文本文件中的行去重,通常与sort命令配合-i:忽略大小写-c:在第一列显示重复次数
11. 统计文件信息
wc [-lwm] 文件名:统计文件信息-l:仅列出行数-w:仅列出多少字-m:多少字符
十一、时间日期命令
1. 查看时间日期
date:显示日期和时间date +%Y:显示当前年date +%m:显示当前月date +%d:显示当前日date "+%Y-%m-%d %H:%m:%s":显示年当前月日时分秒,其中-、Space、:都是连接符
2. 设置时间日期
-
date -s 字符串时间:设置时间例:
date -s "2018-10-10 11:22:33"
3. 查看日历
cal [month] [year]:显示日历
十二、搜索查找命令
1. 寻找可执行文件/命令的路径
which [-a] command:寻找可执行文件/命令的路径-a:将所有PATH目录中可以找到的指令均列出,默认是只列出第一个
2. 在指定目录查找文件
whereis 文件或目录名:在一些特定的目录中寻找文件
3. 快速定位文件路径
locate [-i] 关键词:快速定位文件路径,利用数据库来寻找文件,数据库一般是一天更新一次,可以用updatedb命令来更新数据库-i忽略大小写
4. 在硬盘查找文件
-
find [PATH] [option] [action]:在硬盘上寻找文件-
path:搜索的路径名,可以带有通配符 -
option:-name filename:指定文件名-size [+-]SIZE:搜索比SIZE大还是小的文件,c表示byte,k表示KB,m表示MB-type TYPE:指定文件类型,f是一般文件,d是目录,l是连接档。-user username:查找属于某个用户的文件
-
action:有执行和打印等
例:
find / -size 20M:查找整个Linux系统下大于20M的文件find / -size +1M -exec ls -l {} \;:从-exec到\;为find命令额外执行的动作,{}表示由find找到的内容,\;是结束的标志。即先找到size小于1M的文件,然后用ls命令列出来
-
5. 查找符合条件的字符串
-
grep [-acinv] [--color=auto] '搜索字符串' 文件名:分析一行讯息,若有所需信息则取出来,通常利用管道|和其他命令配合使用-a:将二进制文件以文本文件的方式搜索-c:计算找到‘搜索字符串’的次数-i:忽略大小写-n:顺便输出行号-v:反向选择,即显示没有出现’搜索字符串’的那一行
例:
cat hello.txt | grep -n yes:在hello.txt中区分大小写的查找yes所出现的所有行号
十三、压缩和解压命令
-
压缩文件的拓展名大多是
*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz,*.zip等,其中.tar的文件只是打包过,没有经过压缩 -
Linux 中的文件实际上没有扩展名,不过仍常根据文件的拓展名来区分文件的类型,如
.sh是shell的脚本文件,.tar, .tar.gz, .zip, .tgz等为压缩文件
1. 压缩解压.gz文件
(1) gzip命令
gzip [-dtv#] 文件名:压缩/解压缩命令无参数:压缩成扩展名为.gz的文件-d:解压,解压后会删除源文件,可对扩展名为.Z, .zip, .gz的文件进行解压-t:检验压缩文件的一致性,检验文件是否出错-v:显示压缩比等信息(压缩时用)#:为数字的意思,代表压缩等级,-1最快但压缩比大,-9最慢但压缩比小
(2) gunzip命令
gunzip [-kqtv] 文件名:解压被gzip压缩过的文件-k:保留原始压缩文件-q:不显示警告信息-t:测试压缩文件是否正确无误-v:显示指令执行过程
2. 压缩解压.bz文件
bzip2 [-dkv#] 文件名:压缩时生成的文件后缀名为.bz2,该命令的压缩率比gzip高,但速度慢些-k:保留源文件而不删除-dv#:和gzip相同
3. 压缩解压.xz文件
xz [-dlk#] 文件名:压缩时生成的文件后缀名为.xz,压缩率更高-l:列出压缩文件的相关信息,如压缩前后的大小和压缩率等-dk#和bzip2相同
以上3个指令只能对单一文件进行压缩,如果是多个文件则需要先进行打包,再进行压缩
4. 读取压缩后的文本文件
zcat/zmore/zless:用来读取纯文本文档被压缩后的压缩文件
5. 压缩解压.zip文件
(1) zip命令
zip [-r] [压缩文件名] 文件或目录名:压缩文件,后缀名为.zip-r:递归压缩,即压缩目录
(2) unzip命令
unzip [-d 目录名] 解压文件名:将压缩文件解压到指定路径
6. 打包并压缩/解压命令
tar命令中参数可以分为3组,一是共有的-vf,二是-z, -j, -J,用于指定压缩/解压所使用的方式,不能同时出现在同一指令中,三是-c, -t, -x,用于指定指令的作用(压缩、查看、解压),不能同时出现在同一指令中。
-
tar [-z|-j|-J] [-c] [-v] [-f 文件名] 要打包或压缩的文件名列表:打包或压缩 -
tar [-z|-j|-J] [-t] [-v] [-f 文件名]:查看打包文件包括哪些文件 -
tar [-z|-j|-J] [-x] [-v] [-f 文件名] [-C 目录名]:解打包或解压缩,C为大写-z:用gzip进行压缩/解压缩,推荐使用-j:用bzip2进行压缩/解压缩-J:用xz进行压缩/解压缩
-c:打包或压缩-t:查看打包文件包括哪些文件,不常用-x:解压缩
-v:在压缩/解压缩过程中将正在处理的文件名显示出来-f 文件名:指定要处理的文件
-C 目录:指定要解压到的目录
例:
tar -jxv -f filename.tar.bz2 -C 目录名:用bzip2将该压缩文件解压到指定目录中tar -zcv -f /root/system.tar.gz --exclude=file1 --exclude=file2:不打包目录中的某几个文件tar -zxvf filename.tar.gz:将.tar.gz格式的文件解压到当前目录
如果不加
[-z|-j|-J]则是进行打包,此时文件名要指定为*.tar,若添加[-z|-j|-J]进行压缩时文件名要指定为\*.tar.gz|\*.tar.bz2|\*.tar.xz,通过tar命令打包的文件被称为tarfile,通过tar命令压缩的文件被称为tarball
十四、CROND任务调度
1. 任务调度
指系统在某个时间执行的特定的命令或程序,如每周进行一次病毒扫描等。如果是简单任务,可以直接在crontab中加入任务即可,反之需要写脚本(shell编程)
2. crontab命令
crontab [-elr]:-e:编辑crontab定时任务-l:查询crontab任务-r:删除当前的crontab任务
3. 实例
- 执行
crontab -e命令 - 在新界面输入
*/1****ls -l /etc >> /tmp/to.txt,并保存退出 - 在每分钟开始的时候都会自动调用
ls -l /etc >> /tmp/to.txt命令
4. 时间格式
时间格式为:f1 f2 f3 f4 f5 program
f1表示分钟,范围0-59f2表示小时,范围0-23f3表示一个月中的第几天,范围1-31f4表示月份,范围1-12f5表示一个星期中的第几天,范围0-7(0和7都表示周日)program表示要执行的程序
5. 特殊符号
*:表示任何时间,如f1为*时表示每分钟都执行一次,:表示不连续的时间,如0 8,12,16 ***表示每天的8点0分,12点0分,16点0分都执行一次-:表示连续的时间范围,如0 5 ** 1-6表示周一到周六的5点0分执行*/n:表示每隔多久执行一次,如*/10 ****表示每隔10分钟执行一次
十五、Linux磁盘分区、挂载
1. 原理介绍
-
Linux 无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分
-
Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
2. 硬盘说明
-
当前多采用SCSI硬盘,驱动器标识符为
sdx~,其中sd为分区所在设备的类型,即SCSI硬盘。x为盘号,a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘。~代表分区,前四个分区用数字 1 到 4 表示,是主分区或扩展分区,从 5 开始是逻辑分区。例:
sda3表示为第一个 SCSI 硬盘上的第三个主分区或扩展分区
-
lsblk -f:查看系统分区和挂载情况 -
lsblk:查看系统分区情况,包括分区大小,看不到已使用的情况
3. 挂载硬盘
将新硬盘挂载到/home/newdisk目录下
-
添加硬盘
-
分区:使用
fdisk /dev/sdb对/dev/sdb分区出sdb1- 输入
m:显示命令列表 - 输入
n:新增分区,此时会显示提示信息 - 输入
p:表示选择主分区,然后输入1,表示主分区的第一块,此后两次回车表示默认 - 输入
d:删除分区(分区时不执行) - 输入
w:写入并退出
- 输入
-
格式化:
mkfs -t ext4 /dev/sdb1 -
挂载:先创建
/home/newdisk目录,mount /dev/sdb1 /home/newdisk,此为临时挂载,重启后失效 -
解挂:使用
umount /dev/sdb1或umount /home/newdisk解挂,不能/home/newdisk目录下执行命令 -
永久挂载:使用
vim /etc/fstab命令编辑/etc/fstab文件,增加一行/dev/sdb1 /home/newdisk etx4 defaults 0 0,保存退出,执行mount -a命令
4. 磁盘情况查询
(1) 查看系统整体磁盘使用情况
-
df [-alh]:查看系统整体磁盘使用情况-a:列出所有的文件系统-l:-h:自动以KB、MB、GB等合适的格式显示默认以KB为单位显示
例:
df -lh:查看各个分区使用情况
(2) 查看指定目录的磁盘使用情况
-
du [-acsh] --max-depth=1 [文件或目录名]:查看指定目录的磁盘使用情况-ah:如df命令-c:列出一级子目录明细的同时,增加汇总值-s:指定目录占用大小汇总--max-depth=1:子目录深度
例:
du -sh *:查看当前目录下每个文件、文件夹的大小sudo du -sh /home/*:查看每个用户占用的磁盘大小
(3) 文件/文件夹个数统计&树状显示目录结构
ls -l /home | grep "^-" wc -l:统计/home下文件的个数ls -l /home | grep "^d" wc -l:统计/home下文件夹的个数ls -lr /home | grep "^-" wc -l:统计/home及其子目录下文件的个数tree:以树状显示目录结构,需要先apt-get tree
十六、网络配置
1. 自动获取IP
-
vi /etc/network/interfaces:编辑网络端口配置文件 -
用以下两行替换跟
etc0相关的行,etc0是ifconfig命令显示的网卡名称auto eth0 iface eth0 inet dhcp -
sudo /etc/init.d/networking restart:重启网络让设置生效
2. 使用固定IP
-
vi /etc/network/interfaces:编辑网络端口配置文件 -
用以下两行替换跟
etc0相关的行,etc0是ifconfig命令显示的网卡名称auto eth0 iface eth0 inet static address 192.168.1.102 # 根据需求设置自己的IP netmask 255.255.255.0 # 子网掩码 gateway 192.168.1.1 # 网关 dns-nameserver 8.8.8.8 -
sudo /etc/init.d/networking restart:重启网络让设置生效
3. 网络相关命令
(1) 显示或设置网络设备
ifconfig: 显示或设置网络设备
(2) 检查网络是否连通
ping IP地址/网址:检查网络是否连通
(3) 查看系统网络情况
netstat [-anp]:查看系统网络情况-an:按一定顺序排列输出-p:显示哪个进程在调用
十七、进程管理
1. 基本介绍
-
Linux中每个指定的程序(代码)都称为一个进程,每个进程有一个ID号
-
每个进程都有一个父进程,父进程可以创建多个子进程
-
每个进程都有两种存在方式:前台和后台
-
一般的系统服务都是以后台进程的方式存在,且会常驻系统中,直到关机才结束
2. 进程相关命令
(1) 查看进程状态
-
ps [-aux]:(process state)查看进程状态,结果并不动态连续-
-a:显示所有用户的所有进程 -
-u:按用户名启动时间的顺序来显示进程 -
-x:显示后台进程运行的参数
例:
ps -aux | more:以分页的形式查看所有进程ps -aux | grep tomcat:只查看tomcat进程的情况ps -ef:以全格式显示当前所有的进程,通过PPID字段查看进程的父进程
-
(2) 以树状形式显示进程状态
pstree [-pu]:以树状形式来查看进程信息-p:显示进程PID-u:显示进程所属用户
(3) 动态查看进程状态
-
top [-dinpS]:动态监控进程的情况,即会更新进程的情况-d 秒数:设置两次刷新时间的间隔-i:不显示空闲进程或僵尸进程-n 次数:设置更新次数,显示完后退出。-p PID:通过进程PID指定仅监控某个进程的状态-S:累计模式,输出每个进程的总CPU时间
交互操作:
-P:以CPU使用频率排序,默认选项-N:以PID排序-M:以内存的使用率排序q:退出top界面u 回车 用户名:监视特定用户k 回车 PID:终止指定的进程
例:
top:一般直接用top命令即可
(4) 按PID杀死进程
kill [选项] 进程号:杀死进程-9:强制杀死进程
(5) 按进程名杀死进程
killall 进程名称:杀死多个同名进程,支持通配符
(6) 前台运行
fg 任务号:恢复到前台运行
(7) 后台运行
bg 任务号:恢复到后台运行
(8) 查看被挂起的进程
jobs:查看被挂起的进程
3. 服务管理
(1) 系统该服务操作
systemctl 服务名 [start|stop|restart|reload|status]:系统服务操作
(2) 查看端口情况
telnet 服务器IP 端口号:查看服务器某个端口是否在监听,并且可以访问
(3) 查看所有服务
-
setup:在图形界面查看 -
ls -l /etc/init.d:在/etc/init.d文件中查看
(4) 设置服务在各运行级别的自启动情况
-
chkconfig --list | grep 进程名:给所有服务的各个运行级别设置自启动/关闭 -
chkconfig 服务名 --list:查看指定服务的各个运行级别设置自启动/关闭 -
chkconfig --level 5 服务名 on/off:将指定服务在5这个运行级别设置为自启动/关闭,不设置level时,在所有运行级别都生效
用chkconfig重新设置服务自启动或关闭后需要重启机器才能生效
十八、shell编程
1. shell简介
-
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序
-
以
#!/bin/bash开头 -
脚本需要有可执行权限
-
注释有两种
- 单行注释:
# - 多行注释:
:<<!和!
- 单行注释:
-
Linux下默认的shell是bash
-
如果一行的内容太多,可以用
\Enter来延伸至下一行 -
用
exit 0表示退出脚本程序
例:输出hello world
#!/bin/bash
echo "hello world"
2. shell中的特殊字符
#:注释符号\:转义字符|:管线,分割两个管线命令的界定;:连续性命令的节点$:取用变量的前导符&:工作控制,将指令变为后台运行,如cp -r /usr/* test &将/usr目录下的所有文件和目录复制到test目录下,该过程在后台完成!:逻辑非():中间为子shell的起始和终止{}:中间为命令区块的组合。
3. 指令之间的关系
-
cmd;cmd:不考虑指令相关性的连续指令下达 -
cmd1 && cmd2:若cmd1正确执行完毕,则继续执行cmd2,反之不执行cmd2 -
cmd1 || cmd2:若cmd1正确执行完毕,则不执行cmd2,反之执行cmd2 -
管线命令
|和连续下达命令;是不同的,它可以让第一个命令的正确输出信息作为第二个命令的输入,有多个命令时以此类推。不是所有的指令都可以当作后面的指令,它必须要有接收标准输入的能力 -
在管线中当某些指令需要用到文件名来进行处理时,该标准输入和标准输出可以利用
-来代替
4. 脚本的执行方式
(1) 方式一
chmod 755 文件名:赋予.sh文件执行权限- 执行脚本
- 通过文件的绝对路径执行,直接输入文件的绝对路径即可
- 通过文件的相对路径执行,直接输入文件的相对路径即可
(2) 方式二
sh 文件名:此时不需要有执行权限,不推荐bash 文件名:也可以
5. shell的变量
(1) 命名要求
-
变量名可以由字母、数组和下划线组成,但不能以数字开头
-
等号两侧不能有空格
-
变量名称一般全大写
(2) 定义变量
shell中的变量分为系统变量和用户自定义变量
系统变量:$HOME、$PWD、$SHELL、$USER等
定义变量:变量名=变量值,注意中间无空格,否则会报错
例:输出系统变量
#!/bin/bash
echo "path=$PATH"
echo "user=$USER"
在命令行中输入set,显示当前shell中的所有变量
(3) 撤销变量和静态变量
-
撤销变量:
unset 变量名 -
声明静态变量:
readonly 变量名,静态变量不能unset
例:变量/静态变量的声明和撤销
#!/bin/bash
A=100
echo "A=$A"
unset A
echo "A=$A"
readonly B=99 # 定义静态变量
echo "B=$B"
unset # 会报错,但不影响后面代码的执行
echo "B=$B"
(4) 将命令的返回值赋给变量
-
变量名=`命令`:反引号,运行里面的命令,并把结果返回给变量
-
变量名=$(命令):将命令结果返回给变量
例:
#!/bin/bash
RESULT=`ls -l /home`
echo $RESULT
MY_DATE=$(date)
echo "date=$MY_DATE"
(5) 设置环境变量
-
export 变量名=变量值:将shell变量输出为环境变量 -
source 配置文件:让修改后的配置文件立即生效 -
echo $变量名:在控制台查询环境变量的值 -
环境变量配置文件有两种,一是系统公共的
/etc/profile,不建议修改,二是每个用户自己的~/.bashrc文件
例:在环境变量配置文件中定义TOMCAT_HOME变量
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME
-
source ~/.bashrc:让环境变量立即生效 -
echo $TOMCAT_HOME:在终端查看TOMCAT_HOME的值 -
在另一个shell文件中使用TOMCAT_HOME变量
#!/bin/bash
echo "tomcat_home=$TOMCAT_HOME"
(6) 位置参数变量
当执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
$n:n为数字,$0代表命令本身,$1-$9代表第1-9个参数,10及以上的参数需要用大括号包裹,如${10}$*:代表命令行中的所有参数,看作一个整体$@:代表命令行中的所有参数,把每个参数看作不同的个体$#:代表命令行中所有参数的个数
例:
#!/bin/bash
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
在中段运行filiename.sh 30 50
(7) 预定义变量
$$:当前进程的PID$!:后台运行的最后一个进程的PID$?:最后一次执行的命令的返回状态,如果值为0,表示正确运行,反之不正确
#!/bin/bash
echo "当前的进程号:$$"
# 后台的方式运行myShell.sh
./myShell.sh &
echo "最后的进程的进程号:$!"
echo "执行的值:$?"
6. 运算符
(1) 基本语法
$((运算式)$[运算式]:推荐使用expr m + n:expr运算符之间要有空格,乘法用\*表示
例:计算 (2+3) * 4的值
#!/bin/bash
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"
(2) 条件判断
[ condition ]:判断语句,非空时返回true,注意condition前后要有空格test:test命令也可以用作条件判断,如判断文件权限、文件类型、字符串和数字比较等,不推荐使用
(3) 常用判断条件
字符串比较
=:比较字符串是否相等
两个整数的比较
-lt:小于-le:小于等于-eq:等于-gt:大于-ge:大于等于-ne:不等于
文件权限判断
-r:有读的权限-w:有写的权限-x:有执行的权限
文件类型判断
-f:文件存在并且是一个常规文件-e:文件存在-d:文件存在并且是一个目录
例:
#!/bin/bash
if [ "ok"="ok" ]
then
echo "equal"
fi
if [ 23 -gt 22 ]
then
echo "大于"
fi
if [ -e /root/aaa.txt ]
then
echo "存在"
fi
7. 流程控制
(1) if判断
# 形式1,不推荐
if [条件判断式];then #在条件判断时,$$表示and,||表示or
程序
elif [条件判断式];then
程序
else
程序
fi #结束if之意
# 形式2
if [条件判断式]
then
程序
elif [条件判断式]
then
程序
else
程序
fi
例:如果输入的参数>=60,则输出“几个了”,反之输出“不及格”
#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格了"
else
echo "不及格"
fi
(2) case语句
case $变量名 in
值1)
程序
;;
值2)
程序
;;
*)
变量内容为其他时执行的程序段
exit 1
;;
esac
例:当命令行参数为1时输出周一,为2时输出周二,反之输出other
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
(3) for循环
for 变量 in 值1 值2 值3...
do
程序
done
例:打印命令行输入的参数
#!/bin/bash
for i in "$*"
do
echo "the num is $i"
done
echo "============================"
for i in "$@"
do
echo "the num is $i"
done
for ((初始值;循环控制条件;变量变化))
do
程序
done
例:从1加到100的值输出
#!/bin/bash
SUM=0-
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
(4) while循环
while [条件判断式]
do
程序
done
例:从命令行输入一个数n,统计从1+2+…+n的值是多少
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
8. 读取控制台输入
read [-pt] 变量名:读取控制台输入值到变量名-p:指定读取值时的提示符-t:指定读取值时等待的时间(秒)
例:读取控制台输入的num值,在10秒内输入
#!/bin/bash
read -t 10 -p "请输入一个数字num:" NUM
echo "你输入的值是:$NUM"
9. 函数
(1) 系统函数
-
basename 路径名 [后缀名]:获取文件名,当有后缀名时会去除后缀名例:
basename /etc/sysconfig/network:取最后的文件名,即network
-
dirname 路径名:返回文件的路径名(不包括文件名的部分)例:
dirname /etc/sysconfig/network:取目录名,即/etc/sysconfig
(2) 自定义函数
function 函数名(){
程序
}
例:计算输入的两个参数的和
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "和是:$SUM"
}
read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2
# 调用getSum,传参时不需要用形参去接收
getSum $n1 $n2
10. shell编程综合案例
(1) 需求分析:
- 每天凌晨 2:10 备份 数据库 atguiguDB 到
/data/backup/db - 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成
.tar.gz的形式,比如:2018-03-12_230201.tar.gz - 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除
(2) 思路
首先写一个备份数据库的shell脚本,然后用crond定期执行
(3) 代码实现
#!/bin/bash
# 备份的路径
BACHUP=/data/backup/db
# 当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
echo "=============开始备份============"
echo "备份的路径是:$BACHUP/$DATETIME.tar.gz"
# 主机
HOST=localhost
# 用户名
DB_USER=root
# 密码
DB_PWD=root
# 数据库
DATABASE=atguiguDB
# 如果备份的路径文件夹不存在则创建,反之直接使用
[ ! -d "$BACHUP/$DATETIME" ] && mkdir -p "$BACHUP/$DATETIME"
# 执行MySQL自带的备份数据库的命令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | grep > $BACKUP/$DATETIME/$DATETIME.sql.gz
# 打包备份文件
cd $BACKUP
tar -zcvf $BATETIME.tar.gz $DATETIME
# 删除临时目录
rm -rf $BACKUP/$DATETIME
# 删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=============备份成功============"
十九、其他常用指令
1. 退出命令行
exit:在命令行里输入可以实现当前用户的注销(退出当前命令行,非关机)
2. 查看默认快捷键
man readline:查看bash中的默认快捷键
3. 简易计算器
-
bc:简单好用的计算器+ - * / ^ %:支持加、减、乘、除、指数、取余等,默认输出只支持整数;- 输入
quit退出。
4. 设置指令别名
alias lm='ls -al':命令别名设定功能,将ls -al这个指令设定一个别名lm不加参数:查看所有有别名的命令unalias lm:取消命令的别名。
5. C/C++代码编译运行
-
gcc 文件名:对源代码进行预处理、编译、汇编和链接,默认输出为:可执行文件"a.out",编译后的文件"sourcename.o",汇编文件是"sourcename.s",预处理后的C源代码送往标准输出 -
gcc 文件名 -o 输出文件名:指定输出文件的文件名 -
对于多个文件联合执行的,除.h文件不需要编译外,其他文件都需要编译:
gcc -c example.cgcc -c add.cgcc -c modify.cgcc -c delete.c
编译后生成目标文件
example.o, add.o, modify.o, delete.ogcc example.o add.o modify.o delete.o -o example
链接以上四个文件,生成可执行文件
example -
gcc 文件名 -l 路径名:如果头文件不在gcc的搜索路径中,可以用该选项指定额外搜索路径,如gcc helloworld.c -l /usr/include -o helloworld将该目录加入到头文件的搜索路径中
6. 从指定URL下载
-
wget [-bc] url:从指定URL下载-b:在后台下载-c:断点续传
进入后台下载的任务,可以先找到其下载日志文件,然后用
tail -f wget-log或cat wget-log查看下载情
7. 查看显卡使用情况
nvidia-smi:查看显卡使用情况watch -n 1 nvidia-smi:动态查看显卡使用情况,每一秒刷新一次
8. 查看ubuntu/CUDA版本信息
lsb_release -a:查看ubuntu版本信息nvcc --version:查看CUDA版本cat /usr/local/cuda/version.txt:查看CUDA版本
9. 离线跑代码
sudo apt-get install screen:安装screenscreen -S screen名:创建一个screen,注意S是大写- 在创建的screen界面正常运行程序即可,关闭命令行窗口后会自动在后台运行
screen -ls:查看所有的screenscreen -r 编号.screen名:连接到screen,当只有一个screen时,可以使用screen -r连接screen -Dr 编号.screen名:当意外退出时,用该命令重新连接到screenkill -9 screen编号:彻底关闭screen,或在screen界面按Ctrl+C- 在screen界面中,按
Ctrl+A然后按Esc键可以用键盘上的方向键和PageUp/PageDown键进行翻页,按Ctrl+C退出。
10. 查看CPU/显卡/内存/硬盘信息
cat /proc/cpuinfo:查看CPU型号lspci | grep VGA:查看GPU型号free -m:查看内存du -h --max-length=0 your_dir:查看目录大小
11. 安装包管理工具
apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt
命令可用于软件包的安装、删除、清理等,类似于 Windows中的软件管理工具
sudo apt-get update:更新源sudo apt-get install package:安装包sudo apt-get remove package:删除包sudo apt-get upgrade:更新已经安装的包
二十、其他不常用指令
info:和man指令的作用差不多,它把文件数据拆成一个个独立页面(节点),并用超链接来跳转到不同的页面,每个节点前有*符号U:跳到上一个节点处N:跳到下一个节点处↑|↓:移动到某个节点Enter:进入节点Tab:在节点之间快速移动q:退出info page
- linux中的变量的设定
name="my name is $NAME",如果变量内容有空格符,需要用单引号或双引号将其括起来,在双引号中$符后面的被当做是变量名,单引号中的特殊字符被当作纯文本。 - 若为变量扩增内容时,可使用:
PATH="$PATH":/home/bin或PATH=${PATH}:/home/bin或PATH=$PATH:/home/bin env:查看所有的环境变量declare [-aixr] 变量名:宣告变量的类型-a:将后面的变量定义为数组类型-i:将后面的变量定义为整数类型-x:将后面的变量变成环境变量-r:将后面的变量设定为只读类型
一个变量有多个不同的内容时,内容之间由:隔开。
-
${variable#/*local/bin:}:可以删除结尾是local/bin的变量内容,并且从左往右开始删除第一个#:从最前面开始删除且只删除第一个##:把匹配到的全删除%和%%:与#和##类似,只不过是从后面开始删除
-
${variable/old/new}:用新的值取代旧的值,若为//old/new则所有符合的内容都要取代 -
new_var=${old_var-content}:如果旧变量存在则将其值赋给新变量,否则新变量的值为为content -
new_var=${old_var:content}:和前者类似,只是当旧变量为空时,新变量的值也取content -
stty [-a]:设定终端机的输入按键代表的含义,stty 是 setting tty 的缩写-a:将目前所有的syyt参数列出来。列出的内容中intr=^C中intr表示终止当前运行的程序,^表示Ctrl键,类似的kill表示删除当前指令行的所有内容,?表示退格键。stty erase ^h设置向后删除字符的快捷键为Ctrl+h
-
cut -d '分隔字符' -f fields:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出-d:后面跟分隔字符,与-f一同使用-f:依据-d后面的分隔字符将一段讯息分为数段,用-f取出第几段-c:以字符为单位取出固定字符区间,后面跟数字范围,如12-或12-20。如echo ${PATH} | cut -d ':' -f 3,5将PATH信息以字符:分隔后,取出第3,5段
-
tee [-a] 文件名:读取标准输入的数据,并将其内容输出到文件和屏幕-a以追加的方式写入到文件中
-
col [-x]:过滤控制字符-x:将Tab键转换为对等的空格键
-
join [-ti12] 文件名1 文件名2:对比两个文件,将具有相同数据的行合并-t:分隔符,默认是空格-i:忽略大小写-12:分别表示第1、2个文件要用哪个字段来分析,即用第1个文件的第几列和第2个文件的第几列相匹配
如第一个文件中有"name:root",第二文件中有"name:zuzhiang",则以“:”为分隔符,合并后的结果是"name:root:zuzhiang"
-
paste [-d] 文件名1 文件名2:将两个文件对应的两行放到同一行,中间以Tab键隔开-d:分割字符,默认是Tab键-:如果file部分写成-,表示来自标准输入的意思
-
expand [-t] 文件名:将Tab键转成空格键-t:后面接数字,表示一个Tab键由几个空格代替
-
split [-bl] 文件名 前缀:将大文件分区成为小文件-b:后面接想要分区后的文件大小,可加单位b,k,m等-l:以行数来进行分区前缀:前导符的意思,可作为分区文件的前导文字
-
xargs [-0epn] 命令:读入标准输入的数据,并以分隔符为界,将其分隔成为不同的参数,xargs后面没有接任何指令时,默认以echo来进行输出-0:可将,,\,Space等字符还原成一般字符-n:接参数的个数
例:
xargs ls -al:然后输入两个文件夹的名称,则会用ls -al命令列出两个文件夹包含的文件信息
二十一、正则表达式(未整理,暂时没用过)
正则表达式和通配符是完全不一样的东西
[:alnum:]表示英文大小写字符和数字,[:alpha:]表示任何英文大小写字符,[:blank:]表示空格键和Tab键,[:cntrl:]表示控制键,包括CR/LF/Tab/Del等,[:digit:]表示数字,[:graph:]除了空格键和Tab键之外的所有按键,[:lower:]表示小写字符,[:print:]表示任意可以被打印出来的字符,[:punct:]表示标点符号#$也是,[:upper:]表示大写字符,[:space:]表示任何会产生空白的字符,如空格键、Tab键、CR键等,[:xdigit:]表示十六进制的数字,包括0-9,a-f,A-F。
grep [-A] [-B] [--color=auto] '搜索字符串' filename,-A后面可加数组,为after的意思,除了列出该行外,后续的n行也列出来,-B后面可加数字,为befor的意思,除了列出该行外,前面的n行也列出来。
[]表示搜索字符的集合,只表示一个字符,[^]表示反向选择,^表示定位在行首,$表示定位在行尾,.任意一个字符,*任意0到无穷多个字符,{number[,number]}表示重复字符数,如o\{2\}表示两个o,o\{2,5\}表示2到5个o,o\{2,\}表示2到 无穷个o。
^word待搜索字符串在行首,word$待搜索字符串在行尾,.任意一个字符,*任意0到无穷多个字符,[list]字符集合,从中任取一个,[n1-n2]字符范围,[^list]不是该字符结合的任意一个字符,\{n,m\}。
sed [-nefr] [动作]分析标准输入,-n使用安静模式,标准输入只有在经过sed处理的那一行才会被显示在屏幕上,-e直接在指令行模式上进行sed的动作编辑,-f直接将sed的动作卸载一个文件内,-f filename可以执行filename中的sed动作,-rsed的动作支持的是延伸型正则表达式语法,-i直接修改读取的文件内容,而不是由屏幕输出。
[n1[,n2]]functionn1,n2表示进行动作的行数,function可以是a新增,c取代,d删除,i插入,p打印,s取代,通常搭配正则表达式。如sed 's/old_str/new_str/g'取代
+一个或多个字符,?0个或1个字符,|用or的方式找出数个字符串,()找出群组字符串,其中的字符串是有顺序的一个整体,()+多个重复的群组。
diff [-bBi] from-file to-file对比两个文件的差异,-b忽略一行当中仅有多个空白的差异,-B忽略空白行的差异,-i忽略大小写的不同。
cmp [-l] file1 file2以字节为单位对比两个文件,-l将所有的不同点的字节都列出来,预设是只会输出第一个不同的点。
patch -pN < path_file更新文件,-p表示取消几层目录的意思,patch -R -pN < patch_file还原文件,-R表示还原。


发布评论