Linux笔记-用户和权限

用户组和权限

1.linux的安全模型

2.用户和组

//查看我的权限
id
//用户及属性信息
/etc/passwd
//用户密码及相关属性
/etc/shadow
//组及其属性信息
/etc/group
//组密码及其属性信息
/etc/gshadow
//创建用户范例
rpm -q --scripts postfix
# Add user and groups if necessary
/usr/sbin/groupadd -g 90 -r postdrop 2>/dev/null
/usr/sbin/groupadd -g 89 -r postfix 2>/dev/null
/usr/sbin/groupadd -g 12 -r mail 2>/dev/null
/usr/sbin/useradd -d /var/spool/postfix -s /sbin/nologin -g postfix -G mail -M -r -u 89 postfix 2>/dev/null
groupadd
-g 指定组ID,多个机器同一个组ID必须相同,方便权限统一
-r 系统组
useradd
-d /var/spool/postfix 指定家目录
-s /sbin/nologin shell类型
-g postfix 主组
-G mail 附加组
-M 不创建家目录 -m创建家目录
-r 系统账号
-u 用户ID
//修改用户和组
//创建账号默认的配置
ls /etc/skel/ -a
//查看用户默认配置
/etc/default/useradd

3.权限

1.常规权限
chown //更换所有者
chmod //更换权限
//默认创建文件夹和文件的权限
umask
//新建文件权限666-umask 奇数+1 偶数不变
//新建文件夹权限777-umask
2.特殊权限
SUID 作用于二进制文件的权限,用户执行此二进制文件则继承所有者权限
SGID 作用于二进制文件的权限,用户执行此二进制文件则继承用户组权限
作用于文件夹,用户在此文件夹下创建的权限继承所属组
STICKY 作用于目录上,此目录中的文件只能拥有者删除
3.文件特殊属性
chattr +i test10.txt // 增加特殊属性,不能修改 不能重命名 限制root权限
chattr -i test10.txt
4.访问控制列表
setfacl //设置访问控制列表
setfacl -m u:用户:- test10.txt
getfacl //查看访问控制列表
getfacl test9.txt

4.文本处理工具

文本常见工具

1.less
2.cat -A
3.head
4.tail
5.tail -f //动态跟踪 文件的变化
6.cut -d: -f1,3 /etc/passwd //截取文件的一部分
7.df |tr -s ' ' %|cut -d% -f5 |tail -n +2 //截取字符串示例
8.wc
9.sort
10.uniq
11.diff
12.vimdiff
13.cmp

正则表达式

基本正则表达式
1.字符匹配
. 匹配任意单个字符
[abc] 匹配范围内的字符
[^abc] 不在范围内的字符
[:alnum:] 字母和数字
[:alpha:] 任意大小写字母
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符 空格和制表符
[:space:] 比blank范围广的空白字符 包括空格、制表符、换行符、回车符
[:cntrl:] 不可打印的控制符 退格 删除
[:digit:] 十进制数字
[:punct:] 标点符号
\s 匹配空白字符
\S 匹配非空白字符
\w 匹配一个字母 数字 下划线 汉字
\W 匹配一个非字母 数字 下划线 汉字
2.匹配次数
* 匹配前面字符任意次数 *任意长度的任意字符 ? 匹配前面字符0次或1次
+ 匹配前面字符 至少1次
{n} 匹配前面字符N次
{m,n}匹配至少m,最多n
3.位置锚定
^ 行首
$ 行尾
< 语首
语尾
4.分组()| 或者

文本处理

1.grep #主要对文本行进行模式过滤

格式 选项 正则 文件

-m #匹配m次后停止
-v #取相反行
-i #忽略字符大小写
-n 显示匹配的行号
-c 匹配统计的行数
-o 仅显示匹配到的字符串
-A #后#行
-B#前#行
-C#前后#行
-e #多个条件的 or 关系
-w #匹配整个单词
-E #使用EGREP
-f # 指定文件
-r #递归处理 不处理软连接
-R#递归处理 ,处理软连接
2.sed #文本编辑工具

格式 选项 脚本 文件

-n #不自动打印
-f #从指定的文件中读取脚本
-r,E #使用扩展正则表达式
-i.bak #备份并原处编辑

说明

