分类 Linux 下的文章

基础权限

[root@server1 ~]# ll
总用量 12
-rw-------. 1 root root 1241 1月  12 10:11 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 1月  13 10:13 test
-rw-r--r--. 1 root root    0 1月  13 10:31 testttt
-rw-r--r--. 1 root root  105 1月  13 10:41 tmp1
-rw-r--r--. 1 root root   51 1月  13 10:46 tmp2

ll出来前面那一串-rw-r--r--,开头一格表示文件类型,后面每三个一组,分别表示属主(u)、属组(g)、其他人(o)的权限

权限类型

读r:4
写w:2
执行x:1
权限对文件对目录
r读取可ls
w可写可创建删除touch,rm
x可执行可cd

chmod 修改权限

chmod 权限(000-777) file

avatar

使用符号修改:

chmod对象赋值符权限类型file
u+r
g-w
o=x
a

avatar

chown修改属主数组

chown 属主:属组 file  #修改属主数组
chown 属主 file  #修改属主
chown :数组  file  #修改数组

setfacl getfacl ACL设置基本权限

-m:添加acl设定
-x:删除acl设定
-b:移除所有acl设定
-R:递归添加
-d:添加默认设定

[root@server1 tmp]# getfacl 123
# file: 123
# owner: root
# group: root
user::rwx
group::rwx
other::rwx

[root@server1 tmp]# setfacl -m u:u2:- 123
[root@server1 tmp]# getfacl 123
# file: 123
# owner: root
# group: root
user::rwx
user:u2:---
group::rwx
mask::rwx
other::rwx

特殊权限

文件有三种特殊权限:

SUID 4:借出程序所有者的权限,只对二进制程序有效
    s:程序属主有x权限,如果有,可以暂借
    S:程序属主没有x权限

SGID:借出属组的权限,只对二进制程序有效
    s:程序属主有x权限,如果有,可以暂借
    S:程序属主没有x权限

SBIT:用于共享目录,当属主拥有x权限,用小写的t表示,当没有,用T表示,当用户在此目录创建文件,只有root用户和自己可以删除该文件,其他用户不可修改

使用chomod来修改(分别对应ugo)

[root@server1 tmp]# ll /etc/passwd
-rw-r--r--. 1 root root 986 1月  13 18:58 /etc/passwd
# 虽然passwd普通用户没有w权限,但是依旧能够修改自己的密码
[root@server1 tmp]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[root@server1 /]# ll -d /tmp
drwxrwxrwt. 10 root root 242 1月  13 20:44 /tmp

umask

新建的目录和文件会收到umask影响,计算方式为777-umask

[root@server1 /]# umask 0000  #临时修改umask
[root@server1 ~]# mkdir test1
drwxrwxrwx. 2 root root    6 1月  13 20:51 test1

如果要长期修改,改/etc/profile,但不推荐

基础

每个进程都得作为特定的用户发起运行
与该进程相关的用户的权限确定该进程可访问的文件和目录
每个文件有由一个特定的用户所拥有
用户的权限决定了他能访问哪些文件和目录

uid:

0:root
1-999:系统用户
1000+:普通用户

查看

id

查看当前用户/某用户的信息

[root@server1 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@server1 ~]# id root
uid=0(root) gid=0(root) 组=0(root)

查看文件属主属组

[root@server1 ~]# ll test
-rw-r--r--. 1 root root 0 1月  13 10:13 test

查看进程的运行者

ps aux
avatar

用户信息相关文件

passwd:用户名:密码占位符:uid:gid:秒数:home:shell
avatar

shadow:密码相关
avatar

group:组相关
avatar

用户管理

groupadd,groupdel,gpassword

useradd,usermod,userdel

passwd,chage

用户组

[root@server1 ~]# groupadd t1
[root@server1 ~]# groupadd t2
[root@server1 ~]# groupadd -g 2000 t3 #指定gid
[root@server1 ~]# tail -n3 /etc/group
t1:x:1000:
t2:x:1001:
t3:x:2000:


