用SSH指令批量修改文件夹 文件权限和拥有者

本文介绍如何在Linux系统下批量修改文件和目录的权限、所有者,包括使用find、chmod及chown命令的具体操作方法。同时详细解释了Linux下文件和目录权限的区别。

在linux系统下或登录ssh可以批量修改文件权限

wwwroot目录下的所有目录的权限递归设置为755

cd wwwroot
find -type d -exec chmod 755 {} \;
或者是
find -type d|xargs chmod 755

同样,把目录下的所有文件权限递归地改成644可以这样执行

find -not -type d -exec chmod 644 {} \;
或者是
find -not -type d|xargs chmod 644

在linux批量修改文件拥有者
需要使用到两个命令,chmod以及chown

例、对var/目录下的所有文件与子目录执行相同的权限变更:

chmod -R 700 var/

-R参数是递归 处理目录下的所有文件以及子文件夹

700是变更后的权限表示(只有所有者有读和写以及执行的权限)

var/ 是需要执行的目录

例、对var/ 目录下的所有文件与子目录执行相同的所有者变更,使所有者修改为www用户组的www用户

chown -R www:www var/

-R 同上

www:www www用户组的www,用户组不必须

 

总结linux下目录和文件的权限区别

文件:读文件内容(r)、写数据到文件(w)、作为命令执行文件(x)。
目录:读包含在目录中的文件名称(r)、写信息到目录中去(增加和删除索引点的连结)、搜索目录(能用该目录名称作为路径名去访问它所包含的文件和子目录)
具体说就是:
(1)有只读权限的用户不能用cd进入该目录:还必须有执行权限才能进入。
(2)有执行权限的用户只有在知道文件名,并拥有读权利的情况下才可以访问目录下的文件。
(3)必须有读和执行权限才可以ls列出目录清单,或使用cd命令进入目录。
(4)有目录的写权限,可以创建、删除或修改目录下的任何文件或子目录,即使使该文件或子目录属于其他用户也是如此。

查看目录权限 

查看文件权限的语句: 
  在终端输入: 
ls -l xxx.xxx (xxx.xxx是文件名) 
  那么就会出现相类似的信息,主要都是这些: 
-rw-rw-r-- 
  一共有10位数 
  其中: 最前面那个 - 代表的是类型 
  中间那三个 rw- 代表的是所有者(user) 
  然后那三个 rw- 代表的是组群(group) 
  最后那三个 r-- 代表的是其他人(other) 
  然后我再解释一下后面那9位数: 
  r 表示文件可以被读(read) 
  w 表示文件可以被写(write) 
  x 表示文件可以被执行(如果它是程序的话) 
  - 表示相应的权限还没有被授予 
  现在该说说修改文件权限了 
  在终端输入: 
  chmod o w xxx.xxx 
  表示给其他人授予写xxx.xxx这个文件的权限 
  chmod go-rw xxx.xxx 
  表示删除xxx.xxx中组群和其他人的读和写的权限 
  其中: 
  u 代表所有者(user) 
  g 代表所有者所在的组群(group) 
  o 代表其他人,但不是u和g (other) 
  a 代表全部的人,也就是包括u,g和o 
  r 表示文件可以被读(read) 
  w 表示文件可以被写(write) 
  x 表示文件可以被执行(如果它是程序的话) 
  其中:rwx也可以用数字来代替 
  r ------------4 
  w -----------2 
  x ------------1 
  - ------------0 
  行动: 
   表示添加权限 
  - 表示删除权限 
  = 表示使之成为唯一的权限 
  当大家都明白了上面的东西之后,那么我们常见的以下的一些权限就很容易都明白了: 
  -rw------- (600) 只有所有者才有读和写的权限 
  -rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限 
  -rwx------ (700) 只有所有者才有读,写,执行的权限 
  -rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限 
  -rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限 
  -rw-rw-rw- (666) 每个人都有读写的权限 
  -rwxrwxrwx (777) 每个人都有读写和执行的权限

转载于:https://www.cnblogs.com/focai/p/4272935.html