-ir 不支持
-i -r 支持
-ri 支持

脚本[地址命令]

地址格式

不写地址对全文处理
-单地址 #:指定行 $:最后一行 /pattern/ 被此处模式匹配到的每一行
-地址范围 #,# 从第几行到第几行 3,6 表示从3到第6行
#,+# 3,+3 从第3行到第6行
/pat1/,/pat2/ #,/pat1/ /pat1/,#
-步进 ~ 1~2 奇数行 2~2偶数行

命令格式

p 打印当前模式空间内容
Ip忽略大小写输出
d删除模式空间匹配的内容 立即启动下一轮循环
a [] text 在指定行后面追加文本
i[] text 在行前面追加文本
c[] text 替换行为单行或多行文本
w file 保存模式匹配的行 至文件
r file 读取指定文件的文本至模式空间匹配到的行后
= 为模式空间中的行打印行号
!模式空间取反
q结束退出sed

查找替代

s/pattern/string/修饰符

修饰符

g 行内全局替换
p 显示替换成功的行
w /path/path 将替换成功的行保存至文件中
i 忽略大小写

3.awk #文本报告生成器

grep练习

1.显示/proc/meminfo文件中以大小S开头的行 ,用两种方法
grep '^[Ss]' /proc/meminfo
grep '<[Ss]' /proc/meminfo


image.png

image.png

2.显示/etc/passwd不以/bin/bash 结尾的行
grep -v '/bin/bash>' /etc/passwd


image.png
  1. 显示用户rpc默认的shell程序
    grep '<rpc>' /etc/passwd|cut -d: -f7
    image.png

    4.找出/etc/passwd中的两位或三位数
    grep '<[[:digit:]]{2,3}>' /etc/passwd
    image.png

    5.显示centos7/etc/grub2.cfg 中至少一个空白字符开头且后面含有非空白字符的行
    grep '[[:space:]]+[[:space:]].' /etc/grub2.cfg
    image.png

    6.找出netstat -tan 命令中以LISTEN后跟任意多个空白字符结尾的行
    netstat -tan|grep '<LISTEN[[:space:]]
    ' ![image.png](https://upload-images.jianshu.io/upload_images/29039146-64a8a457da4a8bcc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 7.显示Centos7上所有UID小于1000以内的用户名和UID grep -v '[[:digit:]]\{4,\}' /etc/passwd |cut -d: -f1,3 ![image.png](https://upload-images.jianshu.io/upload_images/29039146-979ad4256e3e6801.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 8.找出/etc/passwd 用户名 和 bash相同的行 grep -E '^([^:]+\>).*\1' /etc/passwd
    image.png

    9.利用df 和grep 取出磁盘各分区利用率 从大到小排序
    df|grep '<[[:digit:]]{1,}[%]' -o|tr -d %|sort -gr
    image.png

    10.显示三个用户root mage wang 的UID 和默认shell
    grep '^root|mage|wang' /etc/passwd|cut -d: -f3,7
    image.png

    11.找出/etc/rc.d/init.d/functions 文件中 行首为某单词包括下划线 后面带一个小括号的行
    grep '^([[:alpha:]]|_)+>(+' /etc/rc.d/init.d/functions
    image.png

    12.使用egrep 找出/etc/rc.d/init.d/functions 的基名
    echo '/etc/rc.d/init.d/functions' |egrep '[^/]+([[:alpha:]]|/)$' -o
    image.png

    13.使用egrep 找出/etc/rc.d/init.d/functions 的目录名
    echo '/etc/rc.d/init.d/functions' |egrep '^.*/' -o
    image.png

    14.统计last 以root用户登录的每个主机IP登录次数
    last |grep root |grep -Eo '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'|uniq -c
    image.png

    15.用grep显示0-9的数
    echo {0..256}|grep -o '<[0-9]>'
    16.用grep显示10-99的数
    echo {0..256}|grep -o '<[1-9][0-9]>'
    17.用grep显示100-199的数
    echo {0..256}|grep -o '<1[0-9][0-9]>'
    18.用grep显示200-249的数
    echo {0..256}|grep -o '<2[0-4][0-9]>'
    19.用grep显示250-255的数
    echo {0..256}|grep -o '<25[0-5]>'
    20.显示ifconfig结果中ipv4的地址
    ifconfig|grep 'inet>'|grep -E '(([0-9]|[1-9][0-9]|1[0-9][0-9]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9])'
    21.将此字符串"welcome to magedu linux" 中的每个字符去重排序,重复次数多的排前面
    echo 'welcome to magedu linux' |grep '.' -o|sort | uniq -c|sort -r
    image.png

