Linux-04-文件管理(包括压缩与打包)、用户管理、提取IP地址

一、文件管理

1.目录结构
2.基础命令
	cd pwd touch mkdir cp mv rm ls cat head tail less more rz sz wget vim
3.压缩与打包
(1)什么是压缩包?
	压缩包是一个特殊的文件,将多个文件或目录整合在一个文件中.

(2)为什么要使用压缩包?
	1.便于传输
	2.压缩后的体积会变小.  28GB文件  ---> 6GB
	
(3)实现打包与压缩有哪些工具:
	Windows:
		zip
		tar
	
	Linux:
		zip
		tar.gz
	
(4)压缩包如何实现:
	gzip:  ( 仅针对文件 )
		[root@oldboy-pythonedu ~]# gzip /etc/yum.repos.d/CentOS-Base.repo			#压缩 ( 源文件不见了 )
		[root@oldboy-pythonedu ~]# zcat /etc/yum.repos.d/CentOS-Base.repo.gz		#查看
		[root@oldboy-pythonedu ~]# gzip -d /etc/yum.repos.d/CentOS-Base.repo.gz		#解压

zip:  ( 针对文件或目录 )
	[root@oldboy-pythonedu ~]# yum install zip unzip -y
	[root@oldboy-pythonedu ~]# zip -r yum_local.zip  /etc/yum.repos.d/ /tmp/
	[root@oldboy-pythonedu ~]# unzip yum_local.zip -d /opt/

tar.gz:
	c: 创建
	z: 压缩类型
	f: 指定文件名称
	x: 自动识别文件类型
	
	创建:			[root@oldboy-pythonedu ~]# tar czf etc.tar.gz /etc/ /home/ 
	解压:			[root@oldboy-pythonedu ~]# tar xf etc.tar.gz 
	指定解压路径:	[root@oldboy-pythonedu ~]# tar xf etc.tar.gz  -C /mnt/

二、用户管理

1.什么是用户
指能够正常登陆操作系统.
2.为什么要有用户
	2.1) 进程需要依赖一个特定用户的身份,才可以正常的运行.
	2.2) 服务器可能会有多个用户, root的权限太大.
