复习Linux命令:
1)等待:sleep 秒数 自动化脚本中作为步骤间隔时间
2)任务管理:
查看系统所有进程:ps -ef
结束当前进程:ctrl+c
挂起当前进程:ctrl+z
查看后台任务:jobs
前置:fg 任务号
3)命令帮助手册:man 命令名
回车-跳行 空格-翻页 q-退出
4)查看目录下内容:ls
查看目录下内容的详细属性:ls -l
类型、权限、属主、属组、大小、最后一次修改时间
是否隐藏
ls -al ls -F ls -R ls -t ls -ld 查看当前目录属性
5)清屏:clear
6)查看磁盘空间分布:fdisk -l df -k mount
7)查看当前shell: ps 查看进程
ps -ef 查看所有进程
8)shell切换:bash csh sh ksh ... 启动子进程
exit 退出子进程
9)输出重定向: > 覆盖
>> 追加
将前面命令的结果 输出 到某文件中
本质:对文件的写操作 写出
10)查看文件内容:cat 文件名 ...
本质:对文件的读操作 读入内存
11)查看系统环境变量值:echo $系统变量名
echo ~ echo Hello
echo $PATH 命令的搜索路径
12)新建目录:mkdir 目录路径名
13)新建文件:touch 文件路径名
14)拷贝文件:cp 源文件路径 新路径
15)移动/重命名:mv 源文件路径 新路径
16)删除文件:rm 文件名 存在交互 y n
rm -f 文件名 关闭交互
17)删除空目录:rmdir 目录名
18)删除非空目录:rm -r 目录名 存在交互 y n
rm -rf 目录名 关闭交互
注意:如果是root用户,在/目录下,千万不能:
rm * 删除所有内容
建议:平时少用root登录,root拥有最高权限,为了防止误操作。
用户 使用账户的人 允许很多人 同时使用系统
账户 root 是账号,是数据 使用相同或不同账号登录系统
用户名、密码
一、用户和组的管理
Linux/Unix是多用户系统:
root是超级用户,拥有最高权限。其它用户及权限由root来管理。对比Windows系统:
控制面板 -> 管理工具 -> 计算机管理 -> 本地用户和组
-> 右击某用户 -> 属性 -> 隶属于(哪个组)
用户和组是从属关系
思路:系统区分不同用户、不同组也是为了管理不同权限
管理员可以授予、回收、修改不同资源的不同权限
1、添加用户:useradd 用户名 (只能由root操作)
# id 为root
# useradd xiaohong
规律:不写组,会自动创建一个组,组名同于用户名xiaohong;
创建用户后,会在/home目录下,自动生成一个目录,就是该用户的主目录,目录名也同于用户名 xiaohong
# cd /home
# ls -l
属主 属组
drwx------ 2 xiaohong xiaohong 4096 10月 19 11:00 xiaohong 目录名
密码:password
简写为:passwd
2、设置密码:passwd 用户名
# passwd xiaohong 输入密码:123 123
清密码:passwd -d 用户名
# passwd xiaohong 输入密码:123 123
3、改变身份: su 用户名
su 不写用户名,默认就是root
目的:获取某用户的权限进行管理
注意:从root切换到普通用户不需要密码,但从普通用户切换到root或其他用户需要密码。
练习:从root切换到xiaohong,从xiaohong切换到root
再返回身份 exit su也会启动一个子进程
查看最初登录身份:who am i
查看当前用户名:whoami
查看当前用户详细身份:id (用户id 用户名 组id 组名)
二、案例:
1、添加boys组: groupadd 组名
# id 是root
# groupadd boys
2、添加girls组:
# groupadd girls
3、查看组信息: /etc/group 组管理配置文件
# cat /etc/group 重点查看组id和组名
每一行就是一个组的记录,每一列就是不同的属性
组名 组id(gid)
root:x:0:root
...
xiaohong:x:500:
boys:x:501:
girls:x:502:
4、添加用户tom到boys组:useradd -g 组名 用户名
# useradd -g boys tom
# passwd tom 密码:123
5、同理,添加用户alice和rose到girls组:
# useradd -g girls alice
# useradd -g girls rose
# passwd alice 密码:123
# passwd rose 密码:123
6、查看用户账户信息: /etc/passwd
# cat /etc/passwd
每一行就是一条账户的信息,具有多个属性:
用户名:口令占位符:uid:gid:描述:用户主目录:登录shell
root:x:0:0:root:/root:/bin/bash
...
xiaohong:x:500:500::/home/xiaohong:/bin/bash
tom:x:501:501::/home/tom:/bin/bash
alice:x:502:502::/home/alice:/bin/bash
rose:x:503:502::/home/rose:/bin/bash
uid: 用户id
gid: 组id
补充:用户口令文件 /etc/shadow
分别使用root和xiaohong身份查看
$ cat /etc/shadow 权限不够
# cat /etc/shadow 可以查看,但是密码都经过加密MD5
7、用alice的身份,在其主目录下创建1.txt文件
# id 是root
# su alice 不用密码
$ cd 回alice主目录 /home/alice
$ pwd
$ ls
$ touch 1.txt 创建空文件
$ ls -l
-rw-r--r-- 1 alice girls 0 7月 12 10:39 1.txt
(编辑纯文本:包括各种源程序、配置文件)
.py .java .c .json .sql .html
: (shift ;) i
底行模式 <-- 命令模式 --> 输入模式
wq回车 <--Esc
8、使用vi编辑器,编辑1.txt文本 (vi基本使用)
1)vi 1.txt 启动vi 编辑1.txt 纯字符界面
默认处于:命令模式 可敲大量命令
2)敲i键,切换到:输入模式 (左下角:插入 INSERT)
3)输入 I am alice!
4)敲Esc键,由输入模式 -> 命令模式
5)敲 : 键(Shift ;)-> 底行模式(冒号模式)
6)在冒号后输入:wq 回车 保存并退出(Write Quit) 写入磁盘 并 退出vi
7)补充:如果保存时出现问题,可以不存盘强制退出
Esc 冒号模式 shift ; q! 回车
或ctrl+c 结束vi进程
9、尝试让tom进入alice主目录中,查看并修改1.txt文件。
$ id 是xiaohong
$ su tom 密码123
$ cd /home
$ cd alice 权限不够
$ ls -l
drwx------ 2 alice girls 4096 4月 27 10:50 alice
drwx------ 2 rose girls 4096 4月 27 10:23 rose
drwx------ 2 tom boys 4096 4月 27 10:22 tom
三、文件/目录的权限:
1、user 所有者(属主 owner 文件的创建人) u
2、group 所有者所在的组 g
比如:root用户 在 root组
xiaohong用户 在 xiaohong组
tom用户 在 boys组
alice和rose 在girls组
3、other 其他 o 既不是自己的,也不是同组的
ls -l 开始的10个字符: d rwx --- ---
文件类型 文件/目录的权限
- --- --- ---
- 文件 所有者 同组人 其他人
d 目录
4、三种访问权限:可读r 可写w 可执行x
Read Write eXcute
700
rwx------ 出现的位置固定 rwx 缺失使用-代替
可读r r--
可写w -w-
可执行x --x
- rw- r-- r-- 普通文件:权限 644
自己:可读、可写 同组:只读 其他:只读
d rwx r-x r-x 目录:权限 755
自己:可读、可写、可执行
同组:可读、可执行 其他:可读、可执行
- rwx rwx rwx 可执行文件: 777
对所有人:可读、可写、可执行
- rwx rw- r-- 764
二进制之父:莱布尼茨 伏羲
0
1
00
01
10
11
二进制 八进制数
权
421 权限的数字表达法:用1位八进制数表示一种身份的三种权限
000 0 ---
001 1 --x
010 2 -w-
011 3 -wx
100 4 r--
101 5 r-x
110 6 rw-
111 7 rwx
128 64 32 16 8 4 2 1
01100001
97=64+32+1
将十进制数97 -> 二进制数:01100001
-> 十六进制:0~9 A~F 61 让程序员更方便表示二进制
0110 0001
6 1
-> 八进制:0~7 141
01 100 001
1 4 1
128 64 32 16 8 4 2 1
11101001
233 = 128+64+32+8+1
将十进制数233 -> 二进制数:11101001
十六进制:1110 1001 E9
E 9
八进制:11 101 001 351
3 5 1
笔试题:Linux系统中某文件具有如下权限,对于用户自己拥有可读、可写、可执行,对于同组人可读、可执行,对于其他人可读,请写出该权限的八进制数形式____. 754
7 5 4
- rwx r-x r--
u g o
5、归纳文件和目录的各种权限的规律:
1)文件的权限:
r 可读:可以使用vi、cat等查看文件的内容 Disk I 输入 读取磁盘数据
w 可写:可以修改后保存磁盘 Disk O 输出 将数据写入到磁盘中
x 可执行:可以直接运行 命令就是可执行文件
2)目录的权限:
r 可读:通过ls 查看目录下的内容
w 可写:可以改变目录下的内容,比如新建、删除资源
x 可执行:可以cd进去
为何tom无法进入alice的主目录?
$ ls -ld
drwx------ 2 alice girls 4096 4月 27 10:50 .
700
修改为:
drwx-----x
701
6、修改文件/目录的权限:chmod 规则 文件/目录名
规则:
角色:u 自己人 user
g 同组人 group
o 其他人 other
a 所有人 all
操作:+ - 权限:r w x
数字:644 755 ...
u g o
举例: rw- r-- r--
# chmod u+x 1.txt 针对自己增加可执行权限
# chmod u-x 1.txt 针对自己去除可执行权限
# chmod g+w 1.txt 针对同组人增加可写权限
# chmod a+rx, g+w 1.txt
所有人都可读,可执行;同组的可写
# chmod 777 1.txt 数字表达法
# chmod 644 1.txt
前提:只有文件的拥有者、root用户可以修改权限
案例:由root或alice修改alice主目录的权限,让tom能进入其中,并且查看目录下内容,查看1.txt的内容,修改1.txt内容。
由alice修改:让tom能cd进入
$ id 是alice
$ cd 在主目录中
$ ls -ld 权限 700 rwx --- ---
$ chmod o+x ~ 701 rwx --- --x
或 chmod 701 ~
由alice修改:让tom能查看其主目录下内容
$ chmod o+r ~ 705 rwx --- r-x
或 chmod 705 ~
$ ls -l
-rw-r--r-- 1 alice girls 12 4月 27 10:50 1.txt
644
目前tom可读,但不可写
-rw-r--rw-
646
由alice修改:让tom可以改写1.txt
$ chmod o+w 1.txt
chmod 646 1.txt
练习:让alice或root改变权限,让tom和rose都能进入alice主目录,查看目录下内容,查看1.txt内容,修改1.txt
$ id 是alice
$ cd 在主目录 /root/alice
$ ls -ld drwx---r-x 705
drwxr-xr-x 755
$ chmod 755 ~
或 chmod a+rx ~
$ ls -l -rw-r--rw- 646
-rw-rw-rw- 666
$ chmod 666 1.txt
或 chmod a+rw 1.txt
说明:如果alice不小心将自己主目录权限改为666或644,会让自己缺少目录的x权限
755 rwx r-x r-x
644 rw- r-- r-- 自己是无法进入自己主目录中 cd回车 会失败
如何解决?
使用root身份将alice主目录的权限改为755
$ su 输入密码
# chmod 755 /home/alice
准备一个可执行文件:f1 改为可执行,可直接运行
由alice操作:
$ id 是alice
$ pwd 在/home/alice
$ vi f1
编辑:date
sleep 10
cal
保存退出
$ f1 命令找不到 和PATH有关 没有改命令所在路径
$ /home/alice/f1
$ ./f1 权限不够
-rw-r--r-- 644
-rwxr--r-- 744
-rwxr-xr-x 755
$ chmod u+x f1
$ chmod a+x f1
举例:写一个shell脚本,求出1~100的累加和 (笔试题)
$ id 是alice
$ vi sum.sh
#!/bin/bash
sum=0
i=1
while (($i<=100))
do
sum=$(($sum+$i))
i=$(($i+1))
done
echo "Sum=$sum"
保存退出后
$ chmod a+x *.sh 针对所有.sh文件,针对所有用户都可执行
比如:tomcat的bin目录下,有大量.sh文件,
包括启动服务器startup.sh 关闭服务器shutdown.sh
希望将所有.sh文件都改为针对所有用户可执行
四、查看文件内容的方式:cat more vi head tail
1、cat 适合看小文件,不可翻页,不可编辑
可以将多个文件合并成一个文件
$ date > t1
$ echo Hello > t2
$ cal > t3
$ cat t1 t2 t3 > newfile
2、more 适合看大文件,可以翻页,不可编辑
控制命令: 空格 -- 翻页
回车 -- 跳行
b -- 向前一屏
f -- 向后
h -- 求助
q -- 退出
/ -- 查找
n -- 继续查找
将/etc/passwd文件拷贝到alice的主目录下:
$ id 是alice
$ cp /etc/passwd ~
$ cat passwd
$ more passwd
纯文本编辑器:编辑任何的源代码、脚本、配置文件
3、vi 功能强大文本编辑器(Unix/Linux) vim等都是对vi的加强版
关注三种模式:如何切换
回车 i a o O
底行模式 ----> 命令模式 ----> 输入模式
<---- (初始模式) <----
: / ? Esc
常用的操作命令:
O
i 光标 a
o 变为输入模式,光标停留位置不同
向上 k
向下 j
向左 h
向右 l 用小键盘方向键也可
到行首 ^
到行尾 $
到第5行 5G
屏首 H
屏尾 L
屏中央 M
前翻页 ctrl + b backward
后翻页 ctrl + f forward
x 删除一个字符
dw 删除当前词
3dw 删除3个单词
dd 删除当前行
5dd 删除5行 (当前行开始)
:5, 10d 冒号模式,删除5~10行
r 替换一个字符
cw 替换一个单词
cc 替换一行
C 替换从光标到行尾
yw 拷贝词
yy 拷贝行 (Y) 5yy 拷贝5行
p 粘贴
:1,2co3 拷贝行1,行2到行3之后
:4,5m6 移动行4,行5到行6之后 剪切
:w 存盘 write (类似Windows中 ctrl + s)
:w 新文件名 另存为新文件
:wq 存盘退出 或 ZZ (shift + z + z) 或:x
:q! 强制退出不存盘
其它命令:
~ 大小写转换
J 把当前行和下一行连起来
u 撤销上一步 undo
:set number 显示行号 :set nu
:set nonumber 取消行号 :set nonu
:21 光标跳到指定行
21G 到21行 G表示文件为 1G第一行
/字符串 从当前行往下查找
?字符串 从当前行往上查找
n 继续向下查找
N 反方向继续查找
:r file2 在光标所在位置插入另一个文件 (合并)
:1,$s/旧串/新串/g 替换全文
说明:s表示替换 g表示全部替换 global
将所有: 换成@
:1,$s/:/@/g
练习:将文本中所有home都替换成 192.168.0.2
:1,$s/home/192.168.0.2/g
4、head 和 tail
查看文件的头几行: head -3 文件名 头3行
查看文件的后几行: tail -5 文件名 后5行
技巧:使用tail -f 文件名 动态刷新实时监控文件
用途:常用于查看系统的日志文件;
日志文件经常被更新,追加新的内容,需要监控。
$ tail -f 1.txt
$ ctrl + c 结束监控进程
面试题:需要跟踪、监控Linux某日志文件xxx.log
tail -f xxx.log
select 列名, 表达式, 函数, ... 列的投影
from 表名, ...
where 记录的匹配条件 行的选择
五、常用技巧
1、过滤:grep 过滤出n行
2、统计:wc 统计:行、单词、字符 的数量
3、排序:sort
4、管道: |
管道符:用于连接两个命令,前一个命令的输出,作为后一个命令的输入。(前一个命令的输出,作为后一个命令传入的参数)
例子1:将/etc/passwd的头10行,写入文件f2中
$ head -10 /etc/passwd > f2
例子2:将/etc/passwd的头10行排序后,写入文件f3中
$ head -10 /etc/passwd | sort > f3
例子3:将/etc/passwd排序后的头10行,写入文件f4中
$ sort /etc/passwd | head -10 > f4
5、常见用法
1)管道more: 分屏显示
对比:ls -l /etc
ls -l /etc | more 空格 回车 q
2)管道grep: 过滤
对比:ls -l /etc
ls -l /etc | grep ssh 找到含有ssh的行
drwxr-xr-x 2 root root 4096 4月 25 11:20 ssh
练习:查找出tom的账户信息
cat /etc/passwd | grep tom
tom:x:501:501::/home/tom:/bin/bash
练习:找出girls组的所有用户的账户信息,按照用户名排序
/etc/group 组 girls:x:502:
/etc/passwd 用户
先根据组名找到gid:
cat /etc/group | grep girls
再根据gid找到与之有关的用户信息:
cat /etc/passwd | grep 502 | sort
3)管道wc:统计
cat f1 | wc
3 行 4 单词 18 字符
练习:统计出girls组有多少账户
cat /etc/passwd | grep 502 | wc 行数就是账户数
小结:|常用法
|more 分页
|grep 过滤
|sort 排序
|wc 统计
六、进程管理
1、查看当前所有进程 ps -ef
以全格式显示当前系统所有进程
每一行就是一个进程的信息
-e 所有进程
-f 全格式
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 19:41 ? 00:00:03 init
root 2 1 0 19:41 ? 00:00:00 [keventd]
root 3 1 0 19:41 ? 00:00:00 [kapmd]
Uid: 用户名 该进程由哪个用户发起的 (重要)
Pid: 进程id 进程的唯一标识 (重要)
PPid: 父进程id
C: cpu占有率
Stime: 开始的时间 (重要)
TTY: 开始该进程的终端号
Time: 运行时间
CMD: 启动该进程的命令名 (重要)
uid Stime CMD Pid
__用户在__时刻使用__命令启动了一个进程,被系统分配进程号pid为__
补充:top 查看系统资源使用情况,包括CPU、进程、内存Memory等
特点:动态实时刷新 ctrl + c结束进程
启动sleep进程: sleep 3000
其它窗口:ps -ef | grep sleep
alice 3421 3212 0 17:49 pts/0 00:00:00 sleep 3000
进程id: 3421
2、根据pid杀进程:kill 进程id
前提:只有进程的发起者、root才可杀进程
和权限有关
$ kill 3421 没有权限
$ su 密码:123456
# kill 3421
说明:某些时候kill 进程id 无法直接关闭进程,可能是信号丢失引起;
可以使用kill -9 进程id -9选项 百分百杀进程
3、根据进程命令名批量杀进程:pkill 命令名
# pkill sleep
关机:halt halt: must be superuser.
重启:reboot reboot: must be superuser.
必须是root才有权限操作!
作业:盘点重要的、常用的十类命令。
最实用的命令 id pwd ls -l、 任务管理、进程管理、磁盘文件管理、网络管理、特殊技巧;
建议分类记忆,后续需要时查阅相关文档、手册,进行适当的扩展。