Файлы могут быть созданы с набором полномочий на командной строке?

Ваша команда оценивает $(ssh-agent -s) на локальной машине, так как это между двойными кавычками. Необходимо поместить целую команду для работы шлюза между одинарными кавычками. Так как та команда сама содержит одинарные кавычки (для защиты кода, это, как предполагается, выполняется на цели), необходимо выйти из тех одинарных кавычек как '\''.

ssh user@Gateway 'ssh Target '\''eval $(ssh-agent -s); ssh-add my_key; mpirun --hostfile .hosts program'\'

Можно автоматизировать шаг шлюза путем конфигурирования локального ssh клиента. Вставьте это Ваш ~/.ssh/config:

Host Target
User user
ProxyCommand ssh Gateway nc %h %p

nc netcat. Затем выполненный

ssh Target 'eval $(ssh-agent -s);ssh-add my_key;mpirun --hostfile .hosts program'

непосредственно от локальной машины.

37
07.09.2012, 18:59
4 ответа

Вы могли использовать install команда (часть GNU coreutils) с фиктивным файлом, например.

install -b -m 755 /dev/null newfile

-b опция создает резервную копию newfile если это уже существует. Можно использовать эту команду для установки владельца также.

47
27.01.2020, 19:36
  • 1
    +1 для представления меня к install –  quornian 07.09.2012, 18:37
  • 2
    Это - полезная небольшая команда. Поскольку его имя предполагает, что действительно разработано для установки программного обеспечения, скомпилированного от исходного кода, для сохранения необходимости использовать chmod, показанный, и т.д все время. –  teppic 07.09.2012, 21:29
  • 3
    Если только это взяло stdin! Хорошо,/proc/self/fd/0 сделает для моей цели. –  proski 28.10.2016, 21:52

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

(umask 077; touch file)  # creates a 600 (rw-------) file
(umask 002; touch file)  # creates a 664 (rw-rw-r--) file

“Безопасное” атомарное создание файла (в частности, с O_NOFOLLOW) не возможно с традиционными инструментами оболочки. Можно использовать sysopen в жемчуге. Если у Вас есть BSD-вдохновленное mktemp утилита, это создает файл атомарно с O_NOFOLLOW; Вы имеете звонить chmod впоследствии, если режим по умолчанию 600 не является правильным.

22
27.01.2020, 19:36
  • 1
    я был в процессе выписывания более подробного объяснения, но статьи Википедии касаются всего очень хорошо. –  jordanm 05.09.2012, 04:16
  • 2
    Если только touch имел опцию создания исполняемых файлов, это действительно, что я после. Затем umask мог использоваться для адаптации деталей. Печально нет никакого пути с umask и touch создать исполняемые файлы. –  quornian 07.09.2012, 18:42
  • 3
    @quornian Вы не можете создать непустой файл атомарно так или иначе. Какой смысл того, чтобы создать пустой исполняемый файл атомарно? Использовать touch сопровождаемый chmod +x. –  Gilles 'SO- stop being evil' 07.09.2012, 18:44
  • 4
    Можно создать непустой, исполнимые файлы атомарно с... ln или mv. Можно всегда создавать файл с правильным содержанием и полномочиями в каталоге, созданном с umask 077, и перемещать его или ln он впоследствии. –  Stéphane Chazelas 10.09.2012, 01:45

У меня есть скрипт Bash в моем домашнем каталоге /home/anthony/touchmod.sh , содержащий:

#!/bin/bash

touch "$2"
chmod "$1" "$2"

, так что если мне нужно создать ReadMe.txt С 644 разрешениями я могу напечатать:

~/touchmod.sh 644 readme.txt
-1
27.01.2020, 19:36

Основываясь на ответе @teppic, если вы хотите создать файл с содержимым и режимом одновременно (bash):

install -m 755 <(echo commands go here) newscript

<()помещает вывод во временный файл, см. Процесс -Подстановка

1
17.03.2020, 11:28

Теги

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