sudo命令用来以其余身份来执行命令,预设的身份为root。在/etc/sudoers
中设置了可执行sudo指令的用户。若其未经受权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,以后有5分钟的有效期限,超过时限则必须从新输入密码。python
语法:linux
sudo 【选项】【参数】 -b:在后台执行指令; -h:显示帮助; -H:将HOME环境变量设为新身份的HOME环境变量; -k:结束密码的有效期限,也就是下次再执行sudo时便须要输入密码;。 -l:列出目前用户可执行与没法执行的指令; -p:改变询问密码的提示符号; -s<shell>:执行指定的shell; -u<用户>:以指定的用户做为新的身份。若不加上此参数,则预设以root做为新的身份; -v:延长密码有效期限5分钟; -V :显示版本信息。
实例nginx
这个sudo命令用在何时呢?git
看图shell
怎么办?权限不够,这时候须要sudo ls /root 以root身份去运行,chaoge权利小,root总能够了吧!!django
这是因为配置sudo必须编辑/etc/sudoers文件,而且只有root才能修改,我们能够经过visudo命令直接编辑sudoers文件,使用这个命令还能够检查语法,比直接编辑 vim /etc/sudoers更安全vim
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权限的目的是(保护帐户的资料)windows
Linux权限主要依据三种身份来决定:centos
在Linux中,每一个文件都有所属的全部者,和全部组,而且规定了文件的全部者,全部组以及其余人对文件的,可读,可写,可执行等权限。
对于目录的权限来讲,可读是读取目录文件列表,可写是表示在目录内新增,修改,删除文件。可执行表示能够进入目录
解读上图:浏览器
先来分析一下文件的类型
- 通常文件
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]\$"
netstat [选项] -t或--tcp:显示TCP传输协议的连线情况; -u或--udp:显示UDP传输协议的连线情况; -n或--numeric:直接使用ip地址,而不经过域名服务器; -l或--listening:显示监控中的服务器的Socket; -p或--programs:显示正在使用Socket的程序识别码和程序名称; -a或--all:显示全部连线中的Socket;
ps -ef 显示全部进程 经过进程id号管理 #杀死进程的命令 kill 进程id kill还有一个参数 -9 参数 kill -9 用于杀死不重要的僵尸进程 ,强制杀死进程
批量杀死进程的命令
pkill 进程的名字
安装: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解析流程 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 分 时 日 月 周
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字段若是是星号,则表示在知足其它字段的制约条件后每个月都执行该命令操做。 30 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 每隔三分钟执行下时间同步
全部命令必定要用绝对路径来写!
分 时 日 月 周 你要执行的命令的绝对路径 * * * * * #每分钟执行一次命令 * * * * * 命令绝对路径 #每小时的3,15分组执行命令 分 时 日 月 周 你要执行的命令的绝对路径 3,15 * * * * #每小时的整点执行命令 0 * * * * #在上午8-11点的第3和第15分钟执行 3,15 8-11 * * * #每晚21:30执行命令 30 21 * * * #每周6、日的下午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
#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 #永久关闭开机自启
(注意,你的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 五、激活虚拟环境,在venv1下建立django1.11.9项目 pip3 install django==1.11.9 6、再开一个窗口,建立venv2,用于建立django2的项目 django-amind startproject mydjango01 7、退出虚拟环境的命令 deactivate
(将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
一、安装工具(退出虚拟环境)
pip3 install -i https://pypi.douban.com/simple virtualenvwrapper
二、配置用户我的变量配置文件,每次开机都加载这个virtualevnwrapper工具
#系统变量配置文件 /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
三、退出会话,从新登陆,查看是否加载了virtualenvwrapper工具
deactivate
四、工具建立后,使用命令管理
4.工具建立后,使用命令管理 #建立虚拟环境 #建立虚拟环境后会自动激活 mkvirtualenv django1 mkvirtualenv django2
五、激活虚拟环境
#激活虚拟环境 workon 虚拟环境的名字(支持tab补全)
lsvirtualenv #列出全部虚拟环境的目录 cdvirtualenv #进入已激活的虚拟环境的目录 cdsitepackages #进入虚拟环境下的第三方模块目录