Python第二十二天 stat模塊 os.chmod方法 os.stat方法 pwd grp模塊 os.access()方法

Python第二十二天   stat模塊  os.chmod方法  os.stat方法  pwd  grp模塊  os.access()方法

 

stat模塊描述了os.stat(filename)返回的文件屬性列表中各值的意義,根據stat模塊讀取os.stat()中的值的意思
簡單來說,os.stat是將文件的相關屬性讀出來,然後用stat模塊來處理

 

os.stat

返回一個類似字典對象(stat_result對象,包含10個元素),結果類型是posix.stat_result

stat(path) -> stat result 

 

獲取stat結果

st = os.stat('/tmp/aa.py')
print st
posix.stat_result(st_mode=33188, st_ino=385537, st_dev=64513L, st_nlink=1, st_uid=0, st_gid=0, st_size=1243, st_atime=1505466749, st_mtime=1505870370, st_ctime=1505870370)

st_mode(權限模式)
st_ino(inode number)
st_dev(device)
st_nlink(number of hard links)
st_uid(所有用戶的user id)
st_gid(所有用戶的group id)
st_size(文件大小,以位爲單位)
st_atime(最近訪問的時間)
st_mtime(最近修改的時間)
st_ctime(創建的時間)


os.stat的返回類型
type(st)
posix.stat_result


st = os.stat('/tmp/aa.py')
st.st_ctime
stat.ST_CTIME(st.st_ctime)

st.st_ino
stat.ST_INO(st.st_ino)


st.st_dev
stat.ST_DEV(st.st_dev)

st.st_nlink
stat.ST_NLINK(st.st_nlink)

st.st_uid
stat.ST_UID(st.st_uid)

st.st_gid
stat.ST_GID(st.st_gid)


st.st_size
stat.ST_SIZE(st.st_size)


st.st_atime
stat.ST_ATIME(st.st_atime)


st.st_mtime
stat.ST_MTIME(st.st_mtime)


st.st_ctime
stat.ST_CTIME(st.st_ctime)


st.st_mode
stat.S_IMODE(st.st_mode)

 

 


stat模塊

 

import stat

stat 模塊定義用來測試文件類型的函數
stat.S_ISDIR(mode)
  判斷文件是不是一個目錄。

stat.S_ISCHR(mode)
  判斷文件是不是一個字符型設備。

stat.S_ISBLK(mode)
  判斷文件是不是一個塊設備。

stat.S_ISREG(mode)
  判斷mode是不是來自一個普通文件。

stat.S_ISFIFO(mode)
  判斷mode是不是來自一個FIFO(如:具名管道)

stat.S_ISLNK(mode)
  判斷mode是不是來自一個符號鏈接。

stat.S_ISSOCK(mode)
  判斷mode是不是來自一個套接字。

stat.S_IMODE(mode)
  #返回文件權限的chmod格式。

stat.S_IFMT(mode)  
   返回文件的類型



例子
st = os.stat('/tmp/aa.py').st_mode
oct(stat.S_IMODE(st))
'0755'



stat 模塊的標識符,可以用在os.chmod()方法中:

stat.S_ISUID: Set user ID on execution.                      不常用
stat.S_ISGID: Set group ID on execution.                    不常用
stat.S_ENFMT: Record locking enforced.                                          不常用
stat.S_ISVTX: Save text image after execution.                                在執行之後保存文字和圖片
stat.S_IREAD: Read by owner.                                                           對於擁有者讀的權限
stat.S_IWRITE: Write by owner.                                                         對於擁有者寫的權限
stat.S_IEXEC: Execute by owner.                                                       對於擁有者執行的權限
stat.S_IRWXU: Read, write, and execute by owner.                          對於擁有者讀寫執行的權限
stat.S_IRUSR: Read by owner.                                                            對於擁有者讀的權限
stat.S_IWUSR: Write by owner.                                                          對於擁有者寫的權限
stat.S_IXUSR: Execute by owner.                                                       對於擁有者執行的權限
stat.S_IRWXG: Read, write, and execute by group.                                 對於同組的人讀寫執行的權限
stat.S_IRGRP: Read by group.                                                             對於同組讀的權限
stat.S_IWGRP: Write by group.                                                           對於同組寫的權限
stat.S_IXGRP: Execute by group.                                                        對於同組執行的權限
stat.S_IRWXO: Read, write, and execute by others.                          對於其他組讀寫執行的權限
stat.S_IROTH: Read by others.                                                           對於其他組讀的權限
stat.S_IWOTH: Write by others.                                                         對於其他組寫的權限
stat.S_IXOTH: Execute by others.                                                      對於其他組執行的權限


os.access() 方法


這個方法一般只用來做判斷

os.access() 方法使用當前的uid/gid嘗試訪問路徑。大部分操作使用有效的 uid/gid, 因此運行環境可以在 suid/sgid 環境嘗試

