Linux操作系统基础知识和常用指令学习笔记
Posted 棉花糖灬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作系统基础知识和常用指令学习笔记相关的知识,希望对你有一定的参考价值。
本文是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 变量名=变量值
以上是关于Linux操作系统基础知识和常用指令学习笔记的主要内容,如果未能解决你的问题,请参考以下文章