Linux как узнать домашний каталог пользователя

Обновлено: 07.07.2024

Как найти домашний каталог произвольного пользователя из Grails? В Linux это часто /home/user. Однако на некоторых ОС, например OpenSolaris, путь/export/home/user.

Можете ли вы быть более конкретным? Вы ищете домашний каталог пользователя, который запускает grails, или домашний каталог произвольного пользователя, чье имя или UID у вас есть?

Для UNIX-подобных систем вам может потребоваться выполнить " echo

username " с помощью оболочки (поэтому используйте Runtime.exec() для запуска

username» кажется лучшим ответом. Я вижу так много людей, которые набирают «cd / home / username» вместо «cd

username» . Конечно, вы никогда не должны выкладываться, если вам не нужно.

Но поскольку Java не предоставляет API для этого, единственной альтернативой, которую я могу придумать, является JNI, что даже хуже, чем вызов оболочки.

похоже, поможет, если вы вошли в систему как пользователь, чей домашний каталог вы ищете.

Чтобы быть сверхточным здесь - /bin/sh в POSIX гарантированно является Bourne-совместимой оболочкой, но расширение тильды (

user ) не является одной из обязательных функций такой оболочки. В дистрибутивах Linux BASH используется как /bin/sh , для которого работает расширение тильды. Если вы запустите echo