os.access(path, mode);
參數
path -- 要用來檢測是否有訪問權限的路徑。
mode -- mode爲F_OK,測試存在的路徑,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
os.F_OK: 作爲access()的mode參數,測試path是否存在。
os.R_OK: 包含在access()的mode參數中 , 測試path是否可讀。
os.W_OK 包含在access()的mode參數中 , 測試path是否可寫。
os.X_OK 包含在access()的mode參數中 ,測試path是否可執行

 

例子1

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import os, sys
 
# 假定 test/foo.txt 文件存在,並有讀寫權限

ret = os.access("test/foo.txt", os.F_OK)
print "F_OK - 返回值 %s"% ret
 
ret = os.access("test/foo.txt", os.R_OK)
print "R_OK - 返回值 %s"% ret
 
ret = os.access("test/foo.txt", os.W_OK)
print "W_OK - 返回值 %s"% ret
 
ret = os.access("test/foo.txt", os.X_OK)
print "X_OK - 返回值 %s"% ret

 

例子2

def check_access_and_print_warning(sock_dir):
    '''
    Check if this user is able to access the socket
    directory and print a warning if not
    '''
    if (os.access(sock_dir, os.R_OK) and
            os.access(sock_dir, os.W_OK) and
            os.access(sock_dir, os.X_OK)):
        return
    else:
        print('WARNING: Events will not be reported'
              ' (not able to access {0})'.format(sock_dir))

 


 

os.chmod() 方法

os.chmod() 方法用於更改文件或目錄的權限。
語法
chmod()方法語法格式如下,該方法沒有返回值:
os.chmod(path, mode)


參數
path -- 文件名路徑或目錄路徑。
flags -- 可用以下選項按位或進行權限疊加。


stat.S_IXOTH: 其他用戶有執行權0o001
stat.S_IWOTH: 其他用戶有寫權限0o002
stat.S_IROTH: 其他用戶有讀權限0o004
stat.S_IRWXO: 其他用戶有全部權限(權限掩碼)0o007
stat.S_IXGRP: 組用戶有執行權限0o010
stat.S_IWGRP: 組用戶有寫權限0o020
stat.S_IRGRP: 組用戶有讀權限0o040
stat.S_IRWXG: 組用戶有全部權限(權限掩碼)0o070
stat.S_IXUSR: 擁有者具有執行權限0o100
stat.S_IWUSR: 擁有者具有寫權限0o200
stat.S_IRUSR: 擁有者具有讀權限0o400
stat.S_IRWXU: 擁有者有全部權限(權限掩碼)0o700
stat.S_ISVTX: 目錄裏文件目錄只有擁有者纔可刪除更改0o1000
stat.S_ISGID: 執行此文件其進程有效組爲文件所在組0o2000
stat.S_ISUID: 執行此文件其進程有效用戶爲文件所有者0o4000
stat.S_IREAD: windows下設爲只讀
stat.S_IWRITE: windows下取消只讀

 

使用os.chmod()執行chmod +x

# 獲取到文件的權限模式,然後將原來權限模式和新權限模式用或連接起來就可以實現chmod+x
stmode = os.stat('/tmp/aa.py').st_mode
os.chmod('/tmp/aa.py', stmode | stat.S_IXOTH|stat.S_IXGRP |stat.S_IXUSR)

 


 

pwd模塊和grp模塊

 

pwd模塊,提供了一個Unix 密碼數據庫(/etc/passwd文件)的接口,這個數據庫包含本地機器用戶賬戶信息。

返回對應uid的用戶信息 

pwd.getpwuid(uid)

返回對應name的用戶信息 

pwd.getpwnam(username)

 

獲取返回結果中的uid

pwd.getpwnam(username)
pwd.struct_passwd(pw_name='mysql', pw_passwd='x', pw_uid=500, pw_gid=500, pw_gecos='', pw_dir='/home/mysql', pw_shell='/sbin/nologin')


def setPrint():
print pwd.getpwnam('mysql')
list=[]
for i in pwd.getpwnam('mysql'):
print i

# 通過列表保存返回的結果
list.append(i)
# print type(aa)

print list
uid = list[2]  # 列表第三個元素就是uid
print 'uid %s' %(uid)

 

返回所有用戶信息

pwd.getpwall()

 返回所有用戶信息

import pwd
def get_user():
  all_user = {}
  for user in pwd.getpwall():
    all_user[user[0]] = all_user[user[2]] = user
  return all_user
def userinfo(uid):
  return get_user()[uid]

 

 

grp模塊,提供了一個Unix 用戶組/group(/etc/group文件)數據庫的接口

返回對應gid的組信息 

grp.getgrgid(gid)

返回對應group name的組信息 

grp.getgrname(groupname)

返回所有組信息 

grp.getgrall()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章