【Linux】基本使用

目录文件管理
目录管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
1.列出目录文件名
ls/ll
1、ls -al ~:将家目录下的所有文件列出来(含属性与隐藏文件)
2、ls -alF --color=never:不显示颜色,文件名末尾显示文件名代表的类型
3、ls -al --full-time ~ :完整呈现文件的修改时间
权限说明
drwxr-xr-x 2 root root 4096 Jul 20 2017 Documents
第一栏drwxr-xr-x:类型与权限
第一个字符表示文件是目录或文件或链接等等
[d]:目录
[-]:文件
[l]:链接
[b]:装置文件里可供存储的接口设备(可随机存取装置)
[c]:装置文件里串行端口设备,如键盘鼠标(一次性读取装 置)
剩余字符以三个为一组:均为rwx三个参数组合
r可读:4
w可写:2
x可执行:1
没有权限则-:0
drwxr-xr-x: rwx=4+2+1=7
r-x:4+0+1=5
r-x:4+0+1=5
则该文件的权限数字是755
第一组:文件拥有者权限
第二组:加入此群组账号的权限
第三组:非本人且未加入本群组的其他账号的权限
第二栏 表示有多少档名连接到此节点(i_node)
第三栏 表示文件或者目录的拥有者账号
第四栏 表示文件所属群组
第五栏 表示文件容量大小,默认单位bytes
第六栏 表示文件的件当日期或最近修改日期
第七栏 表示文档的名字
2.切换目录
cd
1、cd /usr/bin: 绝对路径,以根目录/开头
2、cd bin:在usr下,相对路径,相对于当前目录
3、cd ~:切换到目前用户所在家目录
4、cd . :目前所在目录
5、cd .. :切换至目前目录的上一层目录
6、cd ../.. :切换至上上层目录
7、cd ~account :切换到目前用户account所在家目录/home/account
8、cd ../dir:切换到与本目录并列的另一个目录
9、cd -:回到之前的目录
3.显示当前目录
pwd
4.创建一个新目录
mkdir
5.删除一个空目录
rmdir
传输文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.wget
从URL获取文件
wget URL #下载URL指定的文件
ex: wget www.baidu.com #下载百度网页
wget -O filename URL #从URL获取文件并重命名filename,filename包含路径
ex:wget http://mirrors.hikvision.com.cn/help/centos/7/CentOS-Base.repo -O /etc/yum.repos.d/CenOS-Base.repo #配置hik yum源
wget -o log URL#注意o与O区别,o为写日志log(怎么获取文件的过程,包括解析、建立连接、传文件等),O为文件名
2.ftp
子主题 1
子主题 2
3.scp
用于 Linux 之间复制文件和目录
scp [可选参数] file_source file_target
1、scp /home/space/music/1.mp3 IP:/home/root/others/music (本地到远程)
2、scp -P 55555 IP:/usr/local/sin.sh /home/administrator(远程到本地)
创建文件、文件链接
1
2
3
4
1.touch filename#从无到有创建文件
2.cp file file.bak #备份
3.ln -sf /dev/dm-30 /dev/cvr_vg/lun1 (ln -sf 目的地 链接)

删除文件
1
rm -rf  filename #r:递归,f:强制删除,不提示
更改文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
1.重命名
​ mv filename newfilename#将文件filename重命名为newfilename
2.更改文件属性
​ chattr
​ 语法
​ chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
​ 参数
​ -R 递归处理,将指定目录下的所有文件及子目录一并处理。

   -v<版本编号> 设置文件或目录版本。

   -V 显示指令执行过程。

   +<属性> 开启文件或目录的该项属性。

   -<属性> 关闭文件或目录的该项属性。

  =<属性> 指定文件或目录的该项属性。
