Fork me on GitHub

Linux Day03

Day03


sudo权限配置

execute a command as another user;以另外一个用户的身份执行指定的命令;
授权机制:sudo的授权文件,/etc/sudoers

两类内容:

  1. 别名的定义,即为变量;
  2. 授权项,可使用别名进行授权;

授权项(每行一个授权项)

who		where=(runas)  commands

users	hosts=(runas)  commands

帮助手册:

  1. man sudoers
  2. man visudo

建议使用visudo进行编译,会自动帮助检查语法错误

注意:用户通过sudo获得的授权,只能以sudo命令来启动

sudo命令:

sudo [options] COMMAND
	-u username:以指定的用户身份运行命令;
	-l:列出用户能以sudo方式执行的所有命令;
	-K:清除此前缓存的用户认证成功的结果;

sudo su -:切换至管理员;

配置文件

配置文件中的各项解释

who:
	username:单个用户
	#uid:单个用户的ID号
	%groupname:组内的所有用户
	%#gid:组内的所有用户;
	user_alias:用户别名;

where:
	ip或hostname:单个主机;
	netAddr:网络地址;
	host_alias:主机别名
	
whom:
	username
	#uid
	runas_alias
	
commands:
	command:单个命令;
	directory:指定目录内的所有应用程序;
	sudoedit:特殊权限,可用于向其他用户授予sudo权限;
	comnd_alias:命令别名;

定义别名的方法

ALIAS_TYPE NAME=item1,item2,……
	
ALIAS_TYPE:
	User_Alias
	Host_Alias
	Runas_Alias
	Cmnd_Alias
	
NAME:别名的名称字符,必须使用全大写字母;

示例

User_Alias USERADMINS = tom,jerry
Cmnd_Alias USERADMINCMNDS=/usr/sbin/useradd,/usr/bin/passwd,/usr/sbin/usermod

USERADMINS ALL=(root) USERADMINCMNDS

Cmnd_Alias USERADMINS=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-z]*,!/usr/bin/passwd root,/usr/sbin/usrdel

常用标签

  1. NOPASSWD 不需要密码,可直接使用其他用户命令;
  2. PASSWD

示例:

fedora ALL=(root) NOPASSWD: /user/sbin/useradd,/user/bin/passwd, PASSWD: /user/sbin/usermod

简单示例

# visudo

root	ALL=(ALL)	ALL
hdp01	ALL=(ALL)	ALL

切换用户

su命令