3.用户分类
类型		   名称	  ID编号
超级管理员   root    0
系统用户		      1~999			<--为系统正常运转而使用的用户   [ 系统用户  | 虚拟用户 ]
普通用户		      1000+  		<--能够正常登陆系统的用户   [ 普通用户 ]
	
	
进程能够以什么样的方式去访问一个文件或目录,  取决于进程运行的 "用户身份" 对该文件或目录是否拥有对应的权限
4.用户怎么查
[root@oldboy-pythonedu ~]# id root
uid=0(root) gid=0(root) 组=0(root)
5.如何创建用户
[root@oldboy-pythonedu ~]# useradd oldboy
[root@oldboy-pythonedu ~]# id oldboy
uid=1001(oldboy) gid=1001(oldboy) 组=1001(oldboy)
6.创建的用户信息都存储在哪? [ 存储用户信息以冒号为分隔符,总共有7列 ]
[root@oldboy-pythonedu ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
oldboy:x:1001:1001::/home/oldboy:/bin/bash


第一列:	用户名称
第二列: 密码占位符,密码存储在  /etc/shadow 文件中
第三列: 用户的UID
第四列: 用户的GID
第五列: 描述信息  commit 
第六列: 用户的家目录
第七列: 用户登录的Bash类型
7.用户存储密码的文件:
/etc/shadow
root:$6$QyNI5YH5XihOfDKY:18533:0:99999:7:::
8.详细了解下创建用户的一些个参数:
-u: 指定用户的UID
-g: 指定用户的基本组 ( 不指定,默认创建与用户同名的组 )
-G: 指定附加组  ( 干爹 )
-c: 指定注释信息
-s: 指定登录的bash类型,默认是 /bin/bash
-r: 指定系统用户
-M: 不创建用户的家目录

1.创建oldboyedu用户,UID5001,基本组students,附加组sa 注释信息:2019 new student,登陆shell:/bin/bash

[root@oldboy-pythonedu ~]# groupadd students
[root@oldboy-pythonedu ~]# groupadd sa
[root@oldboy-pythonedu ~]# useradd oldboyedu -u 5001 -g students -G sa -c "2020 new student" -s /bin/bash

2.创建mysql系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统

[root@oldboy-pythonedu ~]# useradd mysql -r  -M -s /sbin/nologin 

3.删除用户

userdel -r username   删除用户,并删除用户的家目录
不建议加-r: 因为很多情况下开发使用的用户家目录下有很多软件和配置文件
9.如何为用户设定密码 passwd
1.简单: 容易破解
2.复杂: 不好记忆
---------------------------------密钥方式验证
建议密码使用工具: lastpass
	windows mac  ios  android

设定密码的方式:   仅root可以设定所有人的密码,  普通仅能设定自己的密码,并且密码的强度有要求.
	交互式:  
		passwd [username]
		
	非交互式:
		[root@oldboy-pythonedu ~]# echo "12" | passwd --stdin root			#固定密码 
		[root@oldboy-pythonedu ~]# echo $RANDOM | md5sum  | cut -c 2-10 | tee 1.txt |passwd --stdin root	#随机密码


	#批量创建用户,以及随机密码
	[root@oldboy-pythonedu ~]# cat useradd.sh 
	#!/usr/bin/bash
	#1.如何批量创建用户
	for user_name in old-{1..100}
	do
		pass=$(echo $RANDOM | md5sum  | cut -c 2-10)
		
		# 判断用户是否存在,如果存在则不创建
		id $user_name &>/dev/null
		if [ $? -eq 0 ];then
			continue
		else
			# 创建用户
			useradd $user_name 
			# 设定密码
			echo "$pass" | passwd --stdin $user_name &>/dev/null		# 设定密码,将结尾打到空
			echo "Username: $user_name  Password: $pass ok.."			# 将用户名和密码输出到面板
			echo "Username: $user_name  Password: $pass ok.." >> user_password.txt		#将用户名和密码输出到文件中
		fi
	done

交互方式创建用户与密码

[root@oldboy-pythonedu ~]# cat useradd_2.sh 
#!/usr/bin/bash


read -p "请输入你要创建的用户名称: " User
read -p "请输入你要创建的用户数量: " Number


#如何批量创建用户
for i in $(seq $Number)
do
	user_name=$User-$i
	pass=$(echo $RANDOM | md5sum  | cut -c 2-10)
	
	# 判断用户是否存在,如果存在则不创建
	id $user_name &>/dev/null
	if [ $? -eq 0 ];then
		continue
	else
		# 创建用户
		useradd $user_name 
		# 设定密码
		echo "$pass" | passwd --stdin $user_name &>/dev/null
		echo "Username: $user_name  Password: $pass ok.."
		echo "Username: $user_name  Password: $pass ok.." >> user_password.txt
	fi 
done

10.用户组

10.1) 组基本概念

便于管理

10.2) 组的分类

所属组: 当创建一个用户时,如果不指定主组,会默认创建一个同名的组.
附加组: 创建用户时可以指定我想加入的附加组, 此时用户就可以具备附加的组的权限.
	
正房只能有一个		偏方可以多个

10.3) 创建组

-g: 指定gid,默认不指定,则从1000+开始

[root@oldboy-pythonedu ~]# groupadd -g 5001 devops

10.4) 删除组

[root@oldboy-pythonedu ~]# groupdel devops

[root@oldboy-pythonedu ~]# groupdel students
groupdel:不能移除用户“oldboyedu”的主组
[root@oldboy-pythonedu ~]# userdel -r oldboyedu 
[root@oldboy-pythonedu ~]# groupdel students
11.用户提权相关
11.1) su 切换身份
	需要知道用户的密码,才可以切换.
		su - root 		#输入root的密码
		
	问题:
		1.不希望给开发root的权限,容易造成故障.
		2.不给开发权限,有些任务他需要root权限.
	
