Linux系统管理
一、OS模块常用功能
1、os模块打开文件
方法如下:
os.open(filename, flag, [,mode])
flag参数说明:
os.O_CREAT # 创建文件
os.O_RDONLY # 只读方式打开
os.O_WRONLY # 只写方式打开
os.O_RDWR # 读写方式打开
2、os模块对文件进行操作
常用方法如下:
# 读取文件
os.read(fd, buffersize)
# 写入文件
os.write(fd, string)
# 文件指针操作
os.lseek(fd, pos, how)
# 关闭文件
os.close(fd)
代码演示:
文件创建和写入
import os
# 打开文件
fd = os.open("abc.txt", os.O_RDWR | os.O_CREAT)
# 写入字符串
str = "Hello Python!"
ret = os.write(fd, bytes(str, 'UTF-8'))
# 输入返回值
print("写入的位数为: ")
print(ret)
print("写入成功")
# 关闭文件
os.close(fd)
print("关闭文件成功!!")
文件读取
import os
# 打开文件
fd = os.open("abc.txt", os.O_RDWR)
# 读取文本
ret = os.read(fd, 6)
print(ret)
# 关闭文件
os.close(fd)
print("关闭文件成功!!")
3、os模块管理文件和目录
常用方法如下:
os方法 | 说明 |
---|---|
remove(path) | 删除文件 |
rename(old, new) | 修改文件或者目录名 |
getcwd() | 获取当前目录 |
listdir(path) | 返回当前目录下所有文件组成的列表 |
mkdir(path [,mode]) | 创建目录 |
makedirs(path [,mode]) | 创建多级目录 |
rmdir(path) | 删除目录(目录必须为空目录) |
removedirs(path) | 删除多级目录(目录必须为空目录) |
代码演示:
# coding=utf-8
import os
print(os.getcwd()) # pwd
print(os.listdir()) # ls
os.rename('abc.txt','test.txt') # mv abc.txt test.txt
os.remove('read.py') # rm -f abc.txt
os.mkdir('test') # mkdir dir1
os.makedirs('demo/abc') # mkdir -p dir2/dir22
os.rmdir('test') # 目录必须为空
os.removedirs('demo') #目录必须为空
4、os模块管理文件权限
os方法 | 说明 |
---|---|
access(path, mode) | 判断该文件权限:F_OK存在; 权限:R_OK,W_OK,X_OK |
chmod(path, mode) | 修改文件权限:0o755 |
chown(path, uid, gid) | 更改文件所有者,如果不修改可以设置为 -1 |
代码演示:
import os
# 测试路径是否存在:os.F_OK
res = os.access('test.txt',os.F_OK)
print(res)
# 测试当前用户对该文件是否有读的权限
res = os.access('test.txt',os.R_OK)
print(res)
# 测试当前用户对该文件是否有写的权限
res = os.access('test.txt',os.W_OK)
print(res)
# 测试当前用户对该文件是否有执行的权限
res = os.access('test.txt',os.X_OK)
print(res)
# 更改当前用户的权限
os.chmod('test.txt',0o755)
# 更改文件的所有者
os.chown('test.txt', 1001, 1002)
5、os.path模块管理文件与路径
(1)拆分路径
os.path方法 | 说明 |
---|---|
split | 返回一个二元组,包含文件的路径和文件名 |
dirname | 返回文件的路径 |
basename | 返回文件名 |
splitext | 返回一个去掉文件扩展名的部分和扩展名的二元组 |
代码演示:
In [10]: os.getcwd()
Out[10]: '/opt/os_demo'
In [11]: os.listdir()
Out[11]: ['os_access.py', 'test.txt']
In [12]: path = '/opt/os_demo/test.txt'
In [13]: os.path.split(path)
Out[13]: ('/opt/os_demo', 'test.txt')
In [14]: os.path.dirname(path)
Out[14]: '/opt/os_demo'
In [15]: os.path.basename(path)
Out[15]: 'test.txt'
In [16]: os.path.splitext(path)
Out[16]: ('/opt/os_demo/test', '.txt')
(2)构建路径
os.path方法 | 说明 |
---|---|
expanduser | 展开用户的HOME目录,如,oracle |
abspath | 得到文件或路径的绝对路径 |
join | 根据不同的操作系统平台,使用不同的路径分隔符拼接路径 |
isabs | 检查一个路径是不是一个绝对路径 |
代码演示:
In [19]: os.path.expanduser('~')
Out[19]: '/root'
In [20]: os.path.expanduser('~oracle')
Out[20]: '/home/oracle'
In [21]: os.path.expanduser('~accp')
Out[21]: '/home/accp'
In [22]: os.path.expanduser('~acp')
Out[22]: '~acp'
In [23]: os.path.abspath('.')
Out[23]: '/opt/os_demo'
In [24]: os.path.abspath('..')
Out[24]: '/opt'
In [25]: os.path.join('/opt/os_demo','test.txt')
Out[25]: '/opt/os_demo/test.txt'
In [26]: os.path.isabs('/opt/os_demo/')
Out[26]: True
In [27]: os.path.isabs('.')
Out[27]: False
(3)获取文件属性
os.path方法 | 说明 |
---|---|
代码演示:
In [33]: os.path.getatime(path)
Out[33]: 1587547270.7306058
In [34]: os.path.getmtime(path)
Out[34]: 1587547270.7306058
In [35]: os.path.getctime(path)
Out[35]: 1587548055.4721448
In [36]: os.path.getsize(path)
Out[36]: 0
(4)判断文件类型
os.path方法 | 说明 |
---|---|
os.path.isfile(path) | 判断路径是否为文件 |
os.path.isdir(path) | 判断路径是否为目录 |
os.path.islink(path) | 判断路径是否为链接 |
os.path.ismount(path) | 判断路径是否为挂载点 |
代码演示:
In [37]: os.path.isfile(path)
Out[37]: True
In [38]: os.path.isdir(path)
Out[38]: False
In [39]: os.path.islink(path)
Out[39]: False
In [40]: os.path.ismount(path)
Out[40]: False
6、os模块执行shell命令
os.system()的作用:
执行shell命令
返回shell命令的返回值
命令的输出会输出到标准输出
代码演示:
os.system(‘cls’)
编写自动安装Python的脚本
实现步骤:
下载Python版本源码
安装Python需要的依赖库
编译安装Python
伪代码:
1. 判断用户是不是root
2. 如果是,等待用户输入Python版本
3. 执行shell命令下载源码包
4. 安装依赖开发包
5. 编译安装Python
脚本内容如下(基于Python2):
auto_install_python.py
# coding=utf-8
import os
# 判断用户是否是root用户
if os.getuid() == 0:
pass
else:
print
'当前用户不是root用户!'
SystemExit(1)
# 安装Python依赖库
cmd_module = 'yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel'
res = os.system(cmd_module)
if res != 0:
print
'Python依赖库安装失败,请重新执行该脚本。'
SystemExit(1)
else:
print
'python依赖库安装成功!'
# 输入Python版本,下载Python源码包到本地目录
# wget url
version = raw_input('请输入Python版本:(3.6/3.8)')
if version == '3.6':
url = 'https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz'
else:
url = 'https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz'
cmd = 'wget ' + url
res = os.system(cmd)
if res != 0:
print 'Python源码包下载失败!'
SystemExit(1)
else:
print('======================>>>Python源码包下载成功!')
# 解压Python源码包
# tar zxvf Python-3.6.10.tgz
if version == '3.6':
package_name = 'Python-3.6.10'
else:
package_name = 'Python-3.8.1'
res = os.system('tar zxvf ' + package_name + '.tgz')
if res != 0:
print '解压失败。。。'
SystemExit(1)
else:
print('#########################解压成功!#########################')
# 配置语言
os.system('export LANG=zh_CN.UTF-8')
os.system('export LANGUAGE=zh_CN.UTF-8')
# 切换到Python目录
os.chdir(package_name)
os.system('./configure --prefix=/usr/local/python3')
res = os.system('make && make install')
if res !=0:
print '源码编译失败。。。'
SystemExit(1)
else:
print('####################Python安装成功,请进行验证!####################')
# 修改用户环境变量
os.system('echo "export PYTHON3=/usr/local/python3" >>~/.bash_profile')
os.system('echo "export PATH=$PYTHON3/bin:$PATH" >>~/.bash_profile')
os.system("source ~/.bash_profile")
os.system('cat ~/.bash_profile')
print('####################用户环境变量已修改,请进行验证!####################')
os.system('python3 --version')
7、os.walk遍历目录树
二、使用ConfigParser类解析ini配置文件
实现查询、添加、删除、保存。
练习目的:
掌握文件基本操作
认识ini文件
了解ConfigParser类
使用ConfigParser类解析配置文件
ini配置文件的格式:
节: [session]
参数(键=值) name=value
解析mysql配置文件
my.ini文件示例: