Как создать псевдоним bash в Ubunth WSL, если имя пользователя содержит пробел и апостроф

Это не удается, потому что вы должны быть целью (владельцем файла ), cp не отменяет базовую безопасность Unix. Пользователь может сохранять свои собственные файлы, wilmes -> wilmes, но не может делать это для других пользователей, и уж точно не для root. Я предполагаю, что вы не вошли в систему ни как root, ни как wilmes.

В этом случае один файл принадлежит пользователю root, а другой — пользователю wilmes. Для сохранения попробуйте запустить:

sudo cp -p b a

Соответствующие ссылки:

Пример:

Создать файл для root, a, и файл для обычного пользователя (joe ), b.

joe@testbed:~/tmp2$ sudo touch a
joe@testbed:~/tmp2$ touch b

Проверьте правильность разрешений.

joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 root    root    0 Jun 22 13:51 a
-rw-r--r-- 1 joe     joe     0 Jun 22 13:51 b

Попытка скопировать принадлежащий пользователю файл b поверх файла, принадлежащего пользователю root (, что нарушит права доступа):

joe@testbed:~/tmp2$ cp -p b a
cp: cannot create regular file 'a': Permission denied

Повторите копирование как root, права доступа сохранены:

joe@testbed:~/tmp2$ sudo cp -p b a
joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 a
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 b

Примечание :Отказано в доступе, а не Операция не разрешена . Я предполагаю, что вы видите не разрешено, потому что пользователь wilmes ДЕЙСТВИТЕЛЬНО имеет доступ к файлу через группу, однако он не является владельцем , поэтому он не может полностью перезаписать его.

По логике, вы заменяете файл, принадлежащий другому пользователю (root ), и просите систему также сделать вас владельцем этого файла, что было бы катастрофической уязвимостью в системе безопасности.

Например, что, если бы я пришел как обычный пользователь malicious.username01и захотел заменить crontab на что-то вроде ntp, принадлежащего root? Если бы то, что вы пытаетесь сделать, сработало, я мог бы просто написать свою собственную вредоносную версию, а затем просто cp -p my-malicious-script /etc/cron.daily/ntp. Это было бы ужасно. Действительно очень ужасно.

1
21.08.2019, 20:17
3 ответа

Одинарные кавычки в одиночной -строке в кавычках нельзя экранировать, но, к счастью, вы можете просто использовать двойные кавычки вокруг определения псевдонима, а затем (экранированные )двойные кавычки вокруг имени каталога:

alias windocs="cd \"/mnt/c/Users/Firstname L'astname/Documents/\""

В качестве альтернативы вы можете сделать символическую ссылку на этот каталог в свой домашний каталог Linux:

ln -s "/mnt/c/Users/Firstname L'astname/Documents/" ~/docs

А затем, простоcd docs(или cd ~/docs, если вы не в своем домашнем каталоге, )доставит вас туда.

3
27.01.2020, 23:15

Ну, я должен был сначала посмотреть это. Я поместил всю строку в двойные -кавычки в соответствии с этим ответом stackoverflow :

alias windocs="cd /mnt/c/Users/Firstname\ L\'astname/Documents/"

и теперь это работает. Это связано с тем, что нет механизма выхода из строк с одинарными кавычками -, но есть для строк с двойными кавычками (в соответствии с другим ответом ).

1
27.01.2020, 23:15

Для подсистемы Windows для Linux (WSL )только , переменные среды Windows можно сопоставить с $WSLENVпеременной среды на стороне WSL. Например, /mnt/c/Users/username/на стороне Windows сохраняется как переменная среды %USERPROFILE%.

Для этого сначала добавьте переменную в Windows, выполнив эту команду от имени администратора в командной строке

setx WSLENV USERPROFILE

Затем добавьте псевдоним в.bashrc(или подобные файлы ). Например,

alias windocs='cd $(wslpath $USERPROFILE/Documents)'

Здесь wslpathпреобразует путь в стиле Windows (обратная косая черта )в *путь в стиле NIX (косая черта ). На схемах

   Windows        <--->      WSL
C:\Users\username <--->  /mnt/c/Users/username
USERPROFILE       <--->  WSLENV

Дополнительную информацию см. в блоге Совместное использование переменных среды между WSL и Windows .

1
27.01.2020, 23:15

Теги

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