11.2) sudo 提权
	1.快速给用户分配一个sudo的权限:
		[root@oldboy-pythonedu ~]# useradd -G wheel oldxu
		[root@oldboy-pythonedu ~]# echo "123" | passwd --stdin oldxu

	2.验证权限:
		[oldxu@oldboy-pythonedu ~]$ yum install wget -y
		已加载插件:fastestmirror
		您需要 root 权限执行此命令。


	[oldxu@oldboy-pythonedu ~]$ sudo yum install wget -y
	我们信任您已经从系统管理员那里了解了日常注意事项。
	总结起来无外乎这三点:

		#1) 尊重别人的隐私。
		#2) 输入前要先考虑(后果和风险)。
		#3) 权力越大,责任越大。

	[sudo] oldxu 的密码:			# 普通自己的密码,不是root的密码


vim /etc/sudoers
visudo -c  检查语法

1.定义组名称  ( sudo里面的虚拟的 )
	
User_Alias DEV = kaifa1,kaifa2
User_Alias OPS = ops1,ops2


2.定义权限
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
 Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount


## Processes
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall


3.将用户组与权限进行绑定   
root    ALL=(ALL)       NOPASSWD:ALL				#可以执行所有的命令,并且无需输入密码
DEV     ALL=(ALL)       NETWORKING,SOFTWARE,SERVICES
OPS     ALL=(ALL)       NETWORKING,SOFTWARE,SERVICES,PROCESSES,STORAGE


4.创建对应的用户,并设定密码
[root@oldboy-pythonedu ~]# useradd kaifa1
[root@oldboy-pythonedu ~]# useradd kaifa2
[root@oldboy-pythonedu ~]# useradd ops1
[root@oldboy-pythonedu ~]# useradd ops2
[root@oldboy-pythonedu ~]# echo "1" | passwd --stdin kaifa1
[root@oldboy-pythonedu ~]# echo "1" | passwd --stdin kaifa2
[root@oldboy-pythonedu ~]# echo "1" | passwd --stdin ops1
[root@oldboy-pythonedu ~]# echo "1" | passwd --stdin ops2

5.使用 sudo -l 验证开发的权限和运维的权限是否不一致
用户 kaifa1 可以在 oldboy-pythonedu 上运行以下命令:
    (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
        /usr/bin/up2date, /usr/bin/yum, /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start,
        /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart,
        /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable


用户 ops1 可以在 oldboy-pythonedu 上运行以下命令:
    (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
        /usr/bin/up2date, /usr/bin/yum, /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start,
        /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart,
        /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable,
        /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /sbin/fdisk, /sbin/sfdisk,
        /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

三、额外了解项

1.提取IP地址 grep \ sed \ awk
[root@oldboy-pythonedu ~]# ifconfig  ens32 | grep "inet " | grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | head -1 
10.0.0.200
[root@oldboy-pythonedu ~]# ifconfig  ens32 | sed -n '2p' | sed -r 's#(^.*inet) (.*) (net.*$)#\2#g'
10.0.0.200

[root@oldboy-pythonedu ~]# ifconfig  ens32  | awk 'NR==2 {print $2}'
10.0.0.200
2.提取/etc/passwd 用户名称, uid ,登录bash
[root@oldboy-pythonedu ~]# #awk -F ":" '{print $1,$3,$7}' /etc/passwd
3.统计分析访问中来源做多前10的IP地址 sort uniq awk
	1.来源的IP地址在第几列
	2.对数据进行排序
	3.对数据进行去重,统计
	4.取出前top10的IP地址
	
[root@oldboy-pythonedu ~]# awk '{print $1}' access.log  | sort | uniq -c | sort -nr | head -10 > access_top10.txt 
  31577 116.211.216.152
  25142 222.186.49.194
  20841 120.27.74.166
   9304 39.105.242.163
   8277 61.147.73.164
   7805 222.186.49.165
   7559 123.156.198.164
   7233 61.160.206.107
   6596 220.170.48.75
   6200 61.147.73.171

[root@oldboy-pythonedu ~]# time awk '{ ip[$1]++ } END { for ( i in ip ) print ip[i],i}' access.log  | sort -nr | head -10
{
	ip[$1]++
}
END{
	for ( i in ip) {
		print i,ip[i]
	}

}

猜你喜欢

转载自blog.csdn.net/qq_45957580/article/details/108986245