[root@server1 ~]# groupdel t1
[root@server1 ~]# groupdel t2
[root@server1 ~]# tail -n3 /etc/group
chrony:x:996:
slocate:x:21:
t3:x:2000:

gpassword:将用户从组中添加或者删除

-a:添加
-d:删除
-r:删除密码
[root@server1 ~]# gpasswd -a u2 ttt
正在将用户“u2”加入到“ttt”组中
[root@server1 ~]# id u2
uid=1001(u2) gid=2000(t3) 组=2000(t3),2001(ttt)

用户

useradd:添加用户

-u:指定uid
-g:指定gid,该组必须已存在
-s:shell
-G:附加组,该组必须已存在
-r:创建系统用户
-c:注释
-d:家目录

默认添加的shell为/bin/bash,不同的shell有不同的功能和特点。如果想要创建一个安全的仅作运行进程用的用户,可以把shell指定为/sbin/nologin,该用户将无法使用登录功能,较为安全


[root@server1 ~]# useradd u1
[root@server1 ~]# useradd u2 -g 2000
[root@server1 ~]# useradd -G 2000 u3
[root@server1 ~]# id u1
uid=1000(u1) gid=1000(u1) 组=1000(u1)
[root@server1 ~]# id u2
uid=1001(u2) gid=2000(t3) 组=2000(t3)
[root@server1 ~]# id u3
uid=1002(u3) gid=1002(u3) 组=1002(u3),2000(t3)

userdel:删除用户

-r:删除用户的同时删除家目录和mail

[root@server1 ~]# userdel -r u1
[root@server1 ~]# id u1
id: u1: no such user

passwd:修改密码

root可以直接、强制修改
普通用户必须提供原密码,且得设置一个安全的密码
-n:指定最短使用期限
-x:指定最大使用期限
-w:提前多少天开始警告
--stdin:从标准输入接收用户密码,无需重复输入
[root@server1 ~]# passwd u2
更改用户 u2 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

[root@server1 ~]# echo '123' | passwd --stdin u3
更改用户 u3 的密码 。
passwd:所有的身份验证令牌已经成功更新。

chage

-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期” 
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期” 
-h, --help 显示此帮助信息并推出 -I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态 
-l, --list 显示帐户年龄信息 
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数” 
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数” 
-R, --root CHROOT_DIR chroot 到的目录 
-W, --warndays 警告天数 将过期警告天数设为“警告天数”

chage -d 0 username #强制用户在下次登录的时候修改密码

usermod:修改用户组

-G:覆盖原有附加组
-aG:添加新的附加组

[root@server1 ~]# id u3
uid=1002(u3) gid=1002(u3) 组=1002(u3),2000(t3)
[root@server1 ~]# groupadd ttt
[root@server1 ~]# usermod -G ttt u3
[root@server1 ~]# id u3
uid=1002(u3) gid=1002(u3) 组=1002(u3),2001(ttt)

login.defs

创建用户时参照的文件,此文件对root无效,当文件中的配置与passwd和shadow发生冲突时,以后两者为准

MAIL_DIR /var/spool/mail     创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。
PASS_MAX_DAYS 99999    密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。
PASS_MIN_DAYS 0    表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。
PASS_MIN_LEN 5    指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
PASS_WARN_AGE 7    指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。
UID_MIN 500     指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。
UID_MAX 60000    指定用户最大的 UID 为 60000。
GID_MIN 500    指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始。
GID_MAX 60000    用户 GID 最大为 60000。
CREATE_HOME yes    指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。
UMASK 077权限掩码为 077。
USERGROUPS_ENAB yes    指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。
ENCRYPT_METHOD SHA512

新建用户的家目录下的bash开头的文件是从/etc/skel/复制过去的

avatar
avatar

.bashrc:主要保存别名、系统路径,提示符

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions


如果想修改环境变量,如下
PATH=/usr/bin:/usr/local/bin:/bin

如果想修改别名,如下
alias xx='xx'

su与sudo

sudo提权

必须要先授权才能提权,未经授权使用sudo效果如下
avatar

提权方式参照/etc/sudoers,将该用户加入到wheel组里面

