Як видалити файл з файлової системи в Linux, коли я не маю дозволу?


2

Я перевстановив ns2, але не видалив файл із файлової системи із шляхом:

/usr/bin/ns

Тож коли я набираю свій термінал:

which ns

Я отримав:

/usr/bin/ns 

Замість шляху, який я встановив:

/home/me/ns-allinone-2.35/bin/ns

Це в моєму домашньому довіднику me. Як слід видалити файл із файлової системи з подібним іменем? Властивості цього файлу в дозволах зазначають, що я не володію цим файлом, тому я не можу змінити дозволи.

Я не можу запустити свої сценарії tcl, якщо шлях встановлено неправильно, і щоб його встановити, мені потрібно видалити дублікат ns. Як отримати дозвіл на видалення? І як її видалити за допомогою мого терміналу?


Чи можете ви судо на цій машині?
Цифровий Кріс

так, я можу судо на цій машині.
pythonspark

Тоді ви можете sudo rm /usr/bin/nsі ще кращеsudo cp /home/me/ns-allinone-2.35/bin/ns /usr/bin
Digital Chris

@DigitalChris Якщо nsзалежить від того, що інші файли знаходяться у відносному шляху, або якщо це символьне посилання або жорстке посилання, sudo cp ...рядок може розірвати його та зупинити його роботу. Я не знаю, що nsце таке, але якщо це не лише один двійковий файл (я дуже сумніваюся в алліноні, що має binкаталог), ця операція не є безпечною.
allquixotic

2
Ага ... як ви погоджуєте "так, я можу судо" з "я не маю дозволу"?
Карл Віттофт

Відповіді:


8

Не потрібно видаляти файл /usr/bin/ns, щоб зробити whichта execавтоматично виконати /home/me/ns-allinone-2.35/bin/ns.

Все, що вам потрібно зробити, це поставити перед/home/me/ns-allinone-2.35/bin вами $PATH до /usr/bin .

Ось неправильний спосіб зробити це:

export PATH="${PATH}:/home/me/ns-allinone-2.35/bin"

У цьому випадку /usr/bin(за замовчуванням на $PATH) буде вище в $PATHрозширенні , ніж той , який ви хочете, так що ви будете виконувати /usr/bin/nsпри запуску nsабо which ns.

Ось правильний спосіб зробити це:

export PATH="/home/me/ns-allinone-2.35/bin:${PATH}"

Тепер просто введіть nsабо which nsвкажете на потрібне, не видаляючи нічого.

Оновлення: Якщо ви хочете, щоб уникнути модифікуючи $PATHін ~/.bashrcабо подібне, ви можете створити Баш скрипт обгортку навколо вашого TCL скрипт , який змінює шлях першим. Щось на зразок цього:

#!/bin/bash
export PATH="/home/me/ns-allinone-2.35/bin:${PATH}"
tcl ...

Якщо ви хочете /usr/bin/ns все-таки видалити , і у вас немає доступу до rootоблікового запису або можливості sudo(або внести себе до /etc/sudoersфайлу), і /usr/bin/nsвін належить rootі не піддається світовому запису, тоді ви, як правило, не можете скористатися видаленням цей файл, якщо :

  • Ви можете завантажувати комп'ютер в іншу операційну систему (живий компакт-диск, живий USB тощо), отримати root у цій ОС та видалити файл;
  • Ви виконуєте якусь експлуатацію ( я не рекомендую цього, якщо ви не володієте машиною! )

В основному "як я видалити файл, я не маю дозволу на видалення" - це завантажене запитання: питання передбачає, що власник машини хоче, щоб ви видалили цей файл, і хоче надати вам дозвіл. Якщо власником машини не ви , вам навіть не слід задавати це питання, і ми не допоможемо вам зламати чи вторгнутись у чужу машину. Це було б так, як сказати "як я вожу цю машину на вулиці, коли у мене немає ключів?" - Так, удачі в цьому.


ви маєте на увазі, що якщо я експортую PATH таким чином у мій файл .bashrc, мій сценарій tcl повинен працювати? тому що я не хочу експортувати PATH кожного разу, коли я запускаю сценарій після входу в термінал. я хочу зробити зміни шляху постійними.
pythonspark

Він дійсно повинен видалити цей двійковий файл, якщо йому не потрібно виконувати його з цього каталогу, але я згоден з рештою вашої оцінки. Крім того, навіть якщо він зробив це неправильно, whichвін показав би інші місця.
Даніель Шато

Ви дійсно можете помістити його у свій ~/.bashrcфайл; до тих пір, поки ви лише виконуватимете скрипт tcl як ваш користувач, ви будете добре.
allquixotic

@DanielChateau Яка у whichвас реалізація ? На моїх машинах whichлише коли-небудь показує перший екземпляр знайденого виконуваного файлу. Так, наприклад, якщо у вас був /usr/bin/bash/ usr / local / bin / bash , and both directories were on $ PATH , it would only list the one that occurs **first** as a result of a path-search for the executable. Similarly, if you chmod -x` один із екземплярів, цей екземпляр буде "прихований" від whichйого пошуку. Ось як це завжди працює над моїм боксером ....
allquixotic

Оновлена ​​відповідь з невеликим посібником про те, як ОП може написати для цього обгортку скриптів, навіть не змінюючи їх .bashrc.
allquixotic

1

Швидкий погляд на мої власні /usr/bin/показує, що каталог належить root. Припускаючи , що ви можете використовувати sudoабо su, або , rmяк rootі використовувати , chownщоб змінити його ім'я користувача або групи.

Ви можете стати користувачем root, просто видавши suкоманду. У більшості терміналів ви побачите вашу швидку зміну з $ на #, що вказує, що ви зараз увійшли в термінал як корінь. Переконайтеся, що після завершення роботи ви exitневідкладно видаєте інші команди з таким підвищеним доступом до файлової системи, що може призвести до пошкодження вашої файлової системи. Звідти ви можете користуватися rmдалі /usr/bin/ns.

Більш безпечним маршрутом є використання sudoкоманди, щоб дозволити запускати команду як корінь лише для цього примірника, видавши rmкоманду так:

sudo rm /usr/bin/ns


як використовувати chown або rm як корінь, чи можете ви, будь ласка, детально розробити? чи зможу я її видалити таким чином?
pythonspark

Я оновив свою відповідь, щоб адресувати ваш коментар.
Даніель Шато

Я зробив те, що ти сказав, і тепер після того, як я набираю, яка родина, мені нічого не дає. Це хороший знак?
пітонний парк

Це, принаймні, означає, що ви відмовилися nsвід /usr/bin/правильності, але вам все одно потрібно дотримуватися того, що всекіхоотично було зазначено у його відповіді, щоб повністю вирішити вашу проблему.
Даніель Шато

1

@allquixotic абсолютно прав. Ви не можете видалити файл, якщо у вас немає дозволів на це, і єдиним способом було б отримати дозволи за допомогою експлуатації або за допомогою чогось типу, sudoякщо у вас є право. У цьому вся суть дозволів файлової системи.

Тепер ще один підхід, який ви можете використовувати, щоб подолати це, - це створити псевдонім. Відкрийте файл ініціалізації оболонки ( ~/.bashrcякщо ви використовуєте bash) та додайте цей рядок:

alias ns='/home/me/ns-allinone-2.35/bin/ns'

Псевдоніми Bash оцінюються до того, як $PATHбуде здійснено пошук, так що це стане nsкомандним пунктом для локально встановленої версії за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.