Ваша проблема в том, что выражение {...}
является также правильным синтаксисом оболочки. Например, выполните:
echo file/{one,two}
И вы получите:
file/one file/two
Итак, когда вы выполняете:
curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'
Выражение {foo,bar,baz}
интерпретируется вашим shell, и curl
фактически получает командную строку:
curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'
Поскольку curl
не видит {. ...}
, вы не получите
волшебной обработки для #1
. Решение заключается в том, чтобы заключить URL
в одинарные кавычки:
curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'
Одинарные кавычки препятствуют расширению строки оболочкой.
Если sudo был вашим единственным способом доступа к учетной записи root, и у вас нет запущенной оболочки root, вам придется восстановить доступ к учетной записи root внешними средствами, обычно требующими физического доступа к машине. Наиболее распространенным способом является выбор "однопользовательского режима" или "режима восстановления" в приглашении к загрузке (может потребоваться выполнить какое-либо действие, например, нажать и удерживать Shift, чтобы появилось приглашение к загрузке). Как это сделать, зависит от настроек загрузчика, которые в разных дистрибутивах выполняются по-разному, поэтому поищите документацию или учебники, относящиеся к вашему дистрибутиву.
Если вы не можете получить приглашение root в однопользовательском режиме, вы можете перейти в еще более урезанный режим, добавив init=/bin/sh
в командную строку ядра. Вы попадете в оболочку root, но вам нужно выполнить несколько команд, чтобы получить пригодное для использования окружение:
mount -t proc proc /proc
mount -o remount,rw /
bash
Теперь вы можете редактировать проблемный файл.
Если вам нужно несколько терминалов в однопользовательском режиме, вы можете открыть новую оболочку на другой виртуальной консоли командой openvt
. Для переключения между виртуальными консолями используйте Ctrl+Alt+F1, Ctrl+Alt+F1 и т.д.
Не редактируйте sudoers
напрямую. Используйте visudo
. Эта команда вызывает редактор, затем проверяет синтаксис файла и прерывает модификацию при наличии синтаксической ошибки. Вы все еще можете заблокировать себя, например, удалив строку, которая предоставила вам доступ, но это снижает риск.
В Ubuntu в качестве редактора по умолчанию используется nano. Во многих других дистрибутивах по традиции используется vi. Чтобы выбрать другой редактор, установите переменную окружения VISUAL
, например,
export VISUAL=joe
Вы можете использовать каталог /var/tmp
в качестве временного хранилища, если хотите сделать копию файла, которую можно прочитать после перезагрузки в обычном режиме. Убедитесь, что файл доступен для чтения вашей обычной учетной записи.
cp /etc/sudoers /var/tmp
chmod a+r /var/tmp/sudoers
Совет: всякий раз, когда вы вносите изменения, которые могут повлиять на вашу способность получить доступ к учетной записи, держите запущенную оболочку в одном окне и проверяйте доступ в другом окне. Если вы не получаете доступ, переключитесь обратно на запущенную оболочку и устраните проблему или немедленно отмените изменения.
Я очень признателен за помощь. В файле sudo, который я набрал в режиме восстановления, действительно была ошибка. Мне не хватало закрывающей кавычки при указании путей в строке «Defaults secure_path» (точнее, «чтобы быть более точным). Мне удалось решить проблему, и теперь у меня снова работает sudo :). Отлично!
Большое спасибо за вашу помощь, дамы и господа.