用户提权命令之-sudo
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers
中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法:
sudo 【选项】【参数】 -b:在后台执行指令; -h:显示帮助; -H:将HOME环境变量设为新身份的HOME环境变量; -k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。 -l:列出目前用户可执行与无法执行的指令; -p:改变询问密码的提示符号; -s<shell>:执行指定的shell; -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份; -v:延长密码有效期限5分钟; -V :显示版本信息。
实例
这个sudo命令用在什么时候呢?
看图
怎么办?权限不够,这时候需要sudo ls /root 以root身份去运行,chaoge权利小,root总可以了吧!!
这是由于配置sudo必须编辑/etc/sudoers文件,并且只有root才能修改,咱们可以通过visudo命令直接编辑sudoers文件,使用这个命令还可以检查语法,比直接编辑 vim /etc/sudoers更安全
visudo 编辑sudoers文件 写入 ## Allow root to run any commands anywhere root ALL=(ALL) ALL chaoge ALL=(ALL) ALL #允许chaoge在任何地方,执行任何命令
此时切换chaoge用户 #su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。 su - chaoge 已经可以使用sudo ls /root 命令
若想取消用户的sudo这个权限 在sudoeres将该用户删除即可
文件目录与权限
Linux权限的目的是(保护账户的资料)
Linux权限主要依据三种身份来决定:
- user/owner 文件使用者,文件属于哪个用户
- group 属组,文件属于哪个组
- others 既不是user,也不再group,就是other,其他人
什么是权限
在Linux中,每个文件都有所属的所有者,和所有组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限。 对于目录的权限来说,可读是读取目录文件列表,可写是表示在目录内新增,修改,删除文件。可执行表示可以进入目录
解读上图:
- 权限,第一个字母为文件类型,后续9个字母,每3个一组,是三种身份的权限
- 文件链接数
- 文件拥有者-属主
- 文件拥有组-属组
- 文件大小
- 最后一次被修改的时间日期
- 文件名
先来分析一下文件的类型
- 一般文件 d 文件夹 l 软连接(快捷方式) b 块设备,存储媒体文件为主 c 代表键盘,鼠标等设备
文件权限
r read可读,可以用cat等命令查看 w write写入,可以编辑或者删除这个文件 x executable 可以执行
目录权限
权限这里测试不要用root实验!!!!root太牛逼了
请用普通用户执行!!!!!测试文件、文件夹权限操作,请用普通用户!
r 可以对此目录执行ls列出所有文件 w 可以在这个目录创建文件 x 可以cd进入这个目录,或者查看详细信息
权限与数字转化
修改文件权限属性
普通用户只能修改自己的文件名,时间与权限(注意) 因此修改其他用户权限,只能用最nb的root用户
当前文件信息 -rw-r--r--. 1 root root 0 Jun 28 14:36 小护士电话.txt 修改属主: chown roo 小护士电话.txt 查看信息: -rw-r--r--. 1 roo root 0 Jun 28 14:36 小护士电话.txt 修改属组: chgrp roo 小护士电话.txt 查看信息: -rw-r--r--. 1 roo roo 0 Jun 28 14:36 小护士电话.txt
修改文件权限
我们已知三种身份权限(属主,属组,其他人),每种身份都有rwx的三种权限,系统还提供了数字计算权限。
r read 4 w write 2 x execute 1
每种身份最低是0分,最高是r+w+x 7分
因此三种身份,最高权限是777,最低是000
-rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt 因此可知pyyu.txt的权限是 属主是6 r+w(4+2) 属组是6 r+w(4+2) 其他人是4 r(4)
命令:
chmod
chmod [身份] [参数] [文件] u(user) +(添加) g(group) -(减去) o(other) =(赋值) a(all)
例如:
当前权限 -rw-rw-r-- 1 root root 0 8月 11 16:41 11.txt 方法1 减去属主的写权限 chmod u-w 11.txt 查看权限 -r--rw-r-- 1 root root 0 8月 11 16:41 11.txt 方法2 属主添加可读可写可执行权限 chmod 700 11.txt 属主可读可写可执行 属组可读可执行 其他人可读可执行 chmod 755 11.txt
软链接
软连接也叫做符号链接,类似于windows的快捷方式。
常用于安装软件的快捷方式配置,如python,nginx等
ln -s 目标文件 软连接名 1.存在文件/tmp/test.txt [root@master tmp]# ls -l -rw-r--r-- 1 root root 10 10月 15 21:23 test.txt 2.在/home目录中建立软连接,指向/tmp/test.txt文件 ln -s /tmp/test.txt my_test 3.查看软连接信息 lrwxrwxrwx 1 root root 13 10月 15 21:35 my_test -> /tmp/test.txt 4.通过软连接查看文件 cat my_test my_test只是/tmp/test.txt的一个别名,因此删除my_test不会影响/tmp/test.txt,但是删除了本尊, 快捷方式就无意义不存在了
PS1变量
Linux命令提示符由PS1环境变量控制
[root@oldboy_python ~]# echo $PS1 [\u@\h \W]\$ 一定要用单引号设置 可以自行调整全局变量/etc/profile文件用于永久生效 PS1='[\u@\h \W\t]\$' \d 日期 \H 完整主机名 \h 主机名第一个名字 \t 时间24小时制HHMMSS \T 时间12小时制 \A 时间24小时制HHMM \u 当前用户账号名 \v BASH的版本 \w 完整工作目录 \W 利用basename取得工作目录名 \# 下达的第几个命令 \$ 提示字符,root为#,普通用户为$ PS1 > 变量名 $PS1 > 查看变量内容 PS1=新内容 重新赋值 变量赋值,查看 name='chaoge' echo $name PS1显示ip地址 export PS1="[\u@\h `/sbin/ifconfig ens33 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'` \w]\$"
linux的网络端口管理命令
netstat [选项] -t或--tcp:显示TCP传输协议的连线状况; -u或--udp:显示UDP传输协议的连线状况; -n或--numeric:直接使用ip地址,而不通过域名服务器; -l或--listening:显示监控中的服务器的Socket; -p或--programs:显示正在使用Socket的程序识别码和程序名称; -a或--all:显示所有连线中的Socket;
linux进程管理
ps -ef 显示所有进程 通过进程id号管理 #杀死进程的命令 kill 进程id kill还有一个参数 -9 参数 kill -9 用于杀死不重要的僵尸进程 ,强制杀死进程
批量杀死进程的命令
pkill 进程的名字
tree
安装:yum install -y tree
tree命令以树状图列出目录的内容。 -a:显示所有文件和目录; -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合; -C:在文件和目录清单加上色彩,便于区分各种类型; -d:先是目录名称而非内容; -D:列出文件或目录的更改时间; -f:在每个文件或目录之前,显示完整的相对路径名称; -F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号; -g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码; -i:不以阶梯状列出文件和目录名称; -l:<范本样式> 不显示符号范本样式的文件或目录名称; -l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录; -n:不在文件和目录清单加上色彩; -N:直接列出文件和目录名称,包括控制字符; -p:列出权限标示; -P:<范本样式> 只显示符合范本样式的文件和目录名称; -q:用“?”号取代控制字符,列出文件和目录名称; -s:列出文件和目录大小; -t:用文件和目录的更改时间排序; -u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码; -x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录予以排除在寻找范围外。
dns解析流程
#dns解析流程 1.浏览器输入域名的时候,浏览器优先去hosts文件中寻找是否有对应记录 2.没有记录就去dns本地缓存中寻找,是否有记录 3.寻找是否配置了dns服务器,然后去公网中寻找记录 4.找到了就缓存到本地dns记录中, 5.解析结束
#dns域名解析系统 作用:把域名解析为ip地址,网络中的一个超大电话簿 公网中,存在dns服务器,进行解析 在linux中的dns服务器配置文件是 /etc/resolv.conf 里面定义了网络中的dns dns : 阿里巴巴: 223.5.5.5 223.6.6.6 腾讯的dns:119.29.29.29 谷歌的dns:8.8.8.8 114的dns:114.114.114.114 #hosts文件,强制解析了,也可能更换了你的dns记录,用于测试本地的假域名
定时任务
什么是计划任务:
后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。这就用到了crond服务
crond服务相关的软件包
[root@MiWiFi-R3-srv ~]# rpm -qa |grep cron
cronie-anacron-1.4.11-14.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-14.el7.x86_64
这些包在最小化安装系统时就已经安装了,并且会开机自启动crond服务,并为我们提供好编写计划任务的crontab命令。
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似
语法:
crontab (选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该用户的计时器设置; -u<用户名称>:指定要设定计时器的用户名称。 存放定时任务的文件 /var/spool/cron
注意:
1 .查看计划任务的执行:tail -f /var/log/cron
2. 写计划任务时,命令必须加上绝对路径,否则会出现这种情况:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如* * * * * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot
3. 计划任务执行的命令 是否存在,软件是否安装
4. 确保crontab服务运行
systemctl status cron ps -ef|grep crond
5. 检测crontab是否开机启动
systemctl is-enabled crond
编辑定时任务:
crontab -e #编辑定时任务的文件 crontab -l #列出定时任务的规则
crontab配置文件:
在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 分 时 日 月 周View Code
crontab任务配置基本格式:
crontab任务配置基本格式: * * * * * command 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 08 * * * 每天8.30去上班 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。 */3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com 每隔三分钟执行下时间同步View Code
所有命令一定要用绝对路径来写!
分 时 日 月 周 你要执行的命令的绝对路径 * * * * * #每分钟执行一次命令 * * * * * 命令绝对路径 #每小时的3,15分组执行命令 分 时 日 月 周 你要执行的命令的绝对路径 3,15 * * * * #每小时的整点执行命令 0 * * * * #在上午8-11点的第3和第15分钟执行 3,15 8-11 * * * #每晚21:30执行命令 30 21 * * * #每周六、日的下午1:30执行命令 30 13 * * 6,0 #每周一到周五的凌晨1点,清空/tmp目录的所有文件 0 1 * * 1-5 /usr/bin/rm -rf /tmp/* #每晚的21:30重启nginx 30 21 * * * /usr/bin/systemctl restart nginx #每月的1,10,22日的4:45重启nginx 45 4 1,10,22 * * /usr/bin/systemctl restart nginx #每个星期一的上午8点到11点的第3和15分钟执行命令 3,15 8-11 * * 1
配置阿里云的yum源的步骤
1 2 3 |
#linux的yum仓库目录是:
cd / etc / yum.repos.d / 这个目录下,第一层中,所有以.repo结尾的文件,都会识别为一个yum仓库
(这个仓库就是一个url),url中提供了各种rpm包的下载,yum工具回去查找
|
配置阿里云的yum源的步骤 1.地址如下:https://opsx.alibaba.com/mirror 2.备份原本的yum仓库文件 cd /etc/yum.repos.d #新建文件夹 mkdir allrepo #移动所有的repo文件到这个目录下,咱不用它了 mv * ./allrepo 3.下载新的阿里云的yum仓库文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #-O 代表把Centos-7.repo 下载到指定目录,且改名 4.配置额外的第三方仓库 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 5.可以测试yum工具安装一个nginx yum install nginx -y 6.启动nginx测试访问 systemctl start nginx 7、关闭nginx systemctl stop nginx
yum还提供了哪些用法
yum repolist all 列出所有仓库 yum list all 列出仓库所有软件包 yum info 软件包名 查看软件包信息 yum install 软件包名 安装软件包 yum reinstall 软件包名 重新安装软件包 yum update 软件包名 升级软件包 yum remove 软件包名 移除软件包 yum clean all 清楚所有仓库缓存 yum check-update 检查可以更新的软件包 yum grouplist 查看系统中已安装的软件包 yum groupinstall 软件包组 安装软件包组 centos7用systemctl 管理服务 例如: systemctl start/stop/reload/restart/ nginx systemctl enable nginx #设置nginx开机自启 systemctl disable nginx #禁止nginx开机自启 systemctl stop firewalld #临时关闭防火墙服务 systemctl disable firewalld #永久关闭开机自启
python的虚拟环境工具安装
(注意,你的PATH变量,编译安装的python3一定要放在最前面)
1、下载虚拟环境工具(这里是在物理环境下安装的) pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv 2、创建虚拟环境,分别运行一个django1和django2 进入一个统一管理的目录,管理虚拟环境例如/opt/allenv mkdir /opt/allenv cd /opt/allenv # 创建虚拟环境命令 virtualenv --no-site-packages --python=python3 venv1 #参数解释 --no-site-packages 不要任何的第三方包 --python 是指定一个解释器 我们选的是python3 venv1是虚拟环境文件夹的名字,自定义 3、进入虚拟环境目录,激活虚拟环境 source是linux的读取命令,读取一个脚本文件,激活虚拟环境 source /opt/allenv/venv1/bin/activate 4、虚拟环境使用原理是,修改了PATH变量,根据pATH的优先级,使用解释器 echo $PATH 5、激活虚拟环境,在venv1下创建django1.11.9项目 pip3 install django==1.11.9 6、再开一个窗口,创建venv2,用于创建django2的项目 django-amind startproject mydjango01 7、退出虚拟环境的命令 deactivate
解决python的环境一致性问题
(将windows中解释器的模块,导出到一个文件,然后发送给linux一个新的虚拟环境安装即可)
1.在windows中导出所有的模块信息 pip3 freeze > requirements.txt 2.将次文件,发送给linux服务器,可选lrzsz 或scp 3.在linux中安装即可 # 相对路径安装 pip3 install -i https://pypi.douban.com/simple -r requirements.txt # 绝对路径安装 pip3 install -i https://pypi.douban.com/simple -r /opt/Python-3.6.2/requirements.txt
window中也创建了虚拟环境,并且模块都在虚拟环境下
想要导出这个虚拟环境中的模块,给linxu
步骤: 1.第一步,在windows中激活虚拟环境,在虚拟环境下 pip3 freeze > requirements.txt 2.将次文件,发送给linux服务器,可选lrzsz 或scp 3.在linux中安装即可 pip3 install -i https://pypi.douban.com/simple -r requirements.txt
virtualenvwrapper工具
1、安装工具(退出虚拟环境)
1 |
pip3 install - i https: / / pypi.douban.com / simple virtualenvwrapper
|
2、配置用户个人变量配置文件,每次开机都加载这个virtualevnwrapper工具
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#系统变量配置文件
/ etc / profile
#个人用户变量配置文件,在用户家目录下找到这个~/.bash_profile文件,写入如下配置
vim ~ / .bash_profile #打开文件,写入如下变量
#设置virtualenv的统一管理目录
export WORKON_HOME = ~ / Envs
#添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS = '--no-site-packages'
#指定python解释器
export VIRTUALENVWRAPPER_PYTHON = / opt / python36 / bin / python
#只有这一步,才是让这个工具生效的!!!!!!!
source / opt / python36 / bin / virtualenvwrapper.sh
|
3、退出会话,重新登录,查看是否加载了virtualenvwrapper工具
1 |
deactivate
|
4、工具创建后,使用命令管理
1 2 3 4 5 |
4. 工具创建后,使用命令管理
#创建虚拟环境
#创建虚拟环境后会自动激活
mkvirtualenv django1
mkvirtualenv django2
|
5、激活虚拟环境
1 2 |
#激活虚拟环境
workon 虚拟环境的名字(支持tab补全)
|
lsvirtualenv #列出所有虚拟环境的目录 cdvirtualenv #进入已激活的虚拟环境的目录 cdsitepackages #进入虚拟环境下的第三方模块目录