Как Скопировать специальный файл (steam.pipe) в Ubuntu?

Я использовал Ubuntu сроком на время и столкнулся с этой проблемой:

Я использую человечность 14.10 прямо сейчас и установил Пар в моем /home/user/.steam папка. Когда я копировал .steam папка в моем корневом каталоге и индикаторе выполнения была около конца, это говорит, что сообщение, указывающее ", Невозможно резервирование специальный файл steam.pipe", более или менее походит на это.

Я столкнулся с этой проблемой начиная с использования Ubuntu 14.04, но я знаю, что это не дистрибутив / проблема выпуска, а скорее проблема копирования файла. К счастью, я могу управлять этой проблемой при помощи команды в моем .steam папка:

sudo cp -f ./steam.pipe /[destination]

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

Idad@IdadComp:/home/Idad/.steam$sudo cp -f ./steam.pipe /[destination]

и не отступал к

Idad@IdadComp:/home/Idad/.steam$

указание, что копия обрабатывает не сделанный.

Мой вопрос, как я мог скопировать этот steam.pipe файл?

Я попробовал:

  1. Рабочий наутилус в режиме суперпользователя, но все еще отказавший.
  2. Попытайтесь сжать и распаковать этот файл в папке назначения, но ошибку при распаковке steam.pipe файл.
  3. И также прочитайте эту ссылку, Как скопировать или (быстро-и-легко) скопировать "специальный файл"?, но полученный никакой результат.

Заранее спасибо за Вашу справку.:)

4
задан 13 April 2017 в 15:25

2 ответа

Вы не должны копировать его. steam.pid и steam.pipe файлы создаются Паром как требуется. Эти два файла должны быть исключены из резервных копий.

2
ответ дан 14 April 2017 в 01:25

Как muru говорит, Вам не придется создать резервную копию steam.pipe. Пар должен смочь воссоздать его, если это отсутствует. Однако при резервном копировании Вашего ~/.steam папка, необходимо проверить, есть ли у Вас также a ~/.local/share/Steam папка. Если так, Вы, вероятно, захотите создать резервную копию его также. Это обычно содержит большинство файлов, связанных с Паровой установкой, включая Ваши установленные Паровые игры.

Я записал остальную часть этого ответа в случае, если:

  • Вы хотите знать, почему Вы испытали затруднения при копировании его с Наутилусом и cp.
  • Вы хотите знать, как скопировать файлы как steam.pipe, в случае, если действительно когда-либо необходимо делать так.

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


Почему steam.pipe Является особенным

steam.pipe FIFO, иначе именованный канал:

ek@Io:~/.steam$ ls -l steam.pipe
prw------- 1 ek ek 0 Mar  7 20:12 steam.pipe
ek@Io:~/.steam$ file steam.pipe
steam.pipe: fifo (named pipe)

FIFOs не являются постоянным клиентом файлы, но вместо этого являются специальными записями файловой системы, что можно взаимодействовать с тем, как будто они - файлы. Запись в FIFO хранит данные в памяти, где это остается, пока FIFO не читается из. Чтение из FIFO получает данные в порядке, который они были записаны (таким образом, это - Метод "первым пришел - первым вышел").

Почему Вы испытали затруднения при копировании его

Существует на самом деле два отличных поведения, которые можно было бы хотеть при попытке скопировать FIFO. Какой, который Вы хотите, зависит от ситуации.

  • Вы могли бы хотеть копировать FIFO, т.е. сделать другой FIFO (В этом контексте, это - то, что Вы хотите.)
  • Вы могли бы хотеть считать данные с FIFO, т.е. скопировать его содержание. (Это не могло бы походить на "копирование", но помнить, это походит на то, что происходит, когда Вы копируете файл - файл открыт, его данные считаны, и те же данные записаны в новый файл.)