<think>好的,用户想了解如何使用Python通过SSH访问文件夹,获取操作权限并删除文件。我需要先理清这个问题涉及的关键步骤,然后逐步解释。 首先,用户可能需要通过SSH连接到远程服务器。Python中常用的库有ParamikoFabric。Paramiko是比较底层的库,而Fabric构建在Paramiko之上,可能更简化操作。不过这里用户可能需要具体步骤,所以选择Paramiko更合适。 接下来,建立SSH连接需要主机名、端口、用户名密码或密钥。用户需要提供这些信息,代码中需要处理连接部分,包括异常处理,比如网络问题或认证失败。 然后,一旦连接成功,需要打开一个SFTP会话,因为要操作文件系统,如访问文件夹删除文件。SFTP是SSH的一部分,Paramiko的SFTPClient类可以处理文件操作。 关于操作权限,用户可能需要执行某些需要更高权限的命令,比如删除受保护的文件。这时候可能需要使用sudo命令,但通过SSH执行sudo需要处理密码输入。这可以通过在exec_command中传入get_pty=True并发送密码来实现。不过,使用sudo可能存在安全风险,特别是在脚本中硬编码密码,需要提醒用户注意。 删除文件的话,可以使用sftp.remove()方法,但需要确保文件存在且有权限。如果文件路径不存在,或者权限不足,会抛出异常,所以需要错误处理。 另外,用户可能需要遍历文件夹,删除多个文件,或者使用通配符。但SFTP本身不支持通配符,可能需要先列出文件,然后逐个删除。比如使用sftp.listdir()获取文件,再过滤出需要删除的文件。 最后,关闭连接是必要的,避免资源泄露。使用try...finally块确保连接被正确关闭。 总结步骤应该是:导入Paramiko,创建SSH客户端,连接,执行SFTP操作,处理权限问题(如果需要sudo),删除文件,关闭连接。同时,要提醒用户安全注意事项,比如不要在代码中硬编码密码,建议使用密钥认证或环境变量。 可能用户的需求是自动化删除远程服务器上的文件,比如日志清理等。需要确保用户了解路径的正确性,避免误删重要文件。另外,如果目录结构复杂,可能需要递归删除,这时候可能需要更复杂的逻辑,或者使用rm -rf命令,但同样需要谨慎处理。 在代码示例中,需要展示基本流程,包括连接、SFTP操作、sudo处理(如果有),以及错误处理。同时,说明各个参数需要替换成用户的实际信息,比如hostname、username等。 最后,检查是否需要其他功能,比如确认删除操作,或者日志记录,但用户当前的问题可能只需要基础操作,所以保持简洁,但提供足够的信息让用户扩展。</think>在Python中通过SSH操作远程文件夹文件,可使用 `paramiko` 库实现。以下是分步指南: --- ### 一、前置准备 1. 安装必要库: ```bash pip install paramiko ``` 2. 确保已知远程服务器的以下信息: - IP地址或域名 - SSH端口(默认22) - 用户名及密码/密钥 - 目标文件路径 --- ### 二、完整操作流程 #### 步骤1:建立SSH连接 ```python import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接服务器(替换实际参数) ssh.connect( hostname='your_server_ip', port=22, username='your_username', password='your_password' ) print("SSH连接成功") except Exception as e: print(f"连接失败: {str(e)}") exit() ``` #### 步骤2:获取文件操作权限 需要**管理员权限**时,通过 `sudo` 执行命令: ```python # 执行sudo命令删除文件(需密码) command = 'sudo rm /path/to/file.txt' stdin, stdout, stderr = ssh.exec_command(command, get_pty=True) stdin.write('your_sudo_password\n') # 输入sudo密码 stdin.flush() # 检查结果 if stderr.read(): print("删除失败") else: print("文件已删除") ``` #### 步骤3:通过SFTP直接操作文件(推荐方式) ```python sftp = ssh.open_sftp() try: # 删除文件(无需sudo时) sftp.remove('/path/to/file.txt') print("文件删除成功") except IOError as e: print(f"操作失败: {str(e)}") finally: sftp.close() ``` #### 步骤4:关闭连接 ```python ssh.close() ``` --- ### 三、关键注意事项 1. **权限问题**: - 若文件属于其他用户,需先通过 `chmod` 修改权限 - 示例:`ssh.exec_command('sudo chmod 777 /path/to/file.txt')` 2. **安全建议**: - 避免在代码中硬编码密码,推荐使用SSH密钥认证 - 敏感信息可通过环境变量传递 3. **错误处理**: - 使用 `try-except` 捕获 `IOError` `PermissionError` - 检查文件是否存在:`sftp.stat(file_path)` --- ### 四、扩展场景 - **递归删除文件夹**: ```python ssh.exec_command('sudo rm -rf /path/to/folder') ``` - **批量删除文件**: ```python files = sftp.listdir('/path/to/folder') for file in files: if file.endswith('.tmp'): sftp.remove(f'/path/to/folder/{file}') ``` 通过上述方法,你可以在Python中安全地管理远程服务器的文件系统。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值