[root@server1 u2]# gpasswd -a u3 wheel
正在将用户“u3”加入到“wheel”组中

[u3@server1 home]$ useradd u4
-bash: /usr/sbin/useradd: 权限不够
[u3@server1 home]$ sudo useradd u4
[u3@server1 home]$ sudo useradd u5


[root@server1 u2]# tail -n4 /etc/passwd
u2:x:1001:2000::/home/u2:/bin/bash
u3:x:1002:1002::/home/u3:/bin/bash
u4:x:1003:1003::/home/u4:/bin/bash
u5:x:1004:1004::/home/u5:/bin/bash

su切换用户

su只切换身份,su -连身份和shell一起切换

avatar

重定向

标准输出:

标准正确输出1
标准错误输出2

输出重定向:

正确覆盖重定向>
正确追加重定向>>
错误覆盖重定向2>
错误追加重定向2>>

合并输出,即将正确输出和错误输出重定向为同一个数据流:

覆盖重定向&>
追加重定向&>>
将错误重定向到正确输出中2>&1
将正确重定向到错误输出中1>&2

输入重定向:

覆盖cat > file <<EOF .....EOF
追加cat >> file <<EOF......EOF

管道

command1 | command2 | command3

前一个命令的执行结果会被当过后一个命令的参数来使用

小工具

tr

转换

[root@server1 ~]# cat /etc/passwd |head -n3 | tr 'a-e' 'A-E' > tmp1
[root@server1 ~]# cat tmp1
root:x:0:0:root:/root:/Bin/BAsh
Bin:x:1:1:Bin:/Bin:/sBin/nologin
DAEmon:x:2:2:DAEmon:/sBin:/sBin/nologin

读取passwd前5行并把a-e转为大写把输出结果保存到文件中

-d:删除

wc

统计

-l:行数

-w:单词数

-c:字符数

[root@server1 ~]# cat /etc/passwd | wc -l
19

cut

切分

-d指定分隔符
-f指定字段

[root@server1 ~]# cat /etc/passwd | cut -d: -f2,3
x:0
x:1
x:2
x:3
x:4
x:5
x:6
x:7
x:8
x:11
x:12
x:14
x:99
x:192
x:81
x:999
x:74
x:89
x:998

sort

排序

-f:忽略大小写
-r:逆序
-t:字段分隔符
-k #:以指定字段为标准排序
-n:按照数值排序,不然按照首字母
-u:排序后去重

[root@server1 ~]# cat /etc/passwd | cut -d: -f3 | sort -nr > tmp2
[root@server1 ~]# cat tmp2
999
998
192
99
89
81
74
14
12
11
8
7
6
5
4
3
2
1
0

uniq

去重

-c:显示每行出现的行数
-d:只显示重复过的行
-u:只显示没重复的行

[root@server1 ~]# cut -d: -f6-10 /etc/passwd  | uniq -c
      1 /root:/bin/bash
      1 /bin:/sbin/nologin
      1 /sbin:/sbin/nologin
      1 /var/adm:/sbin/nologin
      1 /var/spool/lpd:/sbin/nologin
      1 /sbin:/bin/sync
      1 /sbin:/sbin/shutdown
      1 /sbin:/sbin/halt
      1 /var/spool/mail:/sbin/nologin
      1 /root:/sbin/nologin
      1 /usr/games:/sbin/nologin
      1 /var/ftp:/sbin/nologin
      4 /:/sbin/nologin
      1 /var/empty/sshd:/sbin/nologin
      1 /var/spool/postfix:/sbin/nologin
      1 /var/lib/chrony:/sbin/nologin

光标跳转

上下左右

上下左右
#command:跳转#个字符

单词跳转

w:下个单词的词首
e:下个单词的词尾
b:上个单词的词首
#command:跳转#个单词

行首行尾跳转

^:行首非空白字符
0:行首
$:行尾

行间移动

#G:跳到第#行
G:跳到尾巴
gg:跳到开头

文本编辑

删除

d:配合光标跳转删除
d^
d$
d#command
d0
dw
de
db
dd:删除光标所在行
#dd:删除多行
ggdG:删除全部