sed练习

1.取出倒数第2行

sed -n "$(echo $[`cat /etc/passwd|wc -l`-1])p" /etc/passwd

echo $[`cat /etc/passwd|wc -l`-1] #打印出倒数第2行

 $(echo $[`cat /etc/passwd|wc -l`-1]) #执行打印命令 拼接到 sed命令 位置

2.取IP地址
ifconfig ens160|grep -Eo '<inet[[:space:]][0-9.]{3,}'|grep -Eo '<[[:space:]][0-9.]{3,}'
ifconfig ens160|grep -Eo '<[[:digit:]][0-9.]{7,}'|head -1
ifconfig ens160 |sed -nE '2s/[^0-9].(<[[:digit:]][0-9.]{7,})./\1/p'
ifconfig ens160 |sed -nE '2s/[^0-9]+([0-9.]{7,})./\1/p'
3.取基名
echo '/etc/sysconfig/network-scripts/' |grep -Eo '([^/]+)'|tail -1
echo '/etc/sysconfig/network-scripts/' |sed -rn 's#(.
)/([^/]+)/?#\2#p'
echo '/etc/sysconfig/network-scripts/' |sed -rn 's#(.)/([^/]+)/?#\1#p'
4.取前缀和后缀
echo 'a.b.c.gz' |sed -rn 's#(.
).([^.]+)#\2#p' echo 'a.b.c.gz' |sed -rn 's#(.*)\.([^.]+)#\1#p'

文件查找和压缩

非实时查找
locate查询系统预建的文件数据库 /var/lib/mlocate/mlocate.db
新创建的文件不能实时更新数据,可以通过执行updatedb 更新

示例:
locate -n2 -r 'test[0-9]'
-n 显示前几行
-r 使用正则表达式

实时查找
find

1.指定目录搜索层级
   find /etc -maxdepth 3 -mindepth 3
2.优先处理目录内的文件,再处理文件夹
   find /root -depth
3.根据文件名和inode查找
   find /root -name '*.bashrc'
   ls -ihla /root //查出inode
   find /root -inum 135105457
4.根据用户组查找
  find /root -user root
  find /root -nouser
5.根据文件类型查找
  find /etc -type d
  f 普通文件 
  d 文件夹
  l 符号连接文件
  s socket文件
  b 设备块文件
  c 字符文件
  p 管道文件
6.空文件或目录
   find /etc -type d -empty
7.组合条件
  -a 默认多个条件是与
  -o 或
  !   非
  find /etc -type f -a -empty
  find /etc -type d -o -type l -ls
  find  ! \( -user root -o -user test \)
8.排除目录
  find /etc  -path '/etc/security' -a -prune -o -name "*.conf"
  find /etc   \( -path '/etc/security' -o -path '/etc/dbus-1' -o -path '/etc/fonts'  \) -a
                 -prune -o -name '*.conf'
  find / \( -path '/proc' -o -path '/sys' \) -a  -prune -o -type f
9.根据文件大小查找
  find / -depth -size +100k
10.根据时间查找
  find ./ -amin -1
  find ./ -mmin -4
11.处理动作
 -ls  类似ls -dils 命令
-fls  保存到文件中 类似 -ls > file
-exec COMMAND {}
  find ./ -perm 644 -type f -name '*.org' -exec chmod u+x,g+x {} \;
12.参数替换xargs


练习
1.查找/var下属主为root 且属组为mail的所有文件

find /var -user root -a -group mail 

image.png

2.查找/var下不属于root.lp、gdm的所有文件

find /var ! \( -user root -o -user lp  \)  
image.png

3.查找/var下最近一周内内容修改过,同时属主不是root,也不是postfix的文件

find /var ! \( -user root -o -user postfix \) -mtime -7  -ls

4.查找系统内没有属组或属主且在一周内被访问过的文件

find / -nogroup -nouser -atime -7