属性
a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。
示例
chattr +i /etc/resolv.conf#用chattr命令防止系统中某个关键文件被修改
chattr +a /var/log/messages#让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
3.更改文件权限
chmod
格式
chmod [-cfvR] [--help] [--version] mode file...
参数
mode : 权限设定字串
[ugoa...][[+-=][rwxX]...][,...]#格式
其中:

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
示例
chmod ugo+r file1.txt#将文件 file1.txt 设为所有人皆可读取
chmod ug+w,o-w file1.txt file2.txt#将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod -R a+r *#将目前目录下的所有文件与子目录皆设为任何人可读取
chmod a=rwx file == chmod 777 file
查看文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1.cat
从头到尾显示文件内容
cat 文件 #从头到尾显示整个文件内容,当文件很大时,终端无法完全显示其所有内容
cat -n 文件 #查看文件内容的同时添加行号
三大功能
1.cat 文件 #一次显示整个文件
2.cat > 文件 #从键盘创建一个文件,只能创建新文件,不能编辑已有文件,执行命令后会进入文件编辑,每次都会覆盖旧的内容
3.cat file1 file2 > file#将几个文件合并为一个文件
2.more
分屏显示文件
more 文件 #分屏显示文件内容,空格:向下翻页,b:向上翻页,q:退出
3.less
分屏显示文件,同more
4.head
从头开始查看文件内容
head 文件 #显示文件头部,默认10行
head -n 行数 文件#查看文件的前10行
5.tail
与head相反
6.file
观察文件类型,某个文件的基本数据

file file

文件类型诸如,ASCII,data文件,binary文件等

file file

7.查看文件格式
:set ff #进入到文件,vi/vim 文件后执行:set ff
搜索文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1.find
find path -option ...
find . -type f#将当前目录及其子目录中的所有文件列出
find . -name "*.c"#将当前目录及其子目录下所有文件后缀为 .c 的文件列出来
常用:find / -name filename
2.which
寻找执行档
which command
-a :将所有由PATH目录中可以找到的指令均列出,而不止第一份被找到的指令名称
1、which ifconfig :找出ifconfig命令的执行文件位置
3.whereis
文件档名的查找,由一些特定的目录中
寻找文件文件名
whereis [-bmsu] 文件或目录名

-l:列出whereis 会去查询的几个主要目录而已
-b:只找binary文件
-m:只找在说明文件manual路径下的文件
-s:只找source 来源文件
-u:搜寻不在上述三个项目 中的其他特殊文件
1、whereis ifconfig
4.根据文件中字符串搜索文件
grep -rn "字符串"

比较文件
1
2
1.diff   
diff 选项 文件一 文件二
分割文件
1
2
3
4
split
命令用于将一个文件分割成数个
-b:指定每多少字节切成一个小文件
1、split -b 1024m txst.txt -d -a 2 test.txt_
编辑文件

vim

​ 常用快捷方式:\

输入输出
1
2
3
1.>>
输出重定向
example: vmstat 3 >> test#vmstat输出重定向到文件test
系统管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
1.top
实时显示 process 的动态
top [-d 数字] |top [-bnp]

-d:后接秒数,更新的秒数
-b:以批次的方式执行
-n:与-b搭配表示需要进行几次top的输出结果
-p 指定某些个PID观察

1、top -d 2
说明:
第一行:目前的时间,经过的时间,登录用户数,在1,5,15分钟的平均负载
第二行:显示目前进程总数和个别进程状态
第三行: 显示CPU的整体负载
第四行第五行:物理内存和虚拟内存使用情况(虚拟内存来源??)
第六:输入指令时显示状态的地方
2、top -b -n 2 >/tmp/top.txt#2次输出结果到文件
3、top -d 2 -p PID #持续观察该PID

2.ps
显示某个时间点的进程运作情况
ps [options]