Вы попробовали две программы:

  • Наутилус автоматически обнаруживает специальные записи, такие как FIFOs, отказывается копировать от них и предупреждает Вас, что сделал так.
  • cp считывает данные с FIFO, вместо того, чтобы делать копию самого FIFO. Если нет никаких данных в FIFO, cp остановы до некоторого процесса пишут в него.

Создание копий специальных файлов (как FIFOs)

Для дублирования FIFO можно использовать rsync с --specials флаг:

ek@Io:~$ cd steam-backup
ek@Io:~/steam-backup$ rsync --specials ~/.steam/steam.pipe .
ek@Io:~/steam-backup$ ls -l steam.pipe
prw------- 1 ek ek 0 Apr 22 11:43 steam.pipe

Это - то, если Вы хотите скопировать его отдельно. Для копирования целой папки в архивных целях - то есть, где Вы хотите большинство вещей быть путем, они были прежде, таким образом, он работает правильно при восстановлении - можно использовать rsync -a:

rsync -a .steam/ steam-backup

Для получения дополнительной информации о rsync, см., что "rsync" в Ubuntu помогает Wiki, восходящий поток rsync веб-сайт, и man rsync (который объясняет конкретно что -a флаг делает).

cp хорошо подходит для простых вариантов использования, но я предлагаю rsync для того, чтобы сделать резервные копии.

Экстренное сообщение может быть заархивировано, также

Другой способ создать резервную копию папки состоит в том, чтобы сделать архив из него с tar, и это также автоматически сохранит FIFOs (т.е. они будут воссозданы на извлечении):

ek@Io:~$ tar cvJf steam-backup.tar .steam
.steam/
.steam/registry.vdf
.steam/sdk32
.steam/bin64
.steam/root
.steam/steam_install_agreement.txt
.steam/steam
.steam/steam.pipe
.steam/steam.pid
.steam/bin
.steam/sdk64
.steam/bin32

Переделка FIFO вручную

При пропавших без вести FIFO (или в резервном копировании, или в целом) и потребность восстановить его можно просто создать новый с mkfifo.

Вы захотите создать его с корректными полномочиями. Выполнение ls -l на steam.pipe показывает маску полномочий prw-------. p просто средства это - именованный канал (FIFO). Остальное подразумевает, что это читаемо и перезаписываемо его владельцем и не имеет никаких других полномочий (см. FilePermissions для деталей). Восьмеричная маска полномочий таким образом 600 (или 0600), таким образом, Вы захотите передать -m 600 кому: mkfifo:

ek@Io:~/steam-backup$ mkfifo -m 600 steam.pipe
ek@Io:~/steam-backup$ ls -l steam.pipe
prw------- 1 ek ek 0 Apr 22 12:09 steam.pipe

Дублирование FIFO не копирует свое "содержание"

Это не проблема для резервных копий, но необходимо знать что, копируя FIFO (например, с rsync) просто делает новый FIFO как он. Если будут данные в FIFO, готовом быть считанным, то данные не будут доступны в новом FIFO.

Причина это не проблема для резервных копий, состоит в том, что FIFOs не для длительного хранения. Они не действительно даже для устройства хранения данных вообще. Данные в FIFO не записаны в диск, и когда процесс пишет в FIFO, о записи даже не сообщают процессу как успешной, пока данные не были считаны. (Точно так же, если процесс будет читать из FIFO без данных в нем, то чтение остановится, пока данные не записаны.)

Вы видите это в действии и также получаете лучший смысл того, как FIFOs работают путем создания одного собственного и экспериментирования с ним. Можно создать новый FIFO foo с полномочиями по умолчанию с mkfifo foo, и текст перенаправления к нему с командой как echo 'Hello, world!' > foo. Это остановится, поскольку ничто еще не прочитало текст. Затем в другом терминале (например, другая вкладка Terminal) читает текст с cat foo и посмотрите то, что происходит в каждом терминале.

6
ответ дан 14 April 2017 в 01:25

Другие вопросы по тегам:

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