Ubuntu 无法在安装新的版本前,为 ./usr/bin/strings 做一个符号链接备份..Operation not permitted

当Ubuntu服务器开机卡在登录界面且无法进入时,可能是因为ubuntu-desktop问题导致。在重装过程中遇到binutils依赖安装的Operationnotpermitted错误。解决方法涉及检查并修复lsattr和chattr,这两个工具用于管理文件属性。通过下载源代码,编译新的chattr,然后用其去除系统中原有文件的不可更改和删除属性,从而解决权限问题。

问题描述

有一天ubuntu服务器开机一直卡在登录界面,密码输入正确但是反复出现登录界面就是进不去,推测可能是ubuntu-desktop软件出了问题,于是在重装ubuntu-desktop过程中提示要安装binutils依赖,但是在安装binutils一直提示标题展示的错误,即做符号链接备份时提示Operation not permitted

一般遇上这种Operation not permitted** 的问题,多半是电脑上 lsattrchattr 出了问题。我这里提示的 /usr/bin/strings 无权限,但是我使用如下命令查看文件权限时,没有任何输出

sudo lsattr /usr/bin/strings

说明我的lsattr文件已经损坏,而使用chattr更改文件属性时也没有输出

解决办法

chattr指令用于设置文件属性,‘+’选项,将给文件添加属性;‘-’选项,移除文件中的属性;‘=’选项,使得文件只有这些属性。
在这里插入图片描述

由于系统中的chattr文件和lsattr文件本身带有 a 和 i 属性,不能直接重新安装这两个指令文件。所以需要从网上找到chattr的源代码,编译一个文件来去掉系统中的chattr和lsattr文件的不可更改和删除的属性。具体操作步骤如下:

//下载源代码
wget https://github.com/posborne/linux-programming-interface-exercises/archive/refs/heads/master.zip

//解压
unzip master.zip 
cd linux-programming-interface-exercises-master\15-file-attributes

//编译
gcc chattr.c  

//重命名
sudo cp a.out chattr

//使用新的chattr更改系统中原有的chattr权限
sudo ./chattr -ia /usr/bin/chattr
sudo ./chattr -ia /usr/bin/lsattr 

//下载新的chattr文件
sudo apt-get install e2fsprogs 

//e2fsprogs文件是ubuntu下的包,其他系统请参考https://command-not-found.com/lsattr的提示下载

在这里插入图片描述

经过以上步骤,系统中的chattr和lsattr文件应该已经被修复了,下面使用类似的方法更改安装软件过程中遇到的障碍,例如我的服务器报文件权限错误的是 /usr/bin/strings 那么则使用chattr 更改它的不可操作属性

sudo chattr -ia /usr/bin/strings
### 3.1 使用指定路径安装 CocoaPods 在使用 `sudo gem install cocoapods` 安装过程中,如果遇到权限错误 `Errno::EPERM`,通常是因为系统对 `/usr/bin` 目录的写入权限进行了限制。为了解决这一问题,可以使用 `-n` 参数将 CocoaPods 安装到 `/usr/local/bin` 路径,该路径通常具有更宽松的权限设置: ```bash sudo gem install -n /usr/local/bin cocoapods ``` 此命令将 CocoaPods 的可执行文件安装到 `/usr/local/bin`,从而避免对系统受保护目录的写入操作,有效规避权限错误 [^2]。 ### 3.2 更改 Ruby 源以提高下载速度 在某些情况下,使用官方 Ruby 源安装 CocoaPods 可能会导致下载速度缓慢或连接失败。可以通过切换到国内镜像源(如淘宝源)来加速安装过程: ```bash gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/ gem sources -l ``` 此操作将 Ruby 源更换为国内镜像,有助于提升 CocoaPods 及其依赖项的下载速度 [^3]。 ### 3.3 禁用系统完整性保护(SIP) 在某些 macOS 版本中,系统完整性保护(System Integrity Protection, SIP)可能会阻止对 `/usr/bin` 等关键目录的修改。如果必须将 CocoaPods 安装到 `/usr/bin`,可以通过禁用 SIP 来解决权限问题: ```bash sudo nvram boot-args="rootless=0" sudo reboot ``` 此操作会禁用 SIP,使系统允许对受保护目录进行写入。重启后可以尝试直接安装 CocoaPods: ```bash sudo gem install cocoapods ``` 需要注意的是,禁用 SIP 会降低系统的安全性,因此建议仅在必要时使用,并在完成安装后重新启用 SIP [^3]。 ### 3.4 使用 RVM 管理 Ruby 环境 使用 Ruby 版本管理工具(如 RVM)可以避免对系统默认 Ruby 环境的修改,同时提供更灵活的 Ruby 版本切换能力。安装 RVM 后,可以选择一个非系统 Ruby 版本安装 CocoaPods: ```bash \curl -sSL https://get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm rvm install 2.7.4 rvm use 2.7.4 gem install cocoapods ``` 此操作将 CocoaPods 安装在用户自定义的 Ruby 环境中,避免与系统 Ruby 产生冲突,同时提升安装的灵活性和稳定性 [^1]。 ### 3.5 更新 RubyGems 并重新安装 CocoaPods 如果安装过程中仍然遇到权限问题,可以尝试更新 RubyGems 工具本身,以确保其支持最新的安装机制和路径管理: ```bash sudo gem update --system sudo gem install -n /usr/local/bin cocoapods ``` 更新 RubyGems 后,其对安装路径和权限的处理方式可能更加兼容现代 macOS 系统的安全机制,从而避免 `Errno::EPERM` 错误 [^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daimashiren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值