-A:显示所有process,同-e
-a:不与terminal相关的process
-u:有效使用者相关的pro
x:通常与a一起用列出较完整信息
l :详细讲该PID信息列出
j:工作的格式
-f:更完整的输出
1、ps -l 仅仅观察自己bash相关的进程
说明:
F:进程旗标,总结权限,常见号码4:表示进程权限root
1:表示仅复制而没有实际执行
S:表示状态
R:运行中
S:睡眠
D:不可唤醒,可能在等待IO的情况
T:停止
Z:僵尸状态,已经终止但无法移除到内存外
UID/PID/PPID:代表此进程被该UID所拥有,进程的PID号码,此进程的PID号码
C:Cpu 使用率
PRI/NI :priority/nice优先级,越小越优先
ADDR/SZ/WCHAN:内存相关,内存部分,用掉多少内存,是否在运作
TTY:终端机位置,远程则pts/n
TIME:使用掉的CPU时间
CMD:造成此进程的程序的指令
2、ps aux#观察系统所有进程
USR;使用者账号
MEM:物理内存占比
VSZ:耗掉的虚拟内存
RSS:占用的固定内存
3、ps -lA#显示所有进程
4.free
用于显示内存状态
5.查看cpu
cat /proc/cpuinfo
6.查看内核
uname -r
7.查看系统
cat /etc/redhat-release (redhat)
8.进程管理
Kill -s 9 进程号#杀掉进程
9.查看目录占用者并解除占用
stat /root/hu
10.systemctl
一、systemd 系统初始化程序,系统开始的第一个进程,pid为1
二、systemctl命令
systemctl list-units ##列出当前系统服务的状态
systemctl list-unit-files ##列出服务的开机状态
systemctl status sshd ##查看指定服务的状态
systemctl stop sshd ##关闭指定服务
systemctl start sshd ##开启指定服务
systemctl restart sshd ##从新启动服务
systemctl enable sshd ##设定指定服务开机开启
systemctl disable sshd ##设定指定服务开机关闭
systemctl reload sshd ##使指定服务从新加载配置
systemctl list-dependencies sshd ##查看指定服务的倚赖关系
systemctl mask sshd ##冻结指定服务
systemctl unmask sshd ##启用服务
systemctl set-default multi-user.target ##开机不开启图形
systemctl set-default graphical.target ##开机启动图形
setterm ##文本界面设定color
三、服务状态
systemctl status 服务名称
loaded ##系统服务已经初始化完成,加载过配置
active(running) ##正有一个或多个程序正在系统中执行, vsftpd就是这种模式
atcive(exited) ##僅執行一次就正常結束的服務, 目前並沒有任何程序在系統中執行
atcive(waiting) ##正在執行當中,不過還再等待其他的事件才能继续处理
inactive ##服务关闭 enbaled ##服务开机启动
disabled ##服务开机不自启
static ##服务开机启动项不可被管理
failed ##系统配置错误
11.pstree
查看Linux下systemd启动了哪些服务
pstree [options]
-a #包含命令行参数
-c #展开相同的子树
-H [PID] #突出特定过程
-g #显示进程组ID
-n #使用PID排序
pstree 用户 #显示特定用户的进程树
-s [PID ] #限制显示一个特定的过程

12.查看内存型号
dmidecode -t memory

13. 排名前10的内存CPU消耗
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
14.释放内存
如果内存太少, 可以把占用内存多的程序停掉, 然后执行这个命令释放: echo 3 >/proc/sys/vm/drop_caches
释放完后再改回去: echo 1 >/proc/sys/vm/drop_caches

系统设置
1
2
3
子主题 1
子主题 2
子主题 3
磁盘、设备管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
1.df
列出文件系统的整体磁盘使用量
df [-ahikHTm][目录或文件名]
-a:列出所有文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示文件系统
-m:以MBytes的容量显示文件系统
-h:以人们交易阅读的的GB、MB、KB等格式自行显示
-H:以M=1000K取代M=1024K 的进位方式
-T:连同该partition的filesystem名称列出
-i:不用磁盘容量而以inode数量表示
1、df:列出系统内所有filesystem列出来
filesystem:表示文件系统是哪个partition
1k-blocks:表示单位1KB,可用-h或-m改变容量
Used:使用掉的磁盘空间
Available:剩下的磁盘空间
Use%:磁盘的使用率
Mounted on :磁盘挂载的目录(挂载点)
2、df -h:易读显示
3、df -aT:将系统内所有特殊文件格式以及名称列出来
4、df -h /etc:将/etc下可用的磁盘以易读的容量格式显示出来
5、df -ih:将目前的各个partition当中可用的inode数量列出




