本文是Linux操作系统相关的知识,参考的资料主要有《鸟哥的Linux私房菜-基础版(第四版)》的第四到第十二章,以及尚硅谷的Linux教程。笔记不可能面面俱到,但是常用的命令和知识应该都包括了,此外指令的选项有很多,笔记中也是只列出了常用的几个,较完整的介绍还请大家自行搜索。如果有什么错误还请大家指出。
一、Linux基础知识
1. Linux文件目录
(1) 文件目录
![](https://i-blog.csdnimg.cn/blog_migrate/8805533b8d852ceedb27af7dc208ac2d.jpeg)
/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
是退出,!
是强制执行
![](https://i-blog.csdnimg.cn/blog_migrate/1fbf04e4a87675b7e40f0d8876b4b304.jpeg)
(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
![](https://i-blog.csdnimg.cn/blog_migrate/c2cd00f2c6904bab51d07b9174ad615e.jpeg)
(2) 口令配置文件
位于/etc/shadow
保存密码和登录信息,文件内容是加密的。每行的格式为``登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志`
(3) 组配置文件
位于/etc/group
记录Linux包含的组信息,每行的格式为`组名:口令:组标识号:组内用户列表
![](https://i-blog.csdnimg.cn/blog_migrate/e0baca051fd6041a4442fafdb048934f.jpeg)
五、运行级别
1. 运行级别介绍
![](https://i-blog.csdnimg.cn/blog_migrate/3982d069b2bd939b6b875f25ea16b00d.jpeg)
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
:显示哪个进程在调用
![](https://i-blog.csdnimg.cn/blog_migrate/bc3fb9ee3ea6ce24fc6b8d2e766ae682.jpeg)
十七、进程管理
1. 基本介绍
-
Linux中每个指定的程序(代码)都称为一个进程,每个进程有一个ID号
-
每个进程都有一个父进程,父进程可以创建多个子进程
-
每个进程都有两种存在方式:前台和后台
-
一般的系统服务都是以后台进程的方式存在,且会常驻系统中,直到关机才结束
2. 进程相关命令
(1) 查看进程状态
![](https://i-blog.csdnimg.cn/blog_migrate/e3cb24f6fea0a3419e30f706e97aeecc.jpeg)
-
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) 动态查看进程状态
![](https://i-blog.csdnimg.cn/blog_migrate/ffb7fc492655840759494b73b40731d6.jpeg)
-
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简介
![](https://i-blog.csdnimg.cn/blog_migrate/c60061538fb33871d13cb1affae85a6a.jpeg)
-
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.c
gcc -c add.c
gcc -c modify.c
gcc -c delete.c
编译后生成目标文件
example.o, add.o, modify.o, delete.o
gcc 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动作,-r
sed的动作支持的是延伸型正则表达式语法,-i
直接修改读取的文件内容,而不是由屏幕输出。
[n1[,n2]]function
n1,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
表示还原。