shell入门及常用的文本命令:
不打引号也可以识别变量
ubantu默认是禁用root用户的,启用root的命令:sudo passwd root
默认情况下 root用户也是不能远程登录ubantu系统的
su – root 切换到root用户
sudo 是一个授权的命令 得到了root用户的授权
程序用户和系统用户差不多一个概念
0 root
1~201 系统安装好就有的用户 ==》系统用户(程序用户):用来登陆或启动某个程序
201~999 自己新建的系统用户(程序用户)
1000~60000 自己新建的用户(自己指定uid的时候可以超过60000 但是不指定的话如果超过60000 会找范围内的空闲uid)
useradd -r 用户名:创建系统用户 但是不会新建家目录
权限:
用户
进程
进程的组成:进程控制块(PCB) 代码 数据
PCB包含信息:1.进程状态(state)2.进程标识信息(euid,egid) 3.定时器(time)4.用户可见寄存器,控制状态寄存器,栈指针等(tss),进程标识符(pid)
权限
cpu里面一个时间片一般为10ms
Python里面的os库里面有个os.getuid()会出现运行这个python的用户的uid
权限:读 r 写 w 执行 x
文件:
读 :命令: cat vim grep head tail more less
写:命令:vim >> >
执行:运行脚本里的命令: ./a.sh /lianxi/a.sh
文件夹:
读:命令: ls
写:命令:cp mv rm touch mkdir等
执行:命令:cd
shell里面变量记得分隔开
chmod +(-)x/r/w 路径 :给文件或者文件夹设置权限
chmod 三位数 文件名:这三位数分别对三个对象设置相应权限
直接运行文件: ./文件 (需要给脚本文件授予可执行权限)
(shell解释器在帮助创建子进程的时候 需要检查权限)
- 使用相对路径 2.使用绝对路径
自己 user 陌生人 other 亲朋好友 group
一般都会给普通文件夹rx权限 但是家目录权限非常严格 为700
root用户不受权限的制约 就算是000 root用户也能读写执行
chmod:
这两个命令效果相同
-R:递归文件夹下面的所有子文件(放在命令最末尾)
默认情况下root用户新建的很多文件夹都是755
chmod 777 / -R 等同于 rm -rf /*
普通用户可以在自己的家目录和/tmp目录下新建文件夹 和使用chmod
对文件夹进行操作的的时候不需要看文件的权限 如删除文件
chown命令:必须是root用户操作 且用户和组必须存在
ss:查看哪些端口被哪些进程调用
服务后面有一个进程 进程会打开一个端口(一个端口只能被一个进程使用)
在内核级别,文件的初始权限666
在内核级别,文件夹的初始权限为777
umark(权限掩码): 控制默认权限,临时有效
(默认root为0022 第一个0代表八进制 普通用户为0002)
新建文件或者文件夹生效的权限:初始权限-umark
unset 取消变量
/etc/profile==》用来配置用户进入系统的环境变量的==》任何用户登录系统都会执行这个脚本
命令替换:` ab`=$(ab)
shell编程:
看zhaowei的笔记
命令1 &&命令2 前面命令执行成功就执行后面
命令1||命令2 前面的命令执行不成功就执行后面的命令
命令1&&命令2||命令3 前面的命令1执行成功就执行2,如果不成功就执行3
但是在if里面 &&表示与 ||表示或
面试:
你是如何学习shell编程/python等?
- 看shell编辑书籍或者技术网站,官方网站—》语法,案例—》知识的全面性
- 看Linux系统里自带的脚本
- 看工作中的同事们写的脚本
- 看视频—》版本比较老 已经更新
建立稀奇古怪的文件名 就用单引号标注
test方法和中括号方法一样的:[ -e file ]等同于test -e file
判断文件是否存在且是否为文件
[ -f file ]
判断文件是否存在且是否为可写文件
[ -w file ]
判断文件是否存在且是否为可执行文件
[ -x file ]
判断文件是否存在且是否为可读文件
[ -r file ]
判断文件是否存在且是否为目录文件
[ -d file ]
判断文件是否存在且是否为空文件
[ -s file ]
判断文件是否存在
[]和 test功能一样 -a和-o(和,或)
[]方法中,里面的字符与[]需要有空格隔开
-n 判断是否不为0
-z 判断是否为0
${#变量}:得出变量名
cp -a:复制文件的时候 保留文件所有的属性
/tmp 是存放临时文件的 任何用户创建进程都可以在此处新建文件和文件夹
/root root用户的家目录
/home 普通用户的家目录
/bin 存放可执行二进制程序
/usr 存放Linux系统资源:各种程序默认会安装到这个文件里
/etc 存放各种配置文件
chattr:设置文件的隐藏属性
-a 只能往文件或文件夹里追加内容 只增不减
(对于文件:用vim打开不能实现增加 所以只能echo 输入内容 >>文件名)
-i 不能动文件或者文件夹里的内容,不能增加和删除,不能修改
(加了隐藏属性之后 连root用户都被限制 了)
lsattr:查看文件的隐藏属性
-d:表示只显示此文件或者文件夹的隐藏属性
SET位权限:(一般用于可执行命令)
suid权限:普通用户在执行命令的时候,会以命令的拥有者(root)的权利去行使
Linux系统,默认所以的命令都是root的
使用chmod u+s 文件名: 赋予文件suid权限
使用chmod u-s 文件名 :取消文件的suid权限
普通用户 执行命令的时候以root用户的身份去执行
如果不管看会导致系统权限泛滥,出现安全问题
superuid
如:如果给mkdir赋予了suid权限 则每个普通用户都可以以root用户身份去建文件夹
(组还是自己的)
原来有x权限的话是S 没有x权限的话是s
如 passwd命令就拥有suid权限 故普通用户都可以更改自己的密码
sgid:以文件属组的权限执行文件(如mkdir 用户还是自己的)
chmod g+s 文件名 chmod g-s 文件名
而chmod +s 文件名:新加了suid和sgid
进程里面有uid和euid(有效的uid)gid和egid(有效的gid)
粘滞位权限:(一般用于文件夹)
ACL:文件或者文件夹的访问控制列表,可以正对任意指定的用户/组
setfacl -m u:song:rwx test/ 对于test文件给song这个用户增加读写执行的权限
setfacl -m g:song:rwx test/ 对于test文件给song这个组增加读写执行的权限
两个一起写的时候,中间用逗号隔开
getfacl test:查看test的ACL
一个用户属于某个组会继承这个组的权限 1.主要组 2.次要组
用户的主要组(有效组)属于某个 组,会继承这个组的权限,如果是附属组属于某个组,也会继承
拒绝权限高于一切==》针对用户
如果一个用户 一个组允许 一个组拒绝 ==》最后就是允许
sudo授权
Linux里root用户权限最大
关机,重启系统IP地址,格式化磁盘,mount等
普通用户权限非常小
如何让普通用户也具有一定的权限? 给root用户分忧
如果能授权,那么是授权给用户还是组?
乌班图默认是授权给组
Centos怎么这样授权
授权书:/etc/sudoers
如下:给用户授权(用户要设密码)
如下 给组授权就在组名称前面加 %
授权用户执行命令前面应该加一个 sudo
有一个日志会记录下被授权者的所有命令:/var/log/secure
/var 存放可变化的文件的
log 日志文件 是不停的记录程序发生的事情
secure 是与Linux安全相关的日志
登录进入Linux,新建用户,设置密码
messages 平时可以记录的日志,默认都记录到messages
==》rsyslogd进程会记录能记录的各种消息都会记录一份到messages文件里
boot.log :开机启动的过程中的日志
==
/bin:对权限没要求的命令
/sbin:有特权的用户(root)使用的命令 如useradd