2.lsblk

list block device

观察磁盘分区状态

lsblk [-dfimpt] device

-d:仅列出磁盘本身,无分区
-f:含文件系统名称
-i:使用ASCII的线段输出
-m:输出权限数据
-p:列出完整文件名
-t:列出详细数据。包括磁盘队列机制与读写的数据量大小

1、lsblk -ip /dev/sdb
3.blkid
对系统的块设备(包括交换分区)
所使用的文件系统类型、LABEL、UUID等信息进行查询

4.挂载镜像
1、sudo losetup /dev/loop0 iVMS-HG-H16_CN_STD_9.2.0_V2.3.8_iSC_V1.5.100_201026_platformactive_base.img
2、 kpartx -av /dev/loop0
3、 kpartx -d /dev/loop0
4、losetup -d /dev/loop0
5.调整分区
fdisk
1.fdisk /dev/hda
p:打印分区
d:删除分区
n:新增分区
2.格式化分区
mkfs.ext4 /dev/..
3.挂载分区
mount /dev/... 挂载点
6.激活网卡
ifup eth0

磁盘维护
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.dd
备份(直接读取扇区sector)制作文件
dd if="input_file" of="output_file" bs="blocksize" count=blocknum
if:输入文件名,默认为标准输入。即指定源文件或设备。
of:输出文件名,默认为标准输出。即指定目的文件或设备。
count:多少的bs
bs:一个block大小
1、dd if=/etc/passwd of=/etc/passwd.back #备份文件
2、dd if=/dev/sdb of=/tmp/system.iso#将光驱内容备份下来
3、dd if=/tmp/system.iso of=/dev/sdb#将镜像备份到设备
4、将/boot整个文件系统透过dd备份下来
df -h /boot#获取设备/dev/...
dd if=/dev/… of=/tmp/….img
子主题 2
子主题 3
网络通讯、系统性能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
1.iostat


I/O statistics
(输入/输出统计)

输出CPU和磁盘I/O相关的统计信息监控系统的IO状态

iostat [ options ] [ <interval> [ <count> ] ]

-c:查看CPU部分状态信息
-k:某些使用block为单位的列强制使用Kilobytes为单位
-d 参数,显示设备(磁盘)使用状态
-x 参数,输出更多详细信息

1、iostat -c
2、iostat -k 1 10
3、iostat -d 1 3
4、iostat -x 1 2
说明:
磁盘属性
tps:该设备每秒的传输次数“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
CPU属性
%user cpu处在用户模式下的时间百分比
%nice cpu处在带NICE值的用户模式下的时间百分比
%system cpu处在系统模式下的时间百分比
%iowait cpu等待输入输出完成时间的百分比
%steal 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle cpu空闲时间百分比注意:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

2.ifstat
网络接口监测工具

ifstat options

-l 监测环路网络接口。缺省情况下ifstat监测活动的所有非环路网络接口
-a 监测能检测到的所有网络接口的状态信息。
-z 隐藏流量是无的接口,如接口启动了但是未使用的。
-i <interface> 指定要监测的接口。
-s 通过SNMP查询一个远程主机。
-h 显示帮助信息
-n 关闭周期性显示头部信息。
-t 在每一行的开头加一个时间戳
-T 报告所有检测接口的全部带宽
-w 指定间隔时间(与官方的文档说明并不同,不知道是不是写文档的人写错,反正我测试后是间隔时间)
-W 如果显示内容超出终端窗口的宽度,就换行
-S 在同一行更新显示内容
-b 用kbits/s显示带宽
-q 按键模式
-v 显示版本信息
-d 指定一个驱动来收集状态信息