x删除光标所在字符
#x

复制剪切粘贴撤销

y,复制,用法类d
yy 以行为单位
#yy #行
ygg
yG

p粘贴

u撤销

模式转换

插入模式

a:选中字母后
i:选中字母
o:选中一行下面新建一行
A:行尾
esc:退出

末行模式

:
#:进入第几行
w:保存
w filename:另存为
q:退出
command!:强制
x 、ZZ:保存并退出
X:加密文档
r filename:读入文件到当前行后
# r filename:读入文件到5行后

查找替换

s/old/new/选项(g全文,c交互确认) 替换

50,100 s/man/MAN/gc 把50到100的man换成MAN并确认每一个替换

,$ s/.*// 从光标所在行开始一直到最后替换为空
如果出现替换文本里面有/,担心会造成歧义,可以使用#或者@来替代/

环境配置

在vim里面输入的都是临时的配置,如需永久环境,个人修改自己目录下的.vimrc,全局修改/etc/vimrc

set nu:行号
set nonu:取消行号
set ai:自动缩进
set noai:取消自动缩进
set ic:忽略字符的大小写
set noic:不忽略
set hlsearch:高亮搜索
set nohlsearch:不高亮
set sm:括号匹配
set nosm:不匹配
help:帮助

4VOTA[7XQ0{JYQX{D98(QNC.png
个人答案

cd /tmp
[root@server1 tmp]# mkdir vitest

[root@server1 tmp]# cd vitest/

[root@server1 vitest]# cp /etc/man_db.conf man.config

vi man.config


set nu

58G
40l

gg
?bzip2

50,100 s/man/MAN/gc   g为每行全部替换,不然只换一个,c为确认

u

65G
9yy
G
$
p

21,42 g/^#/d

w ./man.test.config

27G
d15l

gg
o
I am a student

esc
wq

基础概念

Linux系统内核指的是硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。 Linux操作系统是由Linux内核与各种常用软件的集合产品

shell:shell是系统的用户界面,他起到命令解释器的作用,能够把用户输入翻译成内核能够理解的内容

avatar

文件目录

avatar

bin -> usr/bin:普通用户使用的命令
sbin -> usr/sbin:管理员使用的命令
dev:设备文件(usb等连接到系统的任何设备)和特殊文件(块设备和字符设备等)
boot:引导加载程序文件
etc:配置文件
home:家目录,存放普通用户的个人档案
lib -> usr/lib:系统库,共享库文件以及内核模块文件
lib64 -> usr/lib64:专用于x86_64的辅助共享文件库
media:便携移动设备挂载点
mnt:临时文件系统挂载点
opt:第三方应用安装的地方
proc:输出内核与进程信息相关的虚拟文件系统
root:系统管理员的主目录
run:运行中进程相关的数据,存储进程的pid文件
srv:系统上运行的服务用到的数据,包含服务器特定服务相关的数据
tmp:临时文件存放位置,重启时清空
usr:二进制文件、库文件、文档、二级程序的源代码
var:存放着经常发生变化是数据文件

绝对位置、相对位置

常用命令

ip a 查看ip

ssh 用户名@ip

yum install 包名 安装软件包

hostnamectl set-hostname 主机名 修改主机名

systemctl disable firewalld 关闭防火墙开机自启

poweroff关机

pwd:查看当前所在目录

关闭selinux

setenforce 0
sed -i "s/=enforcing/=disabled/g" /etc/sysconfig/selinux

配置防火墙

firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload 12

初始化

yum install -y bash-completion //自动补全
yum install -y vim
hoatnamectl set-hostname server1 //修改主机名
systemctl disable firewalld //关闭防火墙开机自启

//做完后记得拍快照

基础指令

echo 字符串:输出字符串

whoami:输出当前用户名

date:查看当前时间

ls:查看当前目录的文件:

-a:查看所有文件
-d:目录
-l:将文件的详细信息以长格式的形式展开,可以直接输入ll
-h:将文件的大小以人看得懂的单位显示
-t:按时间逆序排序
-r:文件名逆序,默认是顺序
-i:打印inode号

命令后面的参数有两种-短参数和--长参数,短参数可以多条合并

history:查看命令历史

-a:追加记录到.bash_history
-d id:删除历史中指定的命令
-c:清空历史命令
!id:执行对于命令
!$:执行上一个命令的最后一个参数,如果没有参数,就执行命令本身
!string:查找以string开头的命令
^R:搜索历史命令

.bash_history文件记录了所有的命令历史,但是不是同步更新

alias str='cmd':别名,临时生效

想要永久别名需要修改/etc/bashrc,alias str='cmd'

cd des:切换目录

pwd:显示当前目录

文件管理

mkdir [-] name:创建目录

-m:配置文件权限
-p:递归创建
-v:显示创建过程

mkdir -pv /home/file{a..d}#一次性创建多个文件

touch name:创建新文件,当文件/目录已存在时,会更改其时间属性

cp [] src des:拷贝文件和目录

-f:强制,如果目标文件依旧存在且无法开启,则删除后再来一次
-i:如果目标已存在,覆盖前先询问,默认cp=ci -i
-l:复制为硬链接
-s:复制为软连接
-d:如果目标是链接,想要复制连接而非复制原文件,则使用这个,只复制连接属性
-p:连同属性一起复制过去
-r:递归
-a:-pdr
-u:如果des比src旧才升级
-v:显示过程

src为单个文件:

    des不存在,则把src写入到des中
    des存在,覆盖

src存在,des是目录:创建并写入

src是多个文件
    des必须是目录,src为目录:-r

    des为目录:
    des不存在:创建
    des存在:写入,如果文件已存在则覆盖
    des为文件:报错


mv src des:移动,可以改名

rm [] file:删除


-r:递归
-f:强制
-v:详细过程

建议移动到对应文件夹使用!以防从入门到删库跑路!

cat:一次性加载所有内容,顺序

tac:同cat,但是逆序

less:不会一次性加载所有内容,空格翻页,回车加载一行,可以回看

more:和less类似,但是不可回看

head:查看文件开头部分


-n:指定行数

tail:从文件尾部读取,并且会监控文件的更新

-n:指定行数,``-n +10``表示从第十行到结尾
-f:循环读取,监视更新

grep 'str' file:对内容进行过滤

vi/vim

光标跳转

上下左右

上下左右
#command:跳转#个字符

单词跳转

w:下个单词的词首
e:下个单词的词尾
b:上个单词的词首
#command:跳转#个单词

行首行尾跳转

^:行首非空白字符
0:行首
$:行尾

行间移动

#G:跳到第#行
G:跳到尾巴
gg:跳到开头

文本编辑

删除

d:配合光标跳转删除
d^
d$
d#command
d0
dw
de
db
dd:删除光标所在行
#dd:删除多行
ggdG:删除全部

x删除光标所在字符
#x

复制剪切粘贴撤销

y,复制,用法类d
yy 以行为单位
#yy #行
ygg
yG

p粘贴

u撤销

模式转换

插入模式

a:选中字母后
i:选中字母
o:选中一行下面新建一行
A:行尾
esc:退出

末行模式

:
#:进入第几行
w:保存
w filename:另存为
q:退出
command!:强制
x 、ZZ:保存并退出
X:加密文档
r filename:读入文件到当前行后
# r filename:读入文件到5行后

查找替换

s/old/new/选项(g全文,c交互确认) 替换

50,100 s/man/MAN/gc 把50到100的man换成MAN并确认每一个替换

,$ s/.*// 从光标所在行开始一直到最后替换为空
如果出现替换文本里面有/,担心会造成歧义,可以使用#或者@来替代/

环境配置

在vim里面输入的都是临时的配置,如需永久环境,个人修改自己目录下的.vimrc,全局修改/etc/vimrc

set nu:行号
set nonu:取消行号
set ai:自动缩进
set noai:取消自动缩进
set ic:忽略字符的大小写
set noic:不忽略
set hlsearch:高亮搜索
set nohlsearch:不高亮
set sm:括号匹配
set nosm:不匹配
help:帮助