5.查找/var 下大于1M,类型为普通类型的文件

find /var -size +1M -type f |xargs ls -lsh

6.查找/var下所有用户都没有写权限的文件

find /var !  -perm /222  -ls

7.查找/var下至少一类用户没有执行权限的文件

find /var ! -perm -111 -ls

8.查找/etc/init.d/下 所有用户都有执行权限,且其他用户有写权限的文件

find /etc/init.d/ -perm -111 -a -perm -002

压缩

1.压缩指定文件,不包含文件夹,到指定目录
tar -C ./liu -zcvf liu.tar.gz ./
2.解压缩指定文件,到指定目录
tar -xvf liu.tar.gz -C ./data/
3.排除压缩
tar -zcvf ../liu1.tar.gz --exclude=*.org   ./

shell编程

1.vimrc 
#在自己的家目录下 
vi .vimrc
set ts=4
set expandtab
set ignorecase
set shiftwidth=4
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
    if expand("%:e") =='sh'
        call setline(1,"#!/bin/bash")
        call setline(2,"#")
        call setline(3,"#************************************")
        call setline(4,"#Author:                 baiyude")
        call setline(5,"#Date:                   ".strftime("%Y-%m-%d"))
        call setline(6,"#FileName:               ".expand("%"))
        call setline(7,"#Description:            说明")
        call setline(8,"#Copyright:              ".strftime("%Y"))
        call setline(9,"#************************************")
        call setline(10,"")
        endif
endfunc
autocmd BufNewFile * normal G

磁盘管理

磁盘管理.png

1.添加新硬盘
看不到新添加的设备需要扫描所有的连接

for i in {0..31}; do echo "- - -" > /sys/class/scsi_host/host${i}/scan; done

查看所有设备列表
lsblk


image.png

查看添加的设备
fdisk -l /dev/nvme0n2


image.png

交互式添加分区
fdisk /dev/nvme0n2
选择n 新建

选择w 保存退出
修改分区类型
fdisk /dev/nvme0n2
选择t 选择8e liunx虚拟类型

2.创建文件系统
mkfs.ext4 /dev/nvme0n2p1
3.持久挂载
vi /etc/fstab
4.创建swap
umount /dev/nvme0n2p1 //取消挂载
用分区创建
fdisk /dev/nvme0n2 //创建swap分区,选 t 选择liunx swap
mkswap /dev/nvme0n2p1 //创建swap文件系统
vi /etc/fstab //挂载swap
swapon -a //swap 生效
free -h //查看内存
用文件创建
dd if=/dev/zero of=/swapfile bs=1M count=1024 //创建1G文件
chmod 600 /swapfile //修改访问权限
vi /etc/fstab //添加 swapfile 文件的swap
swapon -a //生效
swapon -s //查看
4.创建逻辑卷
pvcreate /dev/nvme0n2p1 //创建物理卷
vgcreate -s 16M vg2 /dev/nvme0n2p1 //创建卷组
lvcreate -L 800M -n mysql vg2 //创建逻辑卷
mkfs.ext4 /dev/vg2/mysql //创建文件系统
vi /etc/fstab //永久挂载
mount -a //生效
5.扩容逻辑卷
fdisk /dev/nvme0n2// 增加分区
pvcreate /dev/nvme0n2p2 //增加物理卷
vgextend vg2 /dev/nvme0n2p2 //扩展卷组
lvextend -L+5G /dev/vg2/mysql //扩展逻辑卷
resize2fs /dev/mapper/vg2-mysql //扩展文件系统 只支持ext4 文件系统
lvextend -r -L+5G /dev/vg2/mysql //扩展逻辑卷 同时扩展文件系统 同时支持ext4 和 xfs
df -lh //查看
6.逻辑卷快照
lvcreate -n mysqlsnaps -s -p r -L 1G /dev/vg2/mysql //创建逻辑卷快照
mount /dev/mapper/vg2-mysqlsnaps /var/filesnap/ //挂载逻辑卷
7.取消逻辑卷快照
umount /var/file //取消原文件挂载
umount /var/filesnap //取消快照挂载
lvconvert --merge /dev/mapper/vg2-mysqlsnaps //恢复
mount /dev/mapper/vg2-mysql /var/file //挂载原文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容