文件属性、用户管理、权限
一.文件类型:
预备姿势:扩展名 .avi .txt .log .sh
Windows: 系统根据不同的扩展名 区分不同类型的文件.
Linux: 扩展名是给我们看的。方便人类区分不同类型的文件
预备姿势:常见的扩展名
.txt 文本文件
.log 日志文件
.conf .cfg 配置文件
.sh .bash 脚本文件(命令大礼包)
常见的文件类型:
- ==file 普通文件
d ==diectory 目录
l ==softlink 软连接(快捷方式)
b ==block 设备(块)文件 光盘 硬盘
c ==character 字符设备(不断向外发出或接受字符)
- file 普通文件详解
1.二进制文件(命令)
2.文本文件(text)
3.数据文件(data) 压缩包
查看文件的属性信息
ls -l ==查看文件属性
例子
[root@oldboyedu59 oldboy]# ls -l /bin/ls /oldboy/alex.txt
-rwxr-xr-x. 1 root root 117680 Oct 31 03:16 /bin/ls
-rw-r--r-- 1 root root 0 Mar 29 09:03 /oldboy/alex.txt
查看文件属性的例子:
[root@oldboyedu59 oldboy]# file /bin/ls /oldboy/alex.txt
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
/oldboy/alex.txt: ASCII text
/etc/init.d/network
CentOS6中执行重启网卡命令
systemctl restart network ==== /etc/init.d/network restart
如何区分文件类型(如何查看)
imagefile命令==查看文件的类型
例子:
d 目录 (文件夹)
l softlink 软连接/符号链接(快捷方式) 存放源文件的位置
创建软连接例子:
touch /oldboy/oldboy.txt
[root@oldboyedu59 oldboy]# touch /oldboy/oldboy.txt
[root@oldboyedu59 oldboy]# ls -l /oldboy/
total 8
drwxr-xr-x. 3 root root 19 Mar 28 11:57 alex
-rw-r--r-- 1 root root 7 Apr 9 15:08 alex.txt
-rw-r--r-- 1 root root 65 Apr 1 20:52 oldboy.avi
-rw-r--r-- 1 root root 0 Apr 9 15:19 oldboy.txt
-rw-r--r--. 1 root root 0 Mar 28 12:38 oldboy.txt.bak
[root@oldboyedu59 oldboy]# ln -s /oldboy/oldboy.txt
/oldboy/oldboy.txt.soft
[root@oldboyedu59 oldboy]# ls -l /oldboy/
total 8
drwxr-xr-x. 3 root root 19 Mar 28 11:57 alex
-rw-r--r-- 1 root root 7 Apr 9 15:08 alex.txt
-rw-r--r-- 1 root root 65 Apr 1 20:52 oldboy.avi
-rw-r--r-- 1 root root 0 Apr 9 15:19 oldboy.txt
-rw-r--r--. 1 root root 0 Mar 28 12:38 oldboy.txt.bak
lrwxrwxrwx 1 root root 18 Apr 9 15:20 oldboy.txt.soft -> /oldboy/oldboy.txt
[root@oldboyedu59 oldboy]# file /oldboy/oldboy.txt.soft
/oldboy/oldboy.txt.soft: symbolic link to `/oldboy/oldboy.txt'
[root@oldboyedu59 oldboy]# ls -l /bin /sbin /etc/init.d /etc/rc.local
lrwxrwxrwx. 1 root root 7 Mar 26 11:38 /bin -> usr/bin
lrwxrwxrwx. 1 root root 11 Mar 26 11:37 /etc/init.d -> rc.d/init.d
lrwxrwxrwx. 1 root root 13 Mar 26 11:39 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx. 1 root root 8 Mar 26 11:38 /sbin -> usr/sbin
b block 设备(块)文件 光盘 硬盘
[root@oldboyedu59 oldboy]# ls -l /dev/cdrom /dev/sr0 /dev/sda
lrwxrwxrwx 1 root root 3 Apr 3 14:39 /dev/cdrom -> sr0
brw-rw---- 1 root disk 8, 0 Apr 3 14:39 /dev/sda
brw-rw---- 1 root cdrom 11, 0 Apr 3 14:39 /dev/sr0
c character 字符设备(不断向外发出或接受字符)
/dev/urandom 随机字符生成器 (生成随机密码)
/dev/null 黑洞(不断接受信息 )
/dev/zero 白洞(不断发出信息 无法查看)
[root@oldboyedu59 ~]# echo {a..z} {0..10} > /oldboy/oldboy.txt
[root@oldboyedu59 ~]# cat /oldboy/oldboy.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 10
[root@oldboyedu59 ~]# tr 'a-z' 'A-Z' </oldboy/oldboy.txt
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10
[root@oldboyedu59 ~]# #删除
[root@oldboyedu59 ~]# #tr -d '要删除的内容' </oldboy/oldboy.txt
[root@oldboyedu59 ~]# tr -d 'a-z' </oldboy/oldboy.txt
0 1 2 3 4 5 6 7 8 9 10
[root@oldboyedu59 ~]# #tr -cd #-d删除 -c取反
[root@oldboyedu59 ~]# tr -cd 'a-z' </oldboy/oldboy.txt
abcdefghijklmnopqrstuvwxyz[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]# tr -cd 'a-zA-Z0-9' </dev/urandom |head -c 8
xoRe6cQs[root@oldboyedu59 ~]#
查询相关命令;
which:显示命令的全路径
whereis:显示命令及其相关文件全路径
[root@oldboyedu59 ~]# \which sed awk grep
/usr/bin/sed
/usr/bin/awk
/usr/bin/grep
yum故障集合:
Error: Nothing to do
No package locate available.
没有叫做locate 的软件包
如何查询命令属于哪个软件包
软件包-多个命令
yum provides locate
mlocate-0.26-8.el7.x86_64 : An utility for finding files by name
软件包叫mlocate el7(centos7) 64位
Repo : base
Matched from:
Filename : /usr/bin/locate
光盘安装
[root@oldboyedu59 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@oldboyedu59 ~]# ls /mnt/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@oldboyedu59 ~]# rpm -ivh /mnt/Packages/mlocate-0.26-8.el7.x86_64.rpm
Preparing... ################################# [100%]
package mlocate-0.26-8.el7.x86_64 is already installed
[root@oldboyedu59 ~]# rpm -qa mlocate
mlocate-0.26-8.el7.x86_64
在服务器连接不上网路的情况下可以使用光盘安装
find 命令=查找目录下的文件
例子:
[root@oldboyedu59 ~]# find /oldboy -type f -name "oldboy.txt"
/oldboy/alex/lidao/oldboy.txt
/oldboy/oldboy.txt
通过find命令找出ip命令的位置。
[root@oldboyedu59 ~]# find /oldboy -type f -name "*.txt"
/oldboy/alex/lidao/oldboy.txt
/oldboy/alex.txt
/oldboy/oldboy.txt
find也可以像tree命令一样显示文件目录
tree -L 1 -d
[root@oldboyedu59 ~]# find / -type d -maxdepth 1
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
错误解析:warning 警告
-maxdepth 这个参数要放在其他参数之前。
[root@oldboyedu59 ~]# find / -maxdepth 1 -type d
/
/boot
/dev
/proc
/run
/sys
/etc
/root
/var
/tmp
/usr
/home
/media
/mnt
/opt
/srv
/old
/oldboy
/lidao
/oldwang
/newwang
/data
/tmp01
find -iname参数==不区分大小写
[root@oldboyedu59 ~]# find /oldboy/alex/ -type f -name "oldboy*.txt"
/oldboy/alex/lidao/oldboy.txt
/oldboy/alex/oldboy01.txt
/oldboy/alex/oldboy02.txt
/oldboy/alex/oldboy03.txt
/oldboy/alex/oldboy04.txt
/oldboy/alex/oldboy05.txt
[root@oldboyedu59 ~]# find /oldboy/alex/ -type f -iname "oldboy*.txt"
/oldboy/alex/lidao/oldboy.txt
/oldboy/alex/oldboy01.txt
/oldboy/alex/oldboy02.txt
/oldboy/alex/oldboy03.txt
/oldboy/alex/oldboy04.txt
/oldboy/alex/oldboy05.txt
/oldboy/alex/OLDboy01.txt
/oldboy/alex/OLDboy02.txt
/oldboy/alex/OLDboy03.txt
/oldboy/alex/OLDboy04.txt
/oldboy/alex/OLDboy05.txt
[root@oldboyedu59 ~]#
习题:找出/etc/目录下面第1层目录中以.conf结尾的文件(不区分大小写)完成后发出命令
find /etc/ -maxdepth 1 -type f -iname "*.conf"`
解:
[root@oldboy oldboy]# find /etc/ -maxdepth 1 -type f -iname "*.conf"
/etc/resolv.conf
/etc/asound.conf
/etc/libuser.conf
xargs命令
xargs==对字符进行分组
[root@oldboyedu59 ~]# echo {1..10} >/oldboy/sf.txt
[root@oldboyedu59 ~]# cat /oldboy/sf.txt
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu59 ~]# xargs -n2 </oldboy/sf.txt
1 2
3 4
5 6
7 8
9 10
tar命令==打包压缩命令
目的:文本文件(配置) 备份
常用参数:
z 通过gzip工具进行压缩
c create 创建包
v verbose 显示过程
f 指定压缩包(放在最后)
t list == 查看压缩包内容
x ==解开tar包
windows : 压缩(winrar 好压 2345压缩)
Linux: 打包压缩
创建压缩包
命令语法例子:
`tar zcvf /tmp/etc.tar.gz /etc/`
> `tar zcf /tmp/etc.tar.gz /etc/`
查看压缩包的内容
语法例子
tar ztf /tmp/etc.tar.gz
解压(默认解压到当前目录)
语法例子:tar zxf /tmp/etc.tar.gz
[root@oldboyedu59 tmp]# tar xf /tmp/etc.tar.gz -C /opt/
[root@oldboyedu59 tmp]# ls -l /opt
total 12
drwxr-xr-x 79 root root 8192 Apr 9 16:35 etc
【巨坑】tar让你迷茫的提示: Removing leading `/' from member names
https://www.jianshu.com/p/631618020430
tar==打包压缩
参数--exclude=PATTERN参数的例子
[root@oldboyedu59 ~]# tar zcf /tmp/etc.tar.gz /etc/
tar: Removing leading `/' from member names
[root@oldboyedu59 ~]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude /etc/services
tar: Removing leading `/' from member names
[root@oldboyedu59 ~]# tar tf /tmp/etc.tar.gz |grep services
etc/services
etc/firewalld/services/
[root@oldboyedu59 ~]# tar tf /tmp/etc-paichu.tar.gz |grep services
etc/firewalld/services/
| 管道符号 把管道前面命令的结果 通过管道传递给后面的命令
diff命令
作用==比较两个文件的内容
Linux下面的对比工具(比较两个文件的内容)
tar tf /tmp/etc.tar.gz >/oldboy/tar.txt
tar tf /tmp/etc-paichu.tar.gz >/oldboy/tar-paichu.txt
diff == different
[root@oldboyedu59 ~]# diff /oldboy/tar.txt /oldboy/tar-paichu.txt
1950d1949##哪一行不同
< etc/services
vimdiff ==更直观显示文件的不同
lrzsz 把文件上传或下载到Linux
rz 把windows文件上传到Linux
sz 把Linux文件的下载到Windows
命令date
作用date == 显示或设置时间
常用参数
-s 日期时间==设置系统时间
%F==完整的日期格式,等价于%Y-%m-%d(2019-08-18)
%m==月份(o1-12)
%w==一年中的第几日(0-6),0代表周一
%y==年份最后两位(00-99)
%Y==年份(2019)
按照我们要求的格式显示当前日期: 年-月-日
[root@oldboyedu59 ~]# date +%F
2019-04-10
[root@oldboyedu59 ~]# date +%Y-%m-%d
2019-04-10
[root@oldboyedu59 ~]# date +%T
09:57:23
[root@oldboyedu59 ~]# date +%H:%M:%S
09:57:39
[root@oldboyedu59 ~]# date +%w
3
`+%F === +%Y-%m-%d`
year month day
`+%T === +%H:%M:%S`
hour min(minute) sec(second)
+%w === week 周几
课堂例题:
显示当前时间以年月日-小时格式
20190101-10
[root@oldboyedu59 ~]# #显示当前时间以年月日-小时格式
[root@oldboyedu59 ~]# date +%Y%m%d
20190410
[root@oldboyedu59 ~]# date +%Y%m%d-%H
20190410-10
显示当前时间以年月日-小时_周几 格式
2019_01_01-10_3
[root@oldboyedu59 ~]# #显示当前时间以年_月_日-小时_周几 格式
[root@oldboyedu59 ~]# date +%Y_%m_%d-%H_%w
2019_04_10-10_3
显示10天后的时间·
[root@oldboyedu59 ~]# date -d "10day"
Sat Apr 20 10:10:12 CST 2019
[root@oldboyedu59 ~]# date -d "10day" +%F
2019-04-20
显示1天前时间以年月日-周几格式
20190101-3
[root@oldboyedu59 ~]# #显示1天前时间以年月日-周几格式
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]# date +%Y%m%d-%w -d "-1day"
20190409-2
显示7天前时间 以年月日-小时_周几 格式
2019_01_01-10_3
[root@oldboyedu59 ~]# #显示7天前时间 以年_月_日-小时_周几 格式
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]# date +%Y_%m_%d-%H_%w -d '-7day'
2019_04_03-10_3
时间主要用于数据备份的命名
设置时间
date -s命令
自动同步时间
ntpdate 根据网站时间修改系统的时间
ntp1.aliyun.com
ntp7.aliyun.com
例子:
[root@oldboyedu59 ~]# ntpdate ntp1.aliyun.com
10 Apr 10:30:12 ntpdate[21482]: step time server 120.25.115.20 offset 233922587.162742 sec
[root@oldboyedu59 ~]# date
Wed Apr 10 10:30:23 CST 2019
文件属性深入:
ls -lhi
-l 显示详细信息
-h 以人类可读的形式显示大小
-i 显示文件或目录inode号码
echo -n 不显示每行结尾的回车
free -h
inode和block
含义:
inode index node 索引节点
inode号码(身份证号码)
inode空间 存放文件属性信息(大小 所有者 权限 文件类型 硬链接数 时间)
文件名没有存放在这里
block的位置
block 数据块
block 用来存放文件的内容(实体)
关系:显示文件内容 cat oldboy.txt 与inode和block关系?
特点:
inode:
256字节(了解)
inode在同一个分区(文件系统)中是唯一的。
Linux下面创建1个非空文件需要占用1个inode和至少1个block
查看文件或目录:ls -i
block:
block大小4k
文件比较小1k,剩余的3k将无法使用。
文件比较大10G,占用多个block
ls -lh
查看整体情况:
block一共有多少 还剩多少(查看磁盘空间使用情况)
df -h
inode一共有多少 还剩多少
df -i
创建硬链接
[root@oldboyedu59 oldboy]# ln oldboy.txt oldboy.txt.hard
[root@oldboyedu59 oldboy]# ls -lh oldboy.txt
-rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# ls -lhi oldboy.txt*
202447230 -rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
202447263 -rw-r--r--. 1 root root 0 Mar 28 12:38 oldboy.txt.bak
202447230 -rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt.hard
202447261 lrwxrwxrwx 1 root root 18 Apr 9 15:20 oldboy.txt.soft -> /oldboy/oldboy.txt
课堂练习
创建1个新目录他的硬链接数是2? 为何?
[root@oldboyedu59 ~]# ll -di /lidao/ /lidao/.
67141566 drwxr-xr-x. 2 root root 24 Mar 29 09:08 /lidao/
67141566 drwxr-xr-x. 2 root root 24 Mar 29 09:08 /lidao/.
在这个目录下面创建1个新目录 /lidao/alex/ lidao目录的硬链接数是几?
[root@oldboyedu59 ~]# ll -di /lidao/ /lidao/. /lidao/alex/..
67141566 drwxr-xr-x. 3 root root 36 Apr 11 09:08 /lidao/
67141566 drwxr-xr-x. 3 root root 36 Apr 11 09:08 /lidao/.
67141566 drwxr-xr-x. 3 root root 36 Apr 11 09:08 /lidao/alex/..
解析:每个目录下都有一个硬链接"."号,和对应上级目录的硬链接".."。
再父目录里创建一个子目录,父目录的链接数增加1(每个目录里都有..来指向父目录)。但是在父目录里创建文件,父目录的链接数不会增加。
目录的硬链接数为何是2,或3-v2019-v2
https://www.processon.com/view/link/5a44428be4b04946438789e2
如何当前系统登陆的用户:
[root@oldboyedu59 ~]# whoami
root
如何查看当前用户的UID:
[root@oldboyedu59 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@oldboyedu59 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
如何添加普通用户:
[root@oldboyedu59 ~]# useradd oldboy
[root@oldboyedu59 ~]# id oldboy
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy)
如何给普通用户设置密码
[root@oldboyedu59 ~]# passwd oldboy
Changing password for user oldboy.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
successfully表示成功
如何切换用户
[root@oldboyedu59 ~]# su - oldboy
[oldboy@oldboyedu59 ~]$ whoami #提示符变成$表示切换成功
oldboy
[oldboy@oldboyedu59 ~]$ id
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy)
如何删除用户:
[root@localhost /]# userdel boy
[root@localhost /]# id boy
id: boy: no such user
如何添加用户指定所属组
[root@localhost /]# groupadd oldboy#创建一个用户组
[root@localhost /]# useradd old -g oldboy#创建一个old用户并加入oldboy用户组
[root@localhost /]# id old
uid=1002(old) gid=1001(oldboy) 组=1001(oldboy)
文件及目录的权限
查看文件的权限信息
[root@oldboyedu59 ~]# ls -l /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 1017 Apr 11 09:29 /etc/passwd
---------- 1 root root 746 Apr 11 09:42 /etc/shadow
解析:
rw-r--r--
权限信息分3类用户。前三个表示所有者的权限,中间三个表示所属用户组的权限,最后三个字符表示其他人的权限
所有者 所属用户组 其他人(陌生人)
分别用user group other
分别简写u g o
权限信息的含义:
r =4 read 是否可以读
w= 2 write 是否可以写
x = 1 executable 是否可以运行(执行)
指运行命令运行脚本
image例子rwxr-xr-x转化成数字是421401401。这样说起来不易理解一般把每个类的总和加起来表示,即755
例子
750 -rwxr-x---
640 -rw-r-----
604 -rw----r--
权限与用户对应关系图解-v2019-v1
https://www.processon.com/view/link/5caead14e4b09a003b2c3f8c
如何修改权限
[root@oldboyedu59 oldboy]# ls -l oldboy.txt
-rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# chmod 755 oldboy.txt
[root@oldboyedu59 oldboy]# ls -l oldboy.txt
-rwxr-xr-x 2 root root 7 Apr 10 11:57 oldboy.txt
根据字符形式 修改权限
[root@oldboyedu59 oldboy]# chmod u-w oldboy.txt
[root@oldboyedu59 oldboy]# ll oldboy.txt
-r--r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# chmod u+w oldboy.txt
[root@oldboyedu59 oldboy]# ll oldboy.txt
-rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# chmod u=w oldboy.txt
[root@oldboyedu59 oldboy]# ll oldboy.txt
--w-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
把oldboy.txt的文件修改为644
给oldboy.txt ugo每个位置都增加上执行权限
[root@oldboyedu59 oldboy]# chmod ugo+x oldboy.txt
[root@oldboyedu59 oldboy]# chmod a-x oldboy.txt
[root@oldboyedu59 oldboy]#
[root@oldboyedu59 oldboy]# ll oldboy.txt
-rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# chmod a+x oldboy.txt
[root@oldboyedu59 oldboy]# ll oldboy.txt
-rwxr-xr-x 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# chmod a-x oldboy.txt
[root@oldboyedu59 oldboy]# ll oldboy.txt
-rw-r--r-- 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 oldboy]# chmod +x oldboy.txt
[root@oldboyedu59 oldboy]# ll oldboy.txt
-rwxr-xr-x 2 root root 7 Apr 10 11:57 oldboy.txt
[root@oldboyedu59 ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Mar 26 11:39 /etc/rc.local -> rc.d/rc.local
[root@oldboyedu59 ~]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 473 Oct 31 07:31 /etc/rc.d/rc.local
[root@oldboyedu59 ~]# chmod +x /etc/rc.d/rc.local
[root@oldboyedu59 ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 473 Oct 31 07:31 /etc/rc.d/rc.local
chmod ugo+x oldboy.txt
chmod a+x oldboy.txt
chmod +x oldboy.txt √√√√√√
chmod ugo +|-|= oldboy.txt
chmod u=rw,g=r,o=rx oldboy.txt
[面试题]文件属性(inode-软硬链接-用户-权限)
https://www.jianshu.com/p/5b83985768e7
UID(User ID) ---相当于身份证号码
GID(Group ID) ---相当于用户组号码(户口号)
用户分类: root ---皇帝(UID为0)
普通用户 ---手动创建的用户(UID为1000以上)
虚拟用户 ---傀儡用户 无法直接使用
满足:每个进程在运行时需要一个用户和用户组
添加普通用户 ---useradd +用户名 给普通用户添加密码 ---passwd +用户名
切换用户 ---su - 用户名
查看当前用户 ---whoami或者id(可查看当前用户的UID、GID)
免交互创建密码 ---echo 123456 |passwd --stdin pangyawei
/etc/passwd ---放置用户名及其他的密码文件 七列的含义:
用户与文件的关系 ---U(代表属主用户) ---G(代表属组用户) ---O(代表其他用户) 全部可以用a rwxrwxrwx ---权限为777
Linux权限
r ---读权限 对应数字为4
w ---写权限 对应数字为2
x ---执行权限 对应数字为
. ---无权限 对应数字为0 修改权限 ---chmod 例:给333这个文件属主属组其他用户权限都修改为可读可写可执行 ---chmod a+rwx 333.txt
Linux下面的时间
image.pngmtime ---modify time 文件的修改时间
atime ---access time 文件的访问时间
ctime ---change time 文件属性的改变时间
查看umask
[root@oldboyedu59 ~]# umask
0022
文件默认权限的由来
666
-022##设置的umask。
=644 ###如果某一位是奇数需要是奇数的位数加一
目录默认的权限由来
777
-022###设置的umask
=755
umask 032
文件默认权限的由来
666
-032
=634
+010
644
模拟环境:
useradd www
mkdir -p /app/blog/uploads
touch /app/blog/guoav{01..5}-blue-ray-4k.mkv.torrent
root 窗口 www窗口
[oldboy@oldboyedu59 /app/blog]$ touch /app/blog/uploads/ycw-5k-100tb.torrent
touch: cannot touch ‘/app/blog/uploads/ycw-5k-100tb.torrent’: Permission denied
[oldboy@oldboyedu59 /app/blog]$ ll -d /app/blog/uploads/ycw-5k-100tb.torrent
ls: cannot access /app/blog/uploads/ycw-5k-100tb.torrent: No such file or directory
[oldboy@oldboyedu59 /app/blog]$ ll -d /app/blog/uploads/
drwxr-xr-x 2 root root 6 Apr 23 11:55 /app/blog/uploads/
方法1 给uploads 目录o+w
方法2 把uploads 修改为www.www
如何让网站更安全
网站程序代码 /app/blog 目录 站点目录(单机权限控制)
1.谁运行网站程序
虚拟用户 www
2.控制权限
站点目录下文件 644 root root
站点目录下目录 755 root root
3.对于上传目录uploads
站点目录下文件 644 www www
站点目录下目录 755 www www
4.通过程序控制 只能上传图片或压缩包
5.取消上传上来的文件的执行权限(讲解到nfs的时候)
权限补充
文件访问过程
显示/oldboy/test.sh文件详细过程(inode block)
权限拒绝错误,与上级目录有关
权限如何让系统安全
如何让系统安全
1.(最小化)
安装系统的时候
操作rm -f
开启服务
2.保护root
禁止root远程登录系统
修改远程连接(sshd)默认端口号
3.制作指纹认证
md5sum:制作一个指纹
格式:md5sum oldboy.txt
md5sum 记录指纹信息
[root@oldboyedu59 ~]# echo oldboy >oldboy.txt
[root@oldboyedu59 ~]# md5sum oldboy.txt
af5a89bcc62e35fcd51819bb4031ab2e oldboy.txt
[root@oldboyedu59 ~]# md5sum oldboy.txt >/tmp/police.md5
[root@oldboyedu59 ~]#
与公安局的指纹信息进行对比
[root@oldboyedu59 ~]# md5sum --check /tmp/police.md5
oldboy.txt: OK
[root@oldboyedu59 ~]# >oldboy.txt
[root@oldboyedu59 ~]# md5sum --check /tmp/police.md5
oldboy.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
[root@oldboyedu59 ~]# md5sum -c /tmp/police.md5 md5sum -c 对比指纹是否一致(一致时为ok 不一致为failed)
oldboy.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
练习
1.找出/oldboy目录下面 以.txt结尾的文件 制作md5 存放在/tmp/oldboy.md5
[root@oldboy ~]# find /oldboy -name '*.txt' -type f|xargs md5sum >/tmp/oldboy.md5###找出文件并制作md5
[root@oldboy ~]# md5sum -c /tmp/oldboy1.md5
/oldboy/alex/lidao/oldboy.txt: OK
/oldboy/alex/oldboy01.txt: OK
/oldboy/alex/oldboy02.txt: OK
/oldboy/alex/oldboy03.txt: OK
/oldboy/alex/oldboy04.txt: OK
/oldboy/alex/oldboy05.txt: OK
/oldboy/alex/OLDboy01.txt: OK
/oldboy/alex/OLDboy02.txt: OK
/oldboy/alex/OLDboy03.txt: OK
/oldboy/alex/OLDboy04.txt: OK
/oldboy/alex/OLDboy05.txt: OK
文件系统的隐藏权限
chattr:修改隐藏属性
+a:只能追加(解锁-a)
+i:无敌的(解锁-i)
lsattr:查看隐藏属性
i-->系统命令
例子如下:
[root@oldboyedu59 ~]# chattr +i oldboy.txt
[root@oldboyedu59 ~]# lsattr oldboy.txt
----i----------- oldboy.txt
[root@oldboyedu59 ~]# echo oldboy >>oldboy.txt
-bash: oldboy.txt: Permission denied
[root@oldboyedu59 ~]# >oldboy.txt
-bash: oldboy.txt: Permission denied
[root@oldboyedu59 ~]# \rm -f oldboy.txt
rm: cannot remove ‘oldboy.txt’: Operation not permitted
特殊权限
/tmp权限粘带位 t含义:
每个人都有可以在这个目录下创建文件 删除
每个人只能管理自己的文件。权限1777 /tmp
stat /tmp 查看tmp目录的文件系统的详细信息
suid setuid权限s.
含义:拥有suid的命令,任何用户执行的时候相当于root(文件的所有者)
chmod u+s /bin/ls
chmod 4755 /bin/ls
用户管理
重要文件:/etc/passwd存放用户信息
/etc/group 用户组信息
/etc/gshadow用户组密码信息
/etc/shadow用户密码信息
命令解释器/bin/bash |/sbin/nologin
课堂练习:找出/etc/passwd,命令解释器为nologin的,显示出用户名,uid,及命令解释器。
[root@oldboy ~]# awk -F: '/nologin$/{print $1,$3,$NF}' /etc/passwd|column -t
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
mail 8 /sbin/nologin
operator 11 /sbin/nologin
games 12 /sbin/nologin
ftp 14 /sbin/nologin
nobody 99 /sbin/nologin
systemd-network 192 /sbin/nologin
dbus 81 /sbin/nologin
polkitd 999 /sbin/nologin
tss 59 /sbin/nologin
abrt 173 /sbin/nologin
sshd 74 /sbin/nologin
postfix 89 /sbin/nologin
ntp 38 /sbin/nologin
fanzhibaba 889 /sbin/nologin
gelong 998 /sbin/nologin
重要目录:
/etc/skel:里面放的是用户家目录的样子
创建新用户过程
useradd alex
系统创建家目录
权限所有者修改
把/etc/skel下面的所有内容复制到家目录下
[root@oldboy ~]# ll -a /etc/skel
total 24
drwxr-xr-x. 2 root root 62 Apr 11 2018 .
drwxr-xr-x. 80 root root 8192 Apr 25 15:25 ..
-rw-r--r--. 1 root root 18 Oct 31 01:07 .bash_logout
-rw-r--r--. 1 root root 193 Oct 31 01:07 .bash_profile >##用户的环境变量和别名。是家规
-rw-r--r--. 1 root root 231 Oct 31 01:07 .bashrc 》#用户别名
常见故障
命令提示符bash-4.1[图片上传失败...(image-4306d0-1558410195101)]
故障模拟:
1.修改/etc/profile PS1加上注释。
image2.添加一个新用户
useradd oldboy
3.切换到新用户
su - oldboy
4.检查是否有suid.特殊权限
ll /bin/rm
5.删根
rm -rf
6.重新登录alex,出现故障
[oldboy1@oldboy /tmp]$ su - oldboy1
Password:
Last login: Thu Apr 25 19:59:15 CST 2019 on pts/1
-bash-4.2$
-bash-4.2$
故障原因
当前用户的环境变量的配置文件。.bash_profile .bashrc 被删除
解决
从/etc/skel复制
-bash-4.2$ cp /etc/skel/.bash* ~
-bash-4.2$ su - oldboy
su: user oldboy does not exist
-bash-4.2$ logout
[oldboy1@oldboy /tmp]$ su - oldboy1
Password:
Last login: Thu Apr 25 20:00:58 CST 2019 on pts/1
[oldboy1@oldboy ~]$
批量生成用户并设置密码
命令拼接的应用
批量添加用户stu01 stu02 stu03并设置密码为123456
最终目标:
useradd stu01 ;echo 123456|passwd --stdin stu01
useradd stu01 ;echo 123456|passwd --stdin stu01
useradd stu01 ;echo 123456|passwd --stdin stu01
解决
先拼接出创建用户的命令
[root@oldboy ~]# echo stu{01..3}|xargs -n1|sed -r 's#.*#useradd &#g'
useradd stu01
useradd stu02
useradd stu03
利用sed再拼接出无交互式设置密码
[root@oldboy ~]# echo stu{01..3}|xargs -n1|sed -r 's#.*#useradd & ;echo 123456|passwd --stdin &#g'
useradd stu01 ;echo 123456|passwd --stdin stu01
useradd stu02 ;echo 123456|passwd --stdin stu02
useradd stu03 ;echo 123456|passwd --stdin stu03
利用awk拼接出无交互式设置密码
echo oldboy{1..4}|xargs -n1|awk '{print useradd,$0";echo 123456|passwd --stdin",$0}' ##》利用awk拼接
useradd oldboy1;echo 123456|passwd --stdin stu01
useradd oldboy2;echo 123456|passwd --stdin stu01
useradd oldboy3;echo 123456|passwd --stdin stu01
useradd oldboy4;echo 123456|passwd --stdin stu01
交给bash运行,先拿一个测试
[root@oldboy ~]# useradd stu04;echo 123456|passwd --stdin stu04
Changing password for user stu04.
passwd: all authentication tokens updated successfully.
测试命令没问题再把整条命令交给bash处理
[root@oldboy ~]# echo oldboy{1..4}|xargs -n1|sed 's#.*#useradd &;echo 123456|passwd --stdin &#g'|bash
Changing password for user stu01.
passwd: all authentication tokens updated successfully.
Changing password for user stu02.
passwd: all authentication tokens updated successfully.
Changing password for user stu03.
passwd: all authentication tokens updated successfully.
useradd: user 'stu04' already exists
在sed命令里&表示前面两个井号中间匹配到的字符
随机生成密码命令
[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
u65geQEg[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
jhGspl6g[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
AfoiUzfK[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
yQHIaHyY[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
3Vk8KDIq[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
WWfpEdSm[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
5YcAQTog[root@oldboy ~]# tr -cd 'a-zA-Z0-9' </dev/urandom|head -c8
tr -cd 'a-zA-Z0-9' 表示对文件里的字符只保留这个范围里的。其他的都删掉。head -c8 表示只取前8个字符。
时间加指纹生成
[root@oldboy ~]# date +%N|md5sum|head -c8
255f7d51[root@oldboy ~]# date +%N|md5sum|head -c8
6c4023a4[root@oldboy ~]# date +%N|md5sum|head -c8
f71e7780[root@oldboy ~]# date +%N|md5sum|head -c8
fde18ec7[root@oldboy ~]# date +%N|md5sum|head -c8
时间加sha系列生成
[root@oldboy ~]# date +%N|sha512sum|head -c8
d545c06c[root@oldboy ~]# date +%N|sha512sum|head -c8
98524cfc[root@oldboy ~]# date +%N|sha512sum|head -c8
a0494aab[root@oldboy ~]# date +%N|sha512sum|head -c8
8949cc82[root@oldboy ~]#
生成随机uid的命令生成
[root@oldboy ~]# uuidgen
df4ba7c2-8f6e-4781-80fc-d3511e776e80
[root@oldboy ~]# uuidgen|head -c8
97838e4b[root@oldboy ~]# uuidgen|head -c8
4b51a0a7[root@oldboy ~]# uuidgen|head -c8
e8ece8cb[root@oldboy ~]# uuidgen|head -c8
d6cf4f69[root@oldboy ~]#
[root@oldboy ~]# openssl rand -base64 8
02u8kHV0zK0=
[root@oldboy ~]# openssl rand -base64 8
bxnpMJV7asM=
[root@oldboy ~]# openssl rand -base64 8
BfflDuGqgQU=
[root@oldboy ~]# openssl rand -base64 8
V+9bL3iP/E8=
[root@oldboy ~]# openssl rand -base64 8
scTNJwEJkgw=
批量添加用户stu04 stu05 stu06并设置密码为随机密码
想要结果
useradd stu04;p=date +%N
;echo p stu04 >>20.txt
useradd stu05;p=date +%N
;echo p stu05 >>20.txt
useradd stu06;p=date +%N
;echo p stu06 >>20.tx
命令拼接
[root@oldboy ~]# echo stu{04..6}|xargs -n1|sed -r 's#(.*)#useradd \1;p=`date +%N`
useradd stu04;p=`date +%N`;echo $p|passwd --stdin stu04;echo $p stu04 >>20.txt
useradd stu05;p=`date +%N`;echo $p|passwd --stdin stu05;echo $p stu05 >>20.txt
useradd stu06;p=`date +%N`;echo $p|passwd --stdin stu06;echo $p stu06 >>20.txt
先测试一条。
[root@oldboy ~]# useradd old5;p=`date +%N`;echo $p|passwd --stdin old5;echo $p old5 >>20.txt|bash
Changing password for user old5.
passwd: all authentication tokens updated successfully.
[root@oldboy ~]# cat 20.txt
902265571 stu05
828118399 old5
全部交给bash处理
[root@oldboy ~]# echo old{1..5}|xargs -n1|sed 's#.*#useradd &;p=`date +%N`;echo $p|passwd --stdin &;echo $p & >>20.txt#g' |bash
Changing password for user old1.
passwd: all authentication tokens updated successfully.
Changing password for user old2.
passwd: all authentication tokens updated successfully.
Changing password for user old3.
passwd: all authentication tokens updated successfully.
Changing password for user old4.
passwd: all authentication tokens updated successfully.
useradd: user 'old5' already exists
Changing password for user old5.
passwd: all authentication tokens updated successfully.
[root@oldboy ~]# cat 20.txt
902265571 stu05
828118399 old5
002657812 old1
172031442 old2
246596527 old3
314187391 old4
361565527 old5