3.netstat
Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,
一般用于检验本机各端口的网络连接情况。

netstat options

-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
LISTEN和LISTENING的状态只有用-a或者-l才能看到。

1、列出所有端口 #netstat -a
2、列出所有 tcp 端口 #netstat -at
3、列出所有 udp 端口 #netstat -au
4、只显示监听端口 #netstat -l
5、只列出所有监听 tcp 端口 #netstat -lt
6、只列出所有监听 udp 端口 #netstat -lu
7、列出所有监听 UNIX 端口 #netstat -lx
8、显示所有端口的统计信息 #netstat -s
9、显示 TCP 或 UDP 端口的统计信息 #netstat -st 或 -su
10、 输出中显示 PID 和进程名称 #netstat -p
4.vmstat
展现给定时间间隔的服务器的状态值,
包括服务器的CPU使用率,内存使用,
虚拟内存交换情况,IO读写情况

vmstat [options] [delay [count]]
参数说明
Procs(进程)
r等待执行的任务数展示了正在执行和等待cpu资源的任务个数当这个值超过了cpu个数,就会出现cpu瓶颈。
B等待IO的进程数量
Memory(内存)
swpd
正在使用虚拟的内存大小,单位k
free空闲内存大小
buff已用的buff大小,对块设备的读写进行缓冲
cache已用的cache大小,文件系统的cache
inact
非活跃内存大小,即被标明可回收的内存,区别于free和active
active活跃的内存大小
Swap
si每秒从交换区写入内存的大小(单位:kb/s)
so每秒从内存写到交换区的大小
IO
bi每秒读取的块数(读磁盘)
块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes
bo每秒写入的块数(写磁盘)
块设备每秒发送的块数量,单位是block
system
in :中断数cs:每秒上下文切换数
CPU
us用户进程执行消耗cpu时间(user time)
us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
sy系统进程消耗cpu时间(system time)
sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足
Id空闲时间(包括IO等待时间)
一般来说 us+sy+id=100
wa等待IO时间
wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。
5.tcpdump
虚拟机内抓一下网卡上某个ip的流量
tcpdump -i ens3 |grep 10.192.54.220
6.ethtool
查看网卡信息
ethtool eth0

