В чем разница между каталогом между косой чертой, после косой черты и заканчивающимся косой чертой?

Предположим, что мы редактируем файл /root/.bashrc, чтобы он был:

$ sudo su -
Password: ******
# cat ~/.bashrc

echo "root bashrc file was read"
PATH=~/bin:$PATH
echo "$PATH"
export USERVAR=set
echo "$USERVAR"

umask 022
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

Давайте выйдем из системы и войдем снова, чтобы bash прочитал файл:

# exit
$ sudo su -
root bashrc file was read
/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set
root@here:~# alias l
alias l='ls $LS_OPTIONS -lA'
root@here:~# 

Как видите, файл был прочитан, ПУТЬ изменен и установлены псевдонимы. Все функционально, как вы просите.

Однако sudo по-прежнему не будет работать так, как вы ожидаете.

root@here:~# exit
$ sudo env | grep USERVAR              # no output 
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ПУТЬ не изменился. Могут быть способы изменить путь в sudoers, но я настоятельно рекомендую вам избегать этого. И, в любом случае, псевдонимы, функции и некоторые другие изменения все равно не будут применены путем изменения только PATH. Файл должен быть исходным. Выполнение этого для каждого скрипта или команды потребует от компьютера выполнения дополнительной работы без какой-либо реальной выгоды. Сценарии не используют псевдонимы (, они не имеют практического применения внутри сценариев ).

Итак, просто войдите в систему, файл .bashrcбудет загружен автоматически и приступайте к работе.

Вы можете запустить bash так:

$ sudo bash
root bashrc file was read
/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set
root@mail:/home/isaac/me/temp/clocks-master#

Но, как вы видите выше, pwd (рабочий каталог )не изменился, и, если вы посмотрите немного больше, некоторые другие настройки также не изменились. Вот почему правильной командой является использование:

$ sudo su -

Если эта команда слишком длинная для ввода, создайте псевдоним или функцию для пользователя (, а не root ), где будет использоваться эта команда, что-то вроде:

$ alias mysu='sudo su -'
$ mysu
# 
2
22.08.2020, 12:53
2 ответа

Между /bin/и /binнет практической разницы, за исключением того, что /bin/более явно сообщает, что это каталог. Наивная программа может искать в этом подсказку, чтобы решить, похоже ли это на файл или каталог.

Последний, однако, будет ссылаться на каталог binв текущем рабочем каталоге. Если вы находитесь в корневом каталоге /, он будет совпадать с двумя предыдущими ссылками. Всякий раз, когда вы меняете каталоги, каталог, на который ссылаются, будет меняться, если он вообще существует.

0
18.03.2021, 23:10

/bin/— абсолютный путь к каталогу 'bin'.

/bin— абсолютный путь к bin-файлу (, который может быть каталогом)

bin/— относительный путь к каталогу 'bin'.

Для полноты:

bin— относительный путь к bin-файлу (, который может быть каталогом)

2
18.03.2021, 23:10

Теги

Похожие вопросы