Liunx之基础学习
用户提权命令之-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
分 时 日 月 周
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 * * * #每周六、日的下午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源的步骤
#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、安装工具(退出虚拟环境)
pip3 install -i https://pypi.douban.com/simple virtualenvwrapper
2、配置用户个人变量配置文件,每次开机都加载这个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
3、退出会话,重新登录,查看是否加载了virtualenvwrapper工具
deactivate
4、工具创建后,使用命令管理
4.工具创建后,使用命令管理
#创建虚拟环境
#创建虚拟环境后会自动激活
mkvirtualenv django1
mkvirtualenv django2
5、激活虚拟环境
#激活虚拟环境
workon 虚拟环境的名字(支持tab补全)
lsvirtualenv #列出所有虚拟环境的目录 cdvirtualenv #进入已激活的虚拟环境的目录 cdsitepackages #进入虚拟环境下的第三方模块目录
Liunx之基础学习的更多相关文章
- C++基础 学习笔记之一:源代码的格式化
C++基础 学习笔记之一:源代码的格式化 1. 源代码中的标记与空白 C++中的语句是以分号表示语句的结束.在C++中空格和回车以及制表符均为相同作用,即三者通常可以互相替代. 例如可以将一个简单的m ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
- CSS零基础学习笔记.
酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
随机推荐
- C# 第一次做项目。一些经验总结。
这是我的第一篇博客,写得不好望大家多多包涵. 初学C#2个多月,拿着老师给的项目,试着做了做,发现自己在编程方面有很多陋习与编程知识方面的不足. 首先是没有遵守某一个设计模式,这导致我想到哪里就做到了 ...
- 四大伪类,css鼠标样式设置,reset操作,静止对文本操作
07.31自我总结 一.a标签的四大伪类 a:link{样式} 未访问时的状态(鼠标点击前显示的状态) a:hover{样式} 鼠标悬停时的状态 a:visited{样式} 已访问过的状态(鼠标点击后 ...
- kong网关命令(一)
上次在虚拟机里安装kong网关后,因为版本(1.4)太高,目前Kong Dashboard无法支持, 后续发现Git上有个开源工具Kong admin ui,下载源码并部署到NGINX. 但是发现使用 ...
- 通过数组的某一个属性值进行排序(如id)
let arr = [ {id: 1, name: 'aaa'}, {id: 4, name: 'ddd'}, {id: 2, name: 'bbb'}, {id: 3, name: 'ccc'} ] ...
- centos安装netcat工具及测试
netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据.通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它.使用netcat命令所能完成的事情令人惊讶. netcat所做的 ...
- Python 中文文件统计词频 + 中文词云
1. 词频统计: import jieba txt = open("threekingdoms3.txt", "r", encoding='utf-8').re ...
- linux centos Supervisor守护.netcore进程安装配置
场景:当部署完.netcore程序后 使用dotnet xx.dll 后可以运行,但关闭shell或隔断时间会自动断开,此时部署的.netcore程序就不能访问了,此时需要用到Supervisor了 ...
- [Selenium3+python3.6]自动化测试3-八种元素元素定位(Firebug和firepath)
参考http://www.cnblogs.com/yoyoketang/p/6123890.html #coding=utf-8 from selenium import webdriverdri ...
- vue-cli webpack打包后index.html引入文件没有引号
参考地址:https://blog.csdn.net/i_coffer/article/details/81005733 在对vue-cli项目打包后出现index.html引入的css和js没有引号 ...
- 《流畅的Python》 Sequence Hacking, Hashing and Slicing(没完成)
序列修改,散列和切片 基本序列协议:Basic sequence protocol: __len__ and __getitem__ 本章通过代码讨论一个概念: 把protocol当成一个正式接口.协 ...