su - user
su -l user
su user -c \`COMMAND\`  # 以user用户执行命令

文件权限管理

文件权限介绍

d                   rwxr-xr-x:
文件类型              文件权限

drwxr-xr-x.:文件类型和权限 
2:链接数。普通文件链接数是1;目录链接数是子目录的个数。
root:所属的用户
root:所属组
4096: 文件大小
Oct 29 16:40:修改日期
Desktop:文件名称

文件类型

d:目录
-:普通文件  
l:链接文件
c:字符设备文件
b:二进制设备文件 
p:管道文件
s:socket文件

文件权限

ls -l
rwxrwxrwx

左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限

权限:
r:readable,读
w:wirteable,写
x:excuteable,执行

文件:
r:可获取文件的数据;
w:可修改文件的数据;
x:可将此文件运行为进程;

目录:
r:可使用ls命令获取其下的所有文件列表;
w:可修改此目录下的文件列表;即创建或删除文件,包括子目录。
x:可cd至此目录中;且可使用ls -l来获取所有文件的详细属性信息;

chmod命令

chmod [OPTIONS]… MODE[,MODE]… FILE…
chmod [OPTIONS]… OCTAL-MODE FILE…
chmod [OPTIONS]… --reference=RFILE FILE…

三类用户:

  1. u:属主
  2. g:属组
  3. o:其它
  4. a:所有
1. chmod [OPTIONS]… MODE[,MODE]… FILE…
MODE表示法:
	1. 赋权表示法:直接操作一类用户的所有权限位;
	在赋予三类用户的权限不同时,则用逗号隔开;如果相同,可以合并授权。
		u=
		g=
		o=
		a=
	2. 授权表示法:直接操作一类用户的所有权限位r,w,x:
	在赋予三类用户的权限不同时,则用逗号隔开;如果相同,可以合并授权。
		u+,u-
		g+,g-
		o+,o-
		a+,a-
2. chmod [OPTIONS]… OCTAL-MODE FILE…
	数字权限授权法
	
3. chmod [OPTIONS]… --reference=RFILE FILE…
	参考文件权限授权法:

chown命令

chown [选项]… [OWNER][:[GROUP]] FILE…
chown [选项]… [OWNER][.[GROUP]] FILE…
chown [选项]… --reference=RFILE FILE…
选项:
	-R:递归修改,对目录下的所有文件(包括子目录)都有效。

chgrp命令


chmod [选项]… GREOUP FILE…

chmod [选项]… --reference=RFILE FILE…

打包压缩

压缩

gzip

gzip/gunzip/zcat
压缩或展开文件

zcat:查看gzip压缩后的文件内容。
gzip [OPTIONS]… FILE…
	-d:解压缩,相当于gunzip;
	-#:指定压缩比,默认是6;数字越大,压缩比越大(1-9);
	-c:将压缩结果输出至标准输出,并保留源文件
		gzip -c FILE > /PAHT/TO/XOMFILE.gz
			

reset:重置terminal,报错后,可以重新加载bash。

bzip2

bzip2/bunzip2/bzcat

bzip2 [OPTIONS]… FILE…
无论是压缩还是解压缩都会删除源文件
	-d:解压缩
	-#:指定压缩比,默认是6;数字越大,压缩比越大(1-9);
	-k:keep,保留源文件

xz

xz/unxz/xzcat

lzma, unlzma/lzcat

xz [OPTIONS]… FILE…
	-d:解压缩,
	-#:指定压缩比,默认是6;数字越大,压缩比越大(1-9);
	-k:保留源文件;

tar命令

tar [OPTION]… FILE…

tar的选项可以不带有-

  1. 创建归档

    -c -f /PATH/TO/SOMEFLIE.tar FILE…
    -cf /PATH/TO/SOMEFLIE.tar FILE…
    	-f选项后面需要跟参数,所以-f选项要写在后面。
    
  2. 展开归档

    -xf /PATH/TO/SOMEFILE.tar
    -xf /PATH/TO/SOMEFILE.tar -C /PATH/TO/SOMEDIR
    	-C:指定展开归档后的路径。
    
  3. 查看归档文件的文件列表

    -tf /PATH/TO/SOMEFILE.tar
    

    归档完成后通常需要压缩,结果此前的压缩工具,就能实现压缩多个文件了。

  4. 归档并压缩,

    -z:gzip2
    	归档并压缩:-zcf /PATH/TO/SOMEFILE.tar.gz FILE…
    	解压缩并展开归档:-zxf /PATH/TO/SOMEFILE.tar.gz
    
    -j:bzip2
    	-jcf
    	-jxf
    
    -J:xz
    	-Jcf
    	-Jxf
    

特性:

  1. 可以直接对目录进行归档并压缩;
  2. 解压缩时可以智能识别压缩格式,不需要带解压缩格式(z,j,J)的参数,直接展开归档文件就可以。

zip

技能归档又能压缩

zip/unzip
# 后缀名:.zip

关机和重启

关机:halt init0 shutdown -h
重启:reboot init6

httpd服务

hyper text transfer protocol,应用层协议,80/tcp,文本协议
html:hyper text mark language,编程语言,超文本标记语言

apache http web服务器在后台服务名称,默认端口80

安装

yum install httpd

查看后台服务

service --status-all | grep httpd:查看所有后台服务器
service httpd status:查看httpd服务状态

开启httpd服务

service httpd start

访问web服务器

http://hdp01

  1. 开启httpd服务
  2. 防火墙需要开放80端口或者关闭 service iptables stop

资源目录

资源根路径: /var/www/html/
配置目录: /etc/httpd/

挂载

将设备连接到一个已经存在的目录

挂载源和挂载点

挂载源:需要被挂载设备文件
挂载点:连接的目录

挂载语法

mount -t iso9660 -o ro 挂载源 挂载点
	-t:挂载源文件系统类型 
	-o:挂载方式,ro只读,loop作为磁盘分区。

设置永久挂载

配置文件/etc/fstab

设备文件 挂载点 文件系统 权限(default) 0 0

卸载

umount 挂载点

需要注意的是一旦卸载,不管/etc/fstab文件中是否有配置,下次重启都不会挂载;

系统服务管理

常见命令

service –status-all:查看所有服务
service httpd status/start/stop/restart

开机状态

chkconfig httpd on/off 开机自启/关闭
chkconfig –list:查看各个系统启动级别下服务自启状态
chkconfig –level 34 httpd off:设置服务在指定系统启动级别下的开机自启状态

系统时间修改

linux系统启动时,从硬件读取日期和时间信息,读取完成以后,就不再与硬件相关联;

  1. 系统时钟
  2. 硬件时钟

date

显示或修改系统时钟

显示日期和时间

date [选项]... [+格式]


 FROMAT:格式符
	~]# date +%F
		2017-05-10
	+%F:显示日期
	+%T:显示时间
	+%c:显示日期,星期,时间
	+%Y:显示年
	+%m:显示月
	+%d:显示日
	+%H:显示小时
	+%M:显示分钟
	+%S:显示秒数
	+%s:从 1970年1月1日(unix元年)0点0分0秒到命令执行那一刻历经的秒数
	……
	注意:+只能出现一次,如果想用空白字符做为分隔符,则使用引号把"%F %T",括起来。

设定日期和时间

date [选项] [MMDDhhmm[[CC]YY][.ss]]
月,日,小时,分钟,年,月,秒

时区

查看当前时区

[root@localhost ~]# cat /etc/sysconfig/clock
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Asia/Shanghai"

修改时区

当前使用时区文件:/etc/localtime

存放时区信息文件:/usr/share/zoneinfo/Asia/Shanghai

覆盖当前使用的时区文件:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

同步网络时间

ntpdate 时间服务器地址

time.nist.gov
202.120.2.101
cn.pool.ntp.org

软件安装

程序包分类

  1. 二进制发布包: jdk/tomcat
  2. RPM发布包: 包管理工具规范RPM进行打包发布

rpm命令

rpm命令:rpm [options] [PACKAGE_FILE]
	安装:-i,--install
	升级:-U,--update,-F,--freshen
	卸载:-e,--erase
	查询:-q,--query
	校验:-V,--verify
	数据库维护:--builddb,--initdb
	
	查询时只需给PACKAGE
	安装时必须给PACKAGE_FILE

安装

rpm {-i|--install} [install-options] PACKAGE_FILE …

rpm -ivh PACKAGE_FILE……

GENERAL OPTIONS:
	-v:verbose,详细信息
	-vv:更详细的输出
install-options:
	-h:hash marks输出进度条;每个#表示2%的进度;
	--test:测试安装,检查并报告依赖关系及冲突消息等;
	--nodeps:忽略依赖关系;不建议
	--replacepkgs:重新安装
		当配置文件内容被修改后,如果想使用默认配置文件,则先将配置文件备份并删除,然后重新安装
	注意:rpm可以自带脚本:
		四类:--noscripts
			preinstall:安装过程开始之前运行的脚本,%pre,--nopre
			postinstall:安装过程完成之后运行的脚本,%post,--nopost
			preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun
			postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun
			
	--nosignature:不检查包签名信息,即不检查来源合法性
	--noeigest:不检查包完整性信息;

升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE …
rpm {-F|--freshen} [install-options] PACKAGE_FILE …
	-U:升级或安装,无需拥有老版本的程序包
	-F:升级,必须拥有老版本的程序包
	
	rpm -Uvh PACKAGE_FILE……
	rpm -Fvh PACKAGE_FILE……
	
	--oldpackage:降级安装(回滚);安装老版本的程序包;
	--force:强制升级;如果老版本程序被其他程序所依赖,可能会破坏依赖关系;

注意:

  1. 不要对内核做升级操作;linux支持多内核版本并存,因此,直接安装新版本内核;
  2. 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名后(FILENAME.rpmnew)后提供,

卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
	--allmatches:卸载所有匹配指定名称程序包的各版本;
	--nodeps:忽略依赖管理 
	--test:测试卸载,try run模式

查询

默认查询安装后的程序包。

rpm {-q|--query} [select-options] [query-options]
select-options:
	PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
		-a,-all:查询所有已经安装过的包
		-f FILE:查询指定的文件由哪个程序包安装生成
		-g,--group:查看指定包组中包含了哪些包
		-p,--package PACKAGE_FILE:对于未安装的程序包执行查询操作
		--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
		--whatrequires CAPABILITY:查询指定的CAPABILITY被那个包所依赖;
	
	query-options:
		--changelog:查询rpm包的changlog(变更信息)
		-l,--list:程序包安装生成的所有文件列表
		-i,--info:程序包相关信息,版本号、大小、所属的包组,等;
		-c,--configfiles:查询指定的程序包提供的配置文件;
		-d,--docfiles:查询指定程序包提供的文档;
		--provides:列出指定的程序包提供的所有CAPABILITY;
		-R, --requires:查询指定程序包的依赖关系;
		--scripts:查看程序包自带的脚本片段;
		
	用法:
		-qi PACKAGE,-qf PACKAGE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
		-qpi PACKAGE_FILE,-qpf PACKAGE_FILE,-qpc PACKAGE_FILE

校验

rpm [--verify|-V] [select-options] [verify-options]

没有数据显示表示校验成功;校验的是安装后的文件,是否发生改变。

5      MD5校验码发生改变
S      文件大小
L      符号连接不匹配
T      修改时间戳改了
D      主次设备号不匹配
U      用户改了
G      组改了
M      模式(包括许可和文件类型) 权限发生改变
P       capabilities改了

包来源合法性验证和完整性验证

来源合法性验证:

  1. 数字签名:非对称加密,一般成对出现,公钥,私钥;
  2. 首先使用单向加密算法,定出程序包的特征码,在用私钥加密特征码,将加密的特征码放在程序包的后面。

完整性验证:

  1. 获取并导入信任的包制作者的密钥;
  2. 对于centos 发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

验证:

  1. 安装此组织签名的程序时,会自动执行验证;
  2. 手动验证:rpm -k PACKAGE_FILE

数据库重建:

rpm管理器数据路径:/var/lib/rpm
查询操作:基于此处的数据进行;

获取帮助:
Centos6:man rpm
Centos7:man rpmdb

rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
	--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有数据库时不执行任何操作;
	--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
	--dbpath:指定数据库路径,初始化时,表示指定数据库新建的路径,重建时表示对指定数据库路径下的数据库进行重建。

yum在线安装

yum前端包管理器

将软件rpm打包并且防止在网络服务器,通过yum命令可以从服务器获取软件并且在线安装;能够解决包依赖问题;
yum可以实现查找,安装、删除等功能

yum install/remove 程序

源码编译安装

例如redis

安装jdk

上传文件

  1. ftp工具
  2. lrzsz工具
  3. SecureCRT -> alt+T
  4. xShell -> xFTP

查看jdk程序

rpm -qa | grep jdk

解压


tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local

配置环境变量

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java1.8.0_73
export PATH=$PATH:$JAVA_HOME/bin

soutce /etc/profile.d/java.sh

测试

java --version

安装mysql

查看mysql是否安装

rpm -qa | grep -i mysql
	-i:不区分大小写

卸载已有版本

[root@localhost ~]# rpm -e --nodeps mysql-libs

安装 mysql Server和mysql Client

[root@localhost ~]# rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm 

启动服务

service mysql start

测试

登陆
查看密码
.mysql_secret文件保存默认密码

修改密码

SET PASSWROD=password('root');

或者使用 mysql_secure_installation命令

授权

mysql> grant all privileges on *.* to 'root'@"%" identified by "root";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

本地yum源配置

yum源配置文件

/etc/yum.repo.d/

配置本地yum源

  1. 本地服务器(httpd服务器)

  2. rpm规范打包文件

  3. 仓库索引配置文件

    ln -s /mnt/cdrom /var/www/html/cdrom
    
  4. 配置仓库文件

    [repositoryid]
    name=Some name for this repository
    baseurl=url://path/to/repository/,只要指定的路径下有repodata目录就可以了。
    mirrorlist=URL,放置镜像,yum必须支持插件功能,一般不与baseurl同时使用。
    enabled={1|0},默认为1,启动
    gpgcheck={1|0},是否检查程序包完整性和合法性
    gpgkey=URL,gpg的密钥文件,仓库提供;
    enablegroups={1|0},是否支持组批量管理程序包,默认是1,支持的。
    failovermethod={roundrobin|priority}
    	默认为:roundrobin,意为随机挑选
    keepalive,如果http是1.1的是否保持连接。
    username,给ftp使用,
    password,给ftp的usernanme的password
    cost=1000,默认都是1000,
    
    

    示例文件

    [local]
    name=CentOS-local
    baseurl=http://192.168.2.101/cdrom
    gpgcheck=0
    enable=1
    
  5. 测试
    yum repolist :查看可用的yum源
    yun list: 查看软件安装列表

进程管理

什么是进程

进程是程序的运行过程。
线程是执行的最小单元。

进程可以产生另一个进程,存在父子关系;

进程的状态

新生:
就绪:除了cpu资源,
运行:
阻塞:
死亡:

进程管理命令

ps命令

查看进程状态

ps -aux 查看用户的所有进程

kill命令

kill pid 直接杀死进程,但不能保证一定能杀死
kill -9 pid 强制杀死进程。

pidof命令

pidof mysql 查看进程的进程号

pkill命令

pkill 进程名称 通过进程名杀死进程;

posted @ 2018-10-30 20:24  耳_东  阅读(107)  评论(0)    收藏  举报