备份压缩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1.zip
zip -r myfile.zip ./*
unzip -o -d /home/sunny myfile.zip #解压myfile.zip 到/home/sunny
2.tar
用于备份文件、压缩、解压

-c:建立打包文件,可搭配-v查看过程中被打包的文件名
-t:查看打包文件的内容含有哪些档名,重点在查看档名就是了
-x:解打包或解压缩的功能,可以搭配-C在特定的目录解开,特别留意的是-c,-t,-x不可同时出现在一串指令中
-z:透过gzip的支持进行压缩解压缩,文件最好是*.tar.gz
-j:透过bzip2的支持进行压缩解压缩,文件最好是*.tar.bz2
-J:透过xz的支持进行压缩解压缩,文件最好是*.tar.xz
-v:在压缩解压缩的过程中,将正在处理的文件名显示出来
-f filename:-f 后面要立刻接要被处理的文档名
-C目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
-p:保留备份数据的原本权限与属性,常用于备份-c重要的配置文件
-P:保留绝对路径,即允许备份数据中含有根目录存在
--exclude=FILE:在压缩过程中,不要将FILE 打包

1、# tar -czvf test.tar.gz a.c //压缩(compress) a.c文件为test.tar.gz
2、tar -tzvf test.tar.gz (列出压缩文件内容)(list)
3、tar -xzvf test.tar.gz(解压)(extract)
4、tar -zpcv -f /root/etc.tar.gz /etc#备份/etc(先su -切换到root)
tar -jpcv -f /root/etc.tar.bz2 /etc
tar -Jpcv -f /root/etc.tar.xz /etc

3.xz
创建tar.xz文件:只要先 tar cvf xxx.tar xxx/ 这样创建xxx.tar文件先,然后使用 xz -z xxx.tar 来将 xxx.tar压缩成为 xxx.tar.xz

解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。
4.子主题 4

软件维护

Ubuntu

1
2
3
4
5
更新软件源
1.更改源sudo vim /etc/apt/sources.list
2.sudo apt-get update
安装软件
3.sudo apt-get install 软件

Centos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1.更改yum源
wget 官方源/aliyun 等 -O /etc/yum.repos.d/CenOS-Base.repo
yum clean all && yum makecache #生成缓存
2.安装EPEL 源
EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.

我们在Centos下使用yum安装时往往找不到rpm的情况,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译很痛苦,而EPEL恰恰可以解决这两方面的问题。EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。
————————————————
版权声明:本文为CSDN博主「不忘初心fight」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41831919/article/details/109035936
1)yum install -y epel-release
[root@192 daos]# ll /etc/yum.repos.d/
total 52
-rw-r--r--. 1 root root 1664 Oct 23 2020 CentOS-Base.repo
-rw-r--r--. 1 root root 2523 Dec 26 2020 CentOS-Base.repo.aliyun
-rw-r--r--. 1 root root 1309 Nov 23 2020 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Nov 23 2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Nov 23 2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Nov 23 2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Nov 23 2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 Nov 23 2020 CentOS-Vault.repo
-rw-r--r--. 1 root root 616 Nov 23 2020 CentOS-x86_64-kernel.repo
-rw-r--r--. 1 root root 951 Oct 2 2017 epel.repo
-rw-r--r--. 1 root root 1050 Oct 2 2017 epel-testing.repo
2)yum repolist
3) yum clean all && yum makecache

其他

1
1.set -e # shell文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出

自定义安装软件环境变量设置

Linux环境变量配置方法一:export PATH

使用export命令直接修改PATH的值,配置MySQL进入环境变量的方法:

1
2
3
4
export PATH=/home/uusama/mysql/bin:$PATH

# 或者把PATH放在前面
export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:立即生效
  • 生效期限:当前终端有效,窗口关闭后无效
  • 生效范围:仅对当前用户有效
  • 配置的环境变量中不要忘了加上原来的配置,即$PATH部分,避免覆盖原来配置

Linux环境变量配置方法二:vim ~/.bashrc

通过修改用户目录下的~/.bashrc文件进行配置:

1
2
3
4
vim ~/.bashrc

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc生效
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效
  • 如果有后续的环境变量加载文件覆盖了PATH定义,则可能不生效

Linux环境变量配置方法三:vim ~/.bash_profile

和修改~/.bashrc文件类似,也是要在文件最后加上新的路径即可:

1
2
3
4
vim ~/.bash_profile

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile生效
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效
  • 如果没有~/.bash_profile文件,则可以编辑~/.profile文件或者新建一个

Linux环境变量配置方法四:vim /etc/bashrc

该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限:

1
2
3
4
5
6
7
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/bashrc

vim /etc/bashrc

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:新开终端生效,或者手动source /etc/bashrc生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效

Linux环境变量配置方法五:vim /etc/profile

该方法修改系统配置,需要管理员权限或者对该文件的写入权限,和vim /etc/bashrc类似:

1
2
3
4
5
6
7
# 如果/etc/profile文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/profile

vim /etc/profile

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:新开终端生效,或者手动source /etc/profile生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效

Linux环境变量配置方法六:vim /etc/environment

该方法是修改系统环境配置文件,需要管理员权限或者对该文件的写入权限:

1
2
3
4
5
6
7
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/environment

vim /etc/profile

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:新开终端生效,或者手动source /etc/environment生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效

Linux环境变量加载原理解析

上面列出了环境变量的各种配置方法,那么Linux是如何加载这些配置的呢?是以什么样的顺序加载的呢?

特定的加载顺序会导致相同名称的环境变量定义被覆盖或者不生效。

环境变量的分类

环境变量可以简单的分成用户自定义的环境变量以及系统级别的环境变量。

  • 用户级别环境变量定义文件:~/.bashrc~/.profile(部分系统为:~/.bash_profile
  • 系统级别环境变量定义文件:/etc/bashrc/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment

另外在用户环境变量中,系统会首先读取~/.bash_profile(或者~/.profile)文件,如果没有该文件则读取~/.bash_login,根据这些文件中内容再去读取~/.bashrc

测试Linux环境变量加载顺序的方法

为了测试各个不同文件的环境变量加载顺序,我们在每个环境变量定义文件中的第一行都定义相同的环境变量UU_ORDER,该变量的值为本身的值连接上当前文件名称。

需要修改的文件如下:

  • /etc/environment
  • /etc/profile
  • /etc/profile.d/test.sh,新建文件,没有文件夹可略过
  • /etc/bashrc,或者/etc/bash.bashrc
  • ~/.bash_profile,或者~/.profile
  • ~/.bashrc

在每个文件中的第一行都加上下面这句代码,并相应的把冒号后的内容修改为当前文件的绝对文件名。

1
export UU_ORDER="$UU_ORDER:~/.bash_profile"

修改完之后保存,新开一个窗口,然后echo $UU_ORDER观察变量的值:

1
2
uusama@ubuntu:~$ echo $UU_ORDER
$UU_ORDER:/etc/environment:/etc/profile:/etc/bash.bashrc:/etc/profile.d/test.sh:~/.profile:~/.bashrc

可以推测出Linux加载环境变量的顺序如下:

  1. /etc/environment
  2. /etc/profile
  3. /etc/bash.bashrc
  4. /etc/profile.d/test.sh
  5. ~/.profile
  6. ~/.bashrc

Linux环境变量文件加载详解

由上面的测试可容易得出Linux加载环境变量的顺序如下,:

系统环境变量 -> 用户自定义环境变量
/etc/environment -> /etc/profile -> ~/.profile

打开/etc/profile文件你会发现,该文件的代码中会加载/etc/bash.bashrc文件,然后检查/etc/profile.d/目录下的.sh文件并加载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi

if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

其次再打开~/.profile文件,会发现该文件中加载了~/.bashrc文件。

1
2
3
4
5
6
7
8
9
10
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi

# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"

~/.profile文件中代码不难发现,/.profile文件只在用户登录的时候读取一次,而/.bashrc会在每次运行Shell脚本的时候读取一次。

一些小技巧

可以自定义一个环境变量文件,比如在某个项目下定义uusama.profile,在这个文件中使用export定义一系列变量,然后在~/.profile文件后面加上:sourc uusama.profile,这样你每次登陆都可以在Shell脚本中使用自己定义的一系列变量。

也可以使用alias命令定义一些命令的别名,比如alias rm="rm -i"(双引号必须),并把这个代码加入到~/.profile中,这样你每次使用rm命令的时候,都相当于使用rm -i命令,非常方便。

rpm包管理
1
2
3
4
5
6
基本指令:
rpm --import https://packages.daos.io/RPM-GPG-KEY#导入签名后再打开
rpm -i *.rpm #打开rpm
rpmbuild -ba rpmbuild/SPECS/*.spec #编译
rpm -ql rpmdevtools | grep bin #查看 rpmdevtools package 安装的bin,当然也可查询其他工具的bin
rpmlint -i .spec #build 之前使用rpmlint查找SPEC文件和RPM包的常见错误,如果返回错误/警告,使用 “-i” 选项查看更详细的信息。
制作rpm包

参考https://gohalo.me/post/linux-create-rpm-package.html

  • 规范

  • 步骤

常见问题: