Ваша стратегия именования кажется прекрасной. В моем отделе в университете диски экспортируются так же как:
/machine-name/s0
/machine-name/s1
/machine-name/s2
ко всем другим локальным машинам. Это - по существу та же схема именования, которую Вы предлагаете.
Одной вещью, которую необходимо будет рассмотреть, хотите ли Вы получить доступ к Вам NAS от нескольких машин, является непротиворечивость идентификатора пользователя через машины. Samba может заботиться об этом для клиентов окон, но для клиентов Linux Вы, вероятно, захотите синхронизировать идентификаторы пользователей через поля. Мой опыт с этим состоит в том, чтобы использовать NIS, но существуют другие (LDAP, ручное слияние passwd/shadow/group, и т.д.) пути.
Ваш вариант использования не очень убедителен. Большинство людей включают текущий каталог как часть приглашения; zsh имеет чрезвычайно широкие возможности настройки подсказок (включая многострочные подсказки, левые и правые подсказки и т. д.). С завершением (который снова в zsh очень настраиваемый) вы можете отображать списки файлов в тех контекстах, где они вам нужны. При этом есть способы достичь того, что вы описываете, но ни один из них не является одновременно простым и приятным.
Оболочка управляет только своим собственным вводом и выводом. Когда вы выполняете команду, оболочка ничего не контролирует. Если вы хотите зарезервировать часть терминала для таких вещей, как вывод ls
, вам потребуется сотрудничество с терминалом. В чем точная разница между «терминалом», «оболочкой», «tty» и «консолью»? может быть полезным справочным материалом.
На некоторых терминалах можно определить прокручиваемую область; то, что находится за пределами прокручиваемой области, остается на месте. Я знаю, что xterm поддерживает эту функцию, но не знаю, поддерживают ли другие популярные эмуляторы терминала. Вот доказательство концепции bash для отображения вывода date
, pwd
и ls
в нижней трети терминала.
reset () {
tput reset
scrollable_lines=$((LINES*2/3))
tput csr 0 $((scrollable_lines-1))
}
update_status () {
tput sc
tput cup $((scrollable_lines+2)) 0
tput ed
date
pwd
ls -x --color=always | head -n $((LINES-scrollable_lines-3))
tput rc
}
PROMPT_COMMAND='update_status'
reset
Несколько слов пояснения:
tput
отправляет на терминал управляющие последовательности , полученные через terminfo . tput csr
определяет область прокрутки до верхних 2/3 строк.
должна выполняться при сбросе терминала, потому что сброс терминала сбрасывает область прокрутки, чтобы она была всем терминалом. tput sc
сохраняет позицию курсора для восстановления позже с помощью tput rc
. tput cup
перемещает курсор в верхнюю часть области без прокрутки. tput ed
стирает то, что уже есть. update_status
выполняется каждый раз, когда bash собирается отобразить новое приглашение. Я пробовал это в zsh, но он взаимодействует с терминалом больше, чем bash, поэтому даже проверка концепции требует дополнительной настройки.
Оба Экран и Tmux могут разделить терминал на несколько подокон (Экран называет их регионами, tmux называет их панелями). Вы можете запустить мультиплексор, запустить свою оболочку в верхнем окне и заставить ее запускать другие вещи в нижнем окне.
Легко вызвать что-то в оболочке, чтобы что-то отображалось в нижнем окне: просто перенаправьте вывод на правое оконечное устройство. Громоздкая часть здесь - получить имя устройства и держать нижнее окно открытым столько, сколько необходимо, но не дольше.
Вот доказательство концепции с использованием zsh и screen. Выполнить screen -c ~ / etc / split.screenrc
где ~ / etc / split.screenrc
содержит
escape ^\\\
hardstatus off
split
focus
resize 10
screen ~/bin/bottom_tty
focus
screen zsh
Это создает 10-строчную нижнюю область, в которой запускается программа ~ / bin / bottom_tty
и запускает zsh в верхней области.В ~ / bin / bottom_tty
получите несколько параметров, затем спите навсегда:
#!/bin/sh
cat <<EOF >~/.split-screen.$PPID.tmp
bottom_tty=$(tty)
bottom_lines=$(tput lines)
bottom_pid=$$
EOF
mv ~/.split-screen.$PPID.tmp ~/.split-screen.$PPID
while true; do sleep 999999999; done
В .zshrc
прочтите информацию и настройте пару вещей:
refresh_bottom_tty
, чтобы обновить содержимое нижней области. refresh_bottom_tty () {
printf %s $terminfo[clear]
date
pwd
ls -x --color | head -n $((bottom_lines-2))
}
precmd () {
refresh_bottom_tty <>$bottom_tty 1>&0 2>&0
}
zshexit () {
kill -HUP -$bottom_pid
}
while [[ ! -e ~/.split-screen.$PPID ]]; do
sleep 1
done
. ~/.split-screen.$PPID
rm ~/.split-screen.$PPID
Можно было бы выполнять гораздо лучшую и надежную работу с помощью специальной оболочки, которая понимает, что вы хотите с ней делать. Оболочка будет определять виртуальный терминал, в котором выполняется оболочка, и будет интерфейс, позволяющий оболочке обновлять то, что отображается за пределами виртуального терминала.
Экран и tmux на самом деле довольно близки к обеспечению необходимой функциональности через строку состояния. Однако оба ограничены одной строкой состояния. Если бы они были расширены для поддержки многострочных строк состояния, вы могли бы отображать там все, что хотите.
В качестве альтернативы вы можете использовать модуль zpty для написания специальной оболочки. Тогда будет два экземпляра zsh: один для оболочки, другой для выполнения команд. Получение даже доказательства концепции - это больше кода, чем я хотел бы написать в этом ответе.
То, что вы просите, кажется, не имеет смысла.
Здесь я хочу получить root, потому что удаленный пользователь теперь root
Нет, удаленный пользователь теперь root. Тот факт, что вы сделали sudo-s
в локальной системе, не меняет того, что вы находитесь в soyuka
аккаунт удаленно.
Ответ на «Here I want to get/home/soyuka/downloads» аналогичен.
Возможно ли как-то выполнить команду для текущего ssh-сеанса с помощью сокета?
Я считаю, что у вас может быть неправильное представление о том, что существует какой-либо постоянный долгоживущий SSH-сеанс. Фактически, каждый раз, когда вы делаете:
ssh -l remoteuser host some-command
... открывается новый SSH-сеанс, в этом сеансе выполняется some-command
(без pty, в отличие от SSH-сеансов, открытых без указанной удаленной команды), и затем этот сеанс закрывается.
Даже если бы был такой постоянный удаленный сеанс, нет причин ожидать, что выполнение действий локально, таких как sudo
или cd
, повлияет на этот удаленный сеанс в любом пути.
Тот факт, что вы используете разъемы управления SSH, это совсем не меняет. Единственное, что отличается в сеансе SSH раба по сравнению с обычным, это то, что сеанс SSH подключен к существующему соединению SSH вместо совершенно нового соединения.
-121--209812-Необходимо записать в BIOS, Предположим, вы хотите изменить последовательности даты на следующую последовательность:
root@debian:/home/mohsen# date -s "Sat May 23 18:56:59 IRDT 2015"
root@debian:/home/mohsen# hwclock -w
Первая строка, которую вы устанавливаете дата, но вы должны записать в bios, во второй строке с hwclock -w
вы записываете свое время в bios.
Я не знаю about showins ls
вывод, но zsh имеет nifty функцию RPROMPT
. Поместите это в .zshrc
и проверьте, соответствует ли оно вашим потребностям:
PROMPT=$'%n@%m\n%! %% '
RPROMPT='# %d'
Это помещает текущий рабочий каталог в правую часть подсказки для меня. Я включаю пример PROMPT
с новой строкой, так что если RPROMPT
не работает так, как вы хотите, вы можете увидеть, как поместить «% d» в значение PROMPT
, чтобы он мог находиться в собственной строке.