Я думаю, что Вы ищете/usr/local/share/, но трудно ответить, так как это зависит от того, какой регистрируют Ваш, планируют "совместно использовать" между пользователями.
Но если мы говорим об офисных файлах, или что-то как этот, возможно, необходимо использовать, используют некоторую систему пересмотра как подверсия или мерзавец. И затем у пользователей будет контроль/клон в их homedir.
Обновление: способ сделать это немного лучше мог быть, что каждый пользователь получает свой собственный subdir в совместно используемой папке. Ему разрешают записать в его собственной папке, но не других подпапках. И всем пользователям разрешают читать из всех каталогов. Тем путем Вы не должны думать о коллизиях файла, если два пользователя используют то же имя файла, или удаляет файлы колледжей по ошибке.
Btw идея позади/usr/описан в Стандарте Иерархии Файловой системы (http://www.pathname.com/fhs/2.2/fhs-4.1.html)
- "/usr является совместно используемыми, данными только для чтения".
Таким образом, я, вероятно, использовал бы dir или в/home/или в/var/вместо этого...
$ ps aux | tee >(head -n1) | grep syslog
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
syslog 806 0.0 0.0 34600 824 ? Sl Sep07 0:00 rsyslogd -c4
grep
и head
команды запускаются приблизительно в то же время, и оба получают те же входные данные на их собственном досуге, но обычно, как данные становятся доступными. Существуют некоторые вещи, которые могут представить 'несинхронизируемый' вывод, который зеркально отражает строки; например:
Мультиплексированные данные от tee
на самом деле отправляется в один процесс перед другим, завися, прежде всего, от реализации tee
. Простое tee
реализация будет read
некоторая сумма входа, и затем write
это дважды: Однажды к stdout и однажды к его аргументу. Это означает, что одно из тех мест назначения получит данные сначала.
Однако каналы все буферизуются. Вероятно, что эти буферы являются 1 строкой каждый, но они могли бы быть больше, который может заставить одну из команд получения видеть все, в чем это нуждается для вывода (т.е. grep
строка плетеной корзинки) перед другой командой (head
) получил любые данные вообще.
Несмотря на вышеупомянутое, также возможно, что одна из этих команд получает данные, но не может сделать что-либо с ними вовремя, и затем другая команда получает больше данных и обрабатывает их быстро.
Например, даже если head
и grep
отправляются данные одну строку за один раз, если head
не знает, как иметь дело с ним (или отложен из-за планирования ядра), grep
может показать его результаты прежде head
даже получает шанс к. Для демонстрации попытайтесь добавить задержку: ps aux | tee >(sleep 1; head -n1) | grep syslog
Это почти наверняка произведет grep
вывод сначала.
$ ps aux | tee >(grep syslog) | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Я полагаю, что Вы часто только получаете одну строку здесь, потому что head
получает первую строку входа и затем закрывает его stdin и выходы. Когда tee
видит, что его stdout был закрыт, он затем закрывает свой собственный stdin (вывод от ps
) и выходы. Это могло быть зависящим от реализации.
Эффективно, единственные данные это ps
добирается для отправки, первая строка (определенно, потому что head
управляет этим), и возможно некоторые другие строки прежде head
& tee
закройте их stdin дескрипторы.
Несоответствие с тем, появляется ли вторая строка, представлено путем синхронизации: head
завершения stdin, но ps
все еще отправляет данные. Эти два события не хорошо синхронизируются, таким образом, строка, содержащая syslog
все еще имеет шанс добирания tee
аргумент ( grep
команда). Это подобно объяснениям выше.
Можно избежать этой проблемы в целом при помощи команд, которые ожидают всего входа прежде, чем закрыть stdin/exiting. Например, использовать awk
вместо head
, который считает и обработает все его строки (даже если они не вызовут вывода):
ps aux | tee >(grep syslog) | awk 'NR == 1'
Но обратите внимание, что строки могут все еще казаться неисправными, как выше, который может быть продемонстрирован:
ps aux | tee >(grep syslog) | (sleep 1; awk 'NR == 1')
Надежда это не было слишком большим количеством детали, но существует много одновременных вещей, взаимодействующих друг с другом. Отдельные процессы работают одновременно без любой синхронизации, таким образом, их действия с каким-то конкретным выполнением могут варьироваться; иногда это помогает вырыть глубоко в базовые процессы для объяснения почему.
grep syslog
не всегда показывается, поскольку это зависит от синхронизации. При использовании конвейера оболочки Вы выполняете команды почти одновременно. Но ключевой вещью здесь является слово "почти". Если ps
концы сканируя все процессы прежде grep запускаются, это привычка быть в списке. Можно получить случайные результаты в зависимости от загрузки системы и т.д.
Подобная вещь происходит с Вашей мишенью. Это выполняется на знаниях в подоболочке, и это может быть запущено прежде или после grep. Поэтому выходной порядок непоследователен.
Что касается вопроса о мишени, это - поведение, является довольно странным. Это вызвано тем, что это не используется в, он - нормальный путь. Это выполняется без любых аргументов, что означает, что это должно просто скопировать данные из, он - stdin к stdout. Но это - stdout, перенаправляется для подокружения верхнего колонтитула (в первом случае) или grep (2-й случай). Но это также передается по каналу к следующей команде. Я думаю, что то, что происходит в этом случае, является на самом деле зависящим от реализации. Например, на моем ударе 4.2.28, ничто никогда не пишется для подокружения stdin. На zsh это работает надежное способ, которым Вы хотели бы (печатающий и первую строку PS и искавшие строки), каждый раз, когда я пробую,
Немного hackish, но вот мое решение, в форме a psgrep()
функция оболочки я использую:
Перенаправьте ps
строка заголовка к STDERR
, затем grep
на STDOUT
, но сначала удалите grep
сама команда, для обхода "шумовой" строки, происходящей от grep
самостоятельно:
psgrep() { ps aux | tee >(head -1>&2) | grep -v " grep $@" | grep "$@" -i --color=auto; }
ps aux | tee >(grep syslog) | head -n1
который остановился быhead
закрытие stdout. Ничего себе, эта команда начала давать вывод теперь, но как это произошло бы в соответствии с Вашим ответом, это, кажется, является усеченнымUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
syslog 806
– Rqomey 12.09.2012, 16:55head
. Я обновил ответ с этим примером:ps aux | tee >(grep syslog) | awk 'NR == 1'
– mrb 12.09.2012, 17:01>(cmd)
, оболочка создает именованный канал и передачи что как аргумент команде (tee
). Затемtee
пишет в stdout (переданный по каналу кawk
) и также к тому аргументу. Это совпадает сmkfifo a_fifo ; grep ... a_fifo
в одной оболочке иps | tee a_fifo | awk ...
в другом. – mrb 12.09.2012, 19:35echo >(exit 0)
, который повторит действительный аргумент, переданный оболочкой (в моем случае, это становится/dev/fd/63
). Это должно работать то же над ударом и zsh. спасибо – mrb 13.09.2012, 17:11