-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathShell
More file actions
403 lines (373 loc) · 12.2 KB
/
Shell
File metadata and controls
403 lines (373 loc) · 12.2 KB
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
用户与组
用户名,用户ID
ID限制在60000一下,分为三种
root ID为0
系统 ID:1~499 为服务(程序,进程)创建而生
普通 ID:500以上
id显示当前用户信息
passwd修改密码
/etc/passwd用户信息
冒号隔开,用户名:X:userID:groupID:描述:用户home目录:用户使用的shell
/etc/shadow用户密码
冒号隔开,第二个部分!!表示没有密码
/etc/group组信息
whoami 显示当前用户
who 显示有哪些用户登录
w 显示用户+执行的程序
useradd username 创建新用户
passwd username 为其创建密码
usermod 参数 username 修改用户信息
userdel name 删除
权限
目录的读写执行权限稍微有点差别:执行表示是否可访问目录内容;
UGO模型,user,group,other
文件的所属用户和组;其他就是other
文件信息
权限;连接数量;所属用户;所属组;大小;时间;文件名
chown [-R] username filename 修改file所有者
chgrp [-R] groupname filename 修改所有组
chmod a+w fimename
数值表示: r=4,w=2,x=1 如:
chmod ug+w,o-x filename
chmod 777 filename
默认权限
每个终端拥有umask属性,决定了新建文件的默认权限
umask 022(四位时关注后三位)
每次新建文件时,默认权限就是666-umask
目录时,777-umask
普通用户umask值为002,root用户umask值为022
特殊权限
四位权限值的时候,第一位是特殊权限
suid 以文件所属用户执行,而非执行文件用户,例如某文件是root创建的,加上这个标志后,普通用户也可以执行这个文件,所属用户的执行权限位不是x而是s
sgld 以文件所属组身份执行,例如某个目录属于某个组,然而新建文件是由创建者决定的,增加这个标志后,自动设置为设定的组
sticky 设置以后,用户只能删除本用户的文件
chmod u+s filename
chmod g+s filename
chmod o+t filename
suid=4,sgid=2,sticky=1
chmod 4775 filename
网络
局域网需要配置IP地址+子网掩码
跨网段通信+网关
可上网的计算机+DNS
网络配置
以太网接口明明为eth0,eth1..
lspci
lsusb
ifconfig 查看接口信息
-a
ifup eth0
ifdown eth0
Linux 系统指令
设置开机默认界面:
1./etc/default/grub
2.GRUB_CMDLINE_LINUX_DEFAULT = "guit splash text" 或者"guit splash"
3.sudo update-grub
命令 --help 查看帮助
man ls man+具体命令
man -k keyword 查询包含该关键字的文档
info ls 更详细的信息...
/usr/share/doc 更更详细的文档
init 5 图形界面
init 3 文本界面
shutdown [OPTION]... TIME [MESSAGE]
-r 重启
-k 送警告信号
-h 关机后关电源
cd
.表示本目录下 ..表示上级目录
pwd 显示绝对路径
mkdir [OPTION].. DIRECTORY...
-p 加路径的话,可以递归地创建路径上的所有文件
ls [OPTION] [String]
String做字符串匹配
-a 显示所有文件
-il 比较详细的信息列表
touch filename
cp -riv oldfilename newfilename
r表示递归的复制文件,i表示覆盖前询问,v表示显示复制过程中详细信息
mv oldname newname 移动兼重命名,取决于第二个参数是目录或是文件名
rm [-i][-r][-f] name 删除前询问,f强制删除,文件夹时加上r
mkdir
rmdir 只删除空目录
stat filename 文件的所有状态信息
file name 文件的类型:文本,可执行文件,数据文件
cat [Option] name
-n 每行加上行号
-b 空行不计入行号
-s 若连续多个空行,显示的时候只显示一行
more [Option] name
Enter 下一行
spacebar 下一屏
q 退出
v 调用vi
= 显示当前行号
tail 默认末尾10行
-n lines 指定lines行
-c bytes 指定字节
ps
-l 进程详细信息
F:内核分配给进程的系统标记
S:进程的状态,O运行,S休眠,R可运行,Z僵化,T已停止
PRI:进程优先级
NI:谦让度
ADDR:进程内存地址
SZ:进程换成需要交换区大小
-ef 全部进程+大部分信息
-fH 进程以层级显示
kill [信号] 进程号
HUP 挂起
INT 中断
QUIT 结束运行
KILL 无条件终止
TERM 尽可能终止
killall 进程名
mount -t type device directory
vfat
ntfs
ios9660 光盘格式,比如把iso格式文件直接挂载
mount -t iso 9660 -o loop xxx.iso
umount device 先切换到其他目录,否则被占用
fuser -m /dev 查看哪些进程在使用该文件系统
lsof /drv/ 查看哪些文件打开
df 查看磁盘使用情况,单位是KB
du 当前目录下所有文件的大小,单位KB
sort [-n] name 文件内容排序,默认是字符序
-H 日志文件行首是月份的话,此参数可以按月份排序
-r 反序
gzip name 压缩文件
zip -r old new 把old目录归档到new
在/.bashrc的末尾加上export PATH=$PATH:/my_new_path;后重启bash,就把bash环境添加进去了;
fdisk
-l 列出所有安装的磁盘及其分区信息
/dev/sdb 进入fdisk交互界面,m查看所有命令
例如,n新建,p显示当前分区,w保存退出等...
Id 82表示swap,83是Linux分区,1是fat格式
partprobe 分区完之后,内核更新分区信息
创建文件系统(格式化)
mke2fs -t ext4 /dev/sdb1
-b blocksize 文件块大小4096
-c 检查坏块
-L lable 指定卷标
-j 建立文件系统日志
dumpe2fs /dev/sdb1 查看文件系统信息
文件系统的日志
带日志的文件系统,在提交操作之前,先写入日志,操作成功后,删除相关日志.可以容易地发现错误
e2lable /dev/sdb1 [name] 给相应磁盘赋予卷名
fsck /dev/sda1 检查并修复损坏的文件系统(文件系统先卸载)
系统目录
/
boot
引导文件,OS内核,grub
etc
配置文件
fstab文件可以添加条目自动挂载,参考已有的条目就好
opt
软件...
proc
OS实时信息,非实际文件,内存的一种映射,每个进程,内存,CPU信息...
sbin
superuser命令...
sys
底层硬件
tmp
临时目录,内容会被自动删除
var
经常变化的信息;日志
LVM(逻辑卷管理)
PE物理拓展
PV物理卷
VG卷组
LV逻辑卷
硬盘->物理卷(将硬盘划分成PE=MB)->所有的物理卷组成空间池(VG)->从空间池划分出逻辑卷(LV)
从逻辑卷的角度来看,是动态可变的,需要的时候从空间池里申请;拓展磁盘就讲空间送入空间池
创建与使用
删除的时候注意顺序倒过来,逻辑卷->卷组->物理卷
1.创建物理卷
pvcreate /dev/sdb /dev/sdc 磁盘sdb,sdc都创建为物理卷
pvdisplay 查看物理卷信息
pvremove /dev/sdb
2.创建卷组,将PV加入卷组中
vgcreate 卷组名 /dev/sdb /dev/sdc
vgdisplay
vgremove 卷组名
3.基于卷组创建逻辑卷(逻辑卷大小一定是PE的整数倍)
lvcreate -n mylv -L 2G 卷组名 -n和name指明逻辑卷名,-L和2G表示大小,卷组名表示空间来源
lvdisplay
lvremove /dev/卷组名/mylv 删除逻辑卷
4.为创建好的逻辑卷创建文件系统
mkfs.ext4 /dev/卷组名/mylv
5.将格式化好的逻辑卷挂载使用
mount /dev/卷组名/mylv /mnt/
拓展LVM大小
1.保证VG中有足够的空闲空间
2.扩充逻辑卷
lvextend -L +1G /dev/卷组名/mylv
3.查看扩充后LV大小
4.更新文件系统
文件系统确定时,大小确定;故更新不可避免
resize2fs /dev/卷组名/mylv
5.查看更新后文件系统
df -h
卷组空间不足时,添加新硬盘
pvcreate /dev/sdd
vgextend 卷组名 /dev/sdd
缩小逻辑卷
缩小操作必须离线操作
1.卸载已经挂载的逻辑卷
unmount /dev/卷组名/mylv
2.缩小文件系统
e2fsck -f /dev/卷组名/mylv 必须先对磁盘校验
resize2fs /dev/卷组名/mylv 10G
3.缩小LV
lvreduce -L -1G /dev/卷组名/mylv
4.查看缩小的lv
lvdisplay
5.挂载
mount /dev/卷组名/mylv
缩小卷组
vgreduce 卷组名 /dev/sdd
pvremove /dev/sdd
正则表达式:
.(点号) 匹配任意单字符, a.b <=> acb or adb
* 匹配匹配在它之前的任意数目的单字符, a*b <=> b or ab or aab
+
? 0或1次
^ 匹配以此开头的行, ^too <=> too many people
$ 匹配以此结尾的行, too$ <=> I think too
[Tt]oo 匹配Too和too
[^Tt] 匹配不含Tt的
第一讲:
示范1 uad.sh:
#!/bin/bash
#time
echo "creating user..."
useradd zhangsan
echo "setup password..."
echo 123456 | passwd --stdin zhangsan
echo "done"
调用脚本的方式:
1(最标准的,第一行赋给脚本执行权限)
chmod +x uad.sh
./uad.sh
2
sh uad.sh
3
source uad.sh
第二讲:Shell命令的组合运用:管道操作,重定向操作和逻辑分割
管道操作
将一端的命令输出交给另一端的命令处理
格式: 命令1 | 命令2
示范:
求文件名满足要求的个数
find /etc -name "*.conf" -type f | wc -l
ps aux是列出所有进程信息
ps aux | gerp httpd
重定向操作:改变执行命令时的默认输入输出
重定向输入 < 从指定文件读取数据
重定向输出 >,>> 前者是覆盖文件,后者是追加模式
标准错误输出 2>,2>> 将错误信息重定向
混合输出 &>,&>> 不区分是否是正常输出还是错误输出
示范:
把当前版本信息保存到version.txt
uname -r > version.txt
下面这条会产生错误信息,因为version2.txt不存在
cat version.txt version2.txt 2> errot.txt
逻辑分割 '&&','||',';'(顺序执行)
示范:
创建成功打印secceed,失败没有返回
mkdir /mulu/a 2>/dev/null && echo "succeed"
第三讲 使用变量
定义变量 格式: 变量名=变量值
引用变量 格式: $变量名或者${变量名}
双引号,允许引用和转义;单引号禁止引用和转义
'`'
示范:
test="apple"
echo "$test"
echo '$test'
把命令返回的结果赋给变量
Ver = `uname -r`
环境变量
命令env显示当前环境变量的信息
用户可控的:PATH,LANG(zh_CN.是中文;en_US.英文),CLASSPATH
特殊变量
$?:前一条命令的状态值,0为正常,非0为异常
$0:脚本自身程序名
$1-$9:第一-第九位位置参数(执行脚本时附带的参数)
$*:命令行的所有位置参数的内容
$#:命令行的位置参数个数
示范:
#!/bin/bash
echo "this program's name : $0"
echo "the number of the parameters $#"
echo "the first parameter is $1"
echo "all the parameters:$*"
第四讲 数值运算
expr 数值1 操作符 数值2
$[数值1 操作符 数值2]
包括 +-*/% 使用乘号时...1 \* 2...因为*是特定字符...第二种方式不用注意
let 变量名++,let 变量名--
let x++
let x+=2
echo $RANDOM
seq 末数 默认从1开始
seq 首数 末数
seq 首数 增量 末数
使用更高端的计算器..echo "1+2" | bc;echo "scale=4;10/3" | bc 限制输出位数为4
第五讲 字符串
路径分割 dirname命令(定位目标所在文件夹),basename命令(文件名)
expr substr $Var 起始位置 截取长度(起始位置标号为1)
${Var:起始位置:截取长度}(起始位置标号为0)
示范:
#Var = "/ect/httpd/cof/httpd.conf"
#dirname $Var
/etc/httpd/conf
#basename $Var
httpd.conf
#Var=BeiDaQingNiao
#expr sbustr $Var 4 6
DaQing
字符串替换
格式: ${Var/old/new} 替换起一个old串
${Var//old/new} 替换所有old
第六讲 条件测试
格式1: test 条件表达式
格式2: [条件表达式]
-e:目标是否存在
-d:是否为目录
-f:是否是文件
-r:是否可读
-w:是否可写
-x:是否可执行
整数值比较:
-eq:=
-ne:!=
-gt:>
-lt:<
-ge:>=
-le:<=
字符串直接用=和!=判断
[-d "/ect/grub"]
第七讲 if语句
if 条件测试
then 命令序列
elif 命令序列
else 命令序列
fi
第八讲 for语句
for 变量名 in 取值列表
do
命令序列
done
第九讲 awk文本处理工具
awk '模式{操作}' 文件1 文件2...
模式可以是 '/正则表达式/'
awk 'NR==1 {print}' /etc/hosts 把该文件第一行输出
NR叫做内置变量其他常用的还有
FS 指定分割的标准,缺省为空格
$n 当前行的第几个字段 0表示全部
awk 'NR==1,NR==3 {print}' /etc/hosts 1到3行
awk 'NR==1||NR==3 {print}' /etc/hosts 1和3行
第十讲 sed文本处理工具,替换文本内容比较方便
sed [-n 不显示修改后的结果 ]'编辑指令' 文件1 文件2 ...