используя /bin/sh в другой ОС UNIX, вы можете получить только тильду (например, "

" ) вместо пути к домашней директории.

Это не отвечает на вопрос. Они не спрашивали, как найти свой домашний каталог, они спрашивали, как найти домашний каталог пользователя.

username а не просто echo

@JoachimSauer Ах, хорошо, моя ошибка. Я не осознавал, что «имя пользователя» было заполнителем для имени пользователя, путь к каталогу которого вы хотите получить. Я просто попробовал это в моей системе, и это сработало. Благодарю.

Обычно вы используете оператор

чтобы получить домашний каталог пользователя на любой платформе. См. Документацию по методу getProperty, чтобы узнать, что еще вы можете получить.

Возможно, проблемы с доступом могут быть устранены с помощью этого обходного пути (с использованием файла политики безопасности)

Сервер приложений будет работать как рабочий пользователь и находиться, например, в / opt. Это может или не может работать, в зависимости от того, как настроен производственный учет. Следовательно, запрос домашнего каталога рабочего пользователя может не быть ответом. ОП спрашивал дом произвольного пользователя. Но user.home является одним из текущего пользователя. Всегда ли работает этот метод, если вы перейдете из дома текущих пользователей к родителю, а затем в каталог с указанным именем пользователя?

Попробуйте это на Java:

Для произвольного пользователя, в качестве веб-сервера:

Если вы пытаетесь сделать это для имени пользователя, которое вы не можете жестко закодировать, это может быть сложно. Конечно echo

rbronosky сообщит вам путь к моему домашнему директорию /home/rbronosky , но что, если rbronosky находится в переменной? Если вы делаете name=rbronosky; echo

$name , вы получаете

Вот реальный мир и решение:

У вас есть script, который пользователь должен выполнить через sudo. script должен получить доступ к домашней папке пользователя. Вы не можете ссылаться на

/.ssh , иначе он будет расширяться до /root/.ssh . Вместо этого вы выполните:

Красота заключается в том, что если script не запускается как sudo, тогда $SUDO_USER пуст, так что это в основном то же самое, что и "echo

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

Если вы используете set -o nounset , который вы должны использовать, вы хотите выполнить экспорт до что.

Благодарю. Что я искал Это полезно в сценарии оболочки. В чем смысл тройки <<<? Перенаправление Google, здесь, ortriple lt не информирует меня, и я ничего не нахожу в печатных ссылках.

$SUDO_USER" | bash) "эхо эхо? что?"

Если вы хотите найти конкретный домашний каталог пользователя, я не думаю, что вы можете сделать это напрямую.

Когда мне нужно было сделать это раньше с Java, мне пришлось написать некоторый собственный код JNI, который завершал семейство вызовов UNIX getpwXXX() .

Для этого вы можете использовать переменную окружения $HOME .

Я предполагаю, что вы хотите найти домашний каталог РАЗЛИЧНОГО пользователя. Очевидно, что получение свойства user.home было бы самым простым способом получить текущий домашний каталог пользователя.

Чтобы получить произвольный домашний каталог пользователя, в командной строке требуется немного утонченности:

Теперь технически мы должны ожидать поток на stdout и stderr, чтобы буферы не заполняли и не блокировали процесс, но я надеялся, что буфер, по крайней мере, может содержать одно имя пользователя. Кроме того, вы можете проверить результат, чтобы узнать, начинается ли он с

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

Надеюсь, что это поможет. Проголосуйте за этот ответ, если он делает то, что я новичок, чтобы внести вклад в SO и использовать точки.

Как найти домашний каталог произвольного пользователя из Grails? В Linux это часто /home / user. Однако в некоторых ОС, таких как OpenSolaris, например, путь /export/home/user.

для UNIX-подобных систем вы можете выполнить" echo

username " использование оболочки (поэтому используйте Runtime.exec() для выполнения

обычно вы используете оператор

чтобы получить домашний каталог пользователя на любой платформе. См. документацию по методу для getProperty чтобы увидеть, что еще вы можете сделать.

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

попробуйте это на Java:

для произвольного пользователя, а на сервер:

вы можете использовать переменную среды $HOME для этого.

Если вы хотите найти домашний каталог конкретного пользователя, я не верю, что вы можете сделать это напрямую.

когда мне нужно было сделать это раньше с Java, мне пришлось написать собственный код JNI, который обернул UNIX getpwXXX() семейные звонков.

если вы пытаетесь сделать это для имени пользователя, которое вы не можете жесткий код, это может быть сложным. Конечно!--1--> сказал бы вам путь к моему дому dir /home/rbronosky , но что, если rbronosky находится в переменной? Если вы это сделаете name=rbronosky; echo

$name вы получаете

вот реальный случай и решение:

у вас есть скрипт, который пользователь должен запустить через судо. Скрипт должен получить доступ к домашней папке пользователя. Вы не можете ссылаться

/.ssh или он будет расширяться до /root/.ssh . Вместо этого вы делаете:

красота в том, что если скрипт не запускается как судо тогда $SUDO_USER пуст, поэтому это в основном то же самое, что делать "echo

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

если вы используете set -o nounset , который вы должны использовать, вы хотите сделать экспорт до этого.

Я предполагаю, что вы хотите найти домашний каталог другого пользователя. Очевидно, получение "пользователя".главная " свойство будет самый простой способ получить текущий домашний каталог пользователя.

чтобы получить произвольный домашний каталог пользователя, требуется немного изящества с помощью командной строки:

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

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

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

чтобы найти домашний каталог для пользователя FOO в системе UNIX-ish, используйте

FOO . Для текущего пользователя, используйте

найдите оболочку Java для getpwuid/getpwnam(3) функции, они запрашивают у системы информацию о пользователе по uid или по имени входа, и вы получаете всю информацию, включая домашний каталог по умолчанию.

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

Требования

Cервер с Ubuntu 20.04

Все команды, описанные ниже, будут работать и в других дистрибутивах Linux.

Расположение каталогов в файловой системе

При входе на сервер, вы, как правило, попадаете в домашний каталог вашей учетной записи, отведенный для хранения файлов и создания директорий.

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

Результат выполнения команды выглядит следующим образом:

Домашний каталог располагается после имени учетной записи пользователя, в приведенном примере он называется /demo. Этот каталог находится в каталоге с именем /home и в каталоге верхнего уровня, который называется root или корневой каталог, поэтому представлен одной косой чертой /.

Просмотр содержимого каталогов

Для просмотра содержимого каталога используется команда ls. Название этой команды является сокращением слов list files.

Просмотреть содержимое любой директории можно следующими способами:

Либо введя команду:

В результате выполнения команды отображаются файлы и каталоги, находящиеся внутри данного каталога:

К команде ls можно добавлять дополнительные флаги, например, чтобы показать детализированное представление (права, список владельцев файлов или папок, размер, дату последнего модифицирования) файлов и директорий в текущей директории, можно использовать флаг -l:

Результат выполнения команды:

Для просмотра списка всех файлов, включая скрытые файлы и каталоги, вы можете добавить флаг -a:

Результат выполнения команды:

Отобразить содержимое текущей директории с добавлением к именам символов, характеризующих тип, можно с помощью команды:

Результат выполнения команды:

Перемещение между каталогами

Для перехода в домашний каталог используется команда cd. Название этой команды является сокращением слов change directory.

Для перехода в домашний каталог пользователя user используется команда:

Для перехода в предыдущую директорию, в которой мы находились до перехода в текущую директорию также используется команда cd.

В Linux-системах каждый файл и каталог находятся в самой верхней директории, которая называется «корневой» и обозначается одним символом слэш /.

Абсолютный путь указывает на расположение каталога по отношению к этой директории верхнего уровня. Это позволяет обращаться к справочникам однозначным образом из любого места в файловой системе.

Каждый абсолютный путь должен начинаться с косой черты — символа слэш /.

Для перехода в директорию уровнем выше используется команда:

Для перехода в директорию двумя уровнями выше:

Операции с файлами и каталогами

Далее приведен список основных команд навигации в консоли Linux.

Создание

Создание файлов производится с помощью команды:

Создание каталогов выполняется с помощью команды вида:

Название этой команды является сокращением слов make directory.

Создание двух каталогов одновременно выполняется с помощью команды:

Для создания дерева каталогов используется команда следующего вида:

Удаление

Для удаления директорий используется команда rmdir имя_директории. Название этой команды является сокращением слов remove directory.

Для удаления файлов используется команда rm. Например, для удаления файла с именем file1 используется команда:

Команда rm также позволяет удалять не только файлы, но и каталоги.

Для удаления директории с именем dir1 со всеми подкаталогами и файлами используется опция -r (от слова recursive):

Можно удалить одновременно две директории со всем их содержимым:

Также можно использовать параметр -f, который означает, что при удалении не будет запрашиваться подтверждение.

Команда для удаления файла будет выглядеть так:

Команда для удаления каталога:

Перемещение

Для перемещения и переименования файлов и каталогов используется команда mv. Название этой команды является сокращением слова move.

Переименовать файл можно с помощью команды:

Для того чтобы переместить файл, используется команда:

Копирование

Для копирования используется команда cp. Название этой команды является сокращением слова copy.

Чтобы скопировать файл file1 и назвать его file2, используется команда:

Для того чтобы копировать директорию dir1 в директорию dir2, используется команда:

Скопировать файл с именем file1 в директорию с именем dir1, можно с помощью команды:

Редактирование файлов

Мы ознакомились с основными командами для работы с каталогами и файлами.

Далее мы изучим, как редактировать файлы и добавлять в них содержание.

Команда nano позволяет работать в одном из самых простых текстовых редакторов командной строки Linux, который занимает весь терминал в течение всего срока его использования.

В результате ввода в терминал команды nano будет открыт чистый файл.

Интерфейс выглядит следующим образом:


В верхней части открывшегося редактора отображается имя приложения и имя файла, который мы редактируем.

В середине должно располагаться содержимое файла, в настоящее время оно пустое.

В нижней части интерфейса расположен ряд комбинаций клавиш, которые указывают с основными элементами управления текстового редактора. Для каждого из них символ ^ означает клавишу CTRL.

Для того чтобы открыть справку используйте сочетание клавиш CTRL-G.

Закрывается справка с помощью сочетания клавиш CTRL-X. После закрытия справки мы возвращаемся к редактированию.

Вводить и редактировать можно любой текст, например, можно ввести: “Hello World!”

Для сохранения внесенных изменений следует нажать сочетание клавиш CTRL-O. Внимание! Это буква О, а не ноль.

Далее система попросит вас ввести либо подтвердить имя файла, который вы хотите сохранить:

Как вы можете видеть, параметры в нижней части окна редактирования также изменились. Они являются контекстными, то есть будут меняться в зависимости от того, что вы пытаетесь сделать.

После ввода имени файла нажмите клавишу ENTER.

Для того чтобы выйти из тестового редактора нажмите сочетание клавиш CTRL-X.

Если вы внесли изменения и не сохранили файл, вам будет предложено сохранить сделанные вами изменения:

Вы можете нажать клавишу Y, чтобы сохранить изменения, клавишу N для отмены изменений и выхода, или сочетание клавиш CTRL-C, чтобы отменить операцию выхода из режима редактирования файла.

Если вы решили сохранить изменения, вам будет предложено сохранить их в том же файле, который был отредактирован.

Нажмите клавишу ENTER, чтобы сохранить файл и выйти из редактора.

Заключение

Мы ознакомились с возможностями просмотра доступных файлов и каталогов, с основными командами для работы с файлами, которые позволяют просматривать, копировать, перемещать и удалять файлы, а также с основами редактирования в текстовом редакторе nano.


Команда cd используется для перехода в домашний каталог (директорию) /home пользователя.

user для перехода в домашний каталог пользователя можно воспользоваться и этой командой.

Для перехода в любой другой каталог пропишите команду cd и через пробел путь к нужному каталогу.

Например введя в консоли команду cd /home перейдем в каталог /

cd… команда для перехода в каталог уровнем выше того, в котором сейчас находитесь.

cd . /… команда для перехода в каталог двумя уровнями выше того, в котором сейчас находитесь.

cd — переход в каталог в котором вы находились до перехода в текущий каталог.

Команды linux для просмотра содержимого каталогов:

pwd эта команда linux показывает полный путь к каталогу в котором вы сейчас находитесь.

ls команда показывает все содержимое текущего каталога, т.е. каталога в котором вы сейчас находитесь.

ls -F отображает все содержимое текущего каталога и добавляет к файлам и подкаталогам символы, характеризующие их тип.

ls -l кроме содержимого каталога показывает время создания файлов, размер, права доступа и количество файлов в подкаталогах.

ls -a команда отображает скрытые файлы в вашем текущем каталоге.

ls *9* команда показывает список файлов и директорий, содержащие в своем имени цифры.

tree показывает древовидный список файлов и каталогов в вашем текущем каталоге. Также подсчитывает их количество. В зависимости от количества файлов подсчет файлов может занять некоторое время.

dir показывает содержимое вашего текущего каталога в алфавитном порядке и с учётом регистра названий.

df выводит в консоли количество занятого и свободного места на жестком диске для каждого каталога системы.

А команда du покажет вам количество блоков диска, занятых каждым файлов в вашем текущем каталоге.

Команды linux для работы с файлами и каталогами:

(небольшое примечание: Для работы с файлами нужно иметь права доступа к ним. Что это такое можно почитать здесь)

mkdir dir1 создает

каталог с именем dir1

mkdir dir1 dir2 создает два каталога с именами dir1 и dir2

mkdir -p /home/dir1/dir2 создает в каталоге /home дерево директорий. Это значит что создается каталог dir1 с находящимся внутри него каталогом dir2.

rm -f file1 команда линукс для удаления файла с именем file1

rmdir dir1 команда для удаления каталога с именем dir1

rm -rf dir1 удаляет каталог с именем dir1 вместе со всем его содержимым.

rm -rf dir1 dir2 одновременно удаляет два каталога dir1 и dir2 вместе с их содержимым.

Используя linux команду mv можно перемещать и переименовывать файлы и каталоги.

mv dir1 new_dir эта команда перемещает либо переименовывает файл или каталог из dir1 в new_dir

Команды linux для копирования файлов:

cp file1 file2 команда для копирования файла file1 в файл file2

копирует все файлы из каталога dir в текущий каталог.

cp -a /tmp/dir1 команда копирует каталог dir1 из /tmp/ со всем своим содержимым в ваш текущий каталог.

cp -a dir1 dir2 данная команда копирует каталог dir1 в каталог dir2

ln -s file1 lnk1 при помощи этой команды создается символическая ссылка на файл file1 или на каталог.

ln file1 lnk1 а этой командой создается так называемая «жёсткая» (физическая) ссылка на файл file1 или на каталог.

Читайте также: