Как я могу перенаправить то же сообщение и к stdoud и к stderr (без временного объекта)

Возможно, небольшой конечный автомат:

tac file |
awk '/End of script/ {p=1} p {print} p && /Start of script/ {exit}' |
tac

-121--129055-

Не может dd частей файловой системы

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

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

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

Это что-то подобное может работать - возможно, с другим инструментом, чем dd , этот инструмент должен понимать, как данные структурированы в разделе, то есть он должен понимать файловую систему.

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

Измените размер файловой системы, используйте dd then

Одним из способов сделать что-то похожее на то, что требуется, является изменение размера раздела.

На первом этапе измените размер 300GB раздела, который заполнен только на треть, на раздел чуть выше 100GB который почти заполнен.

gparted , GNOME-ориентированный интерфейс интерфейса пользователя для библиотеки libparted , является часто рекомендуемым диспетчером разбиения, но интерфейс разделенного интерфейса командной строки также существует (и фактически является эталонной реализацией для libparted). cfdisk , fdisk и т.п. также являются вариантами CLI, и хотя я бы сказал, что они менее дружелюбны, чем gparted большинство distros Linux должны иметь их как часть основного пакета утилит.

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

Инструмент архивирования файловой системы

В зависимости от того, что вы хотите сделать, это также может быть полезно:

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

Я бы не рекомендовал инструмент вообще для создания изображений из-за пользовательского формата, но как промежуточное состояние он может иметь смысл. Необходимо создать образ существующего раздела, на котором не потребуется места для пустой части файловой системы. Затем его можно использовать для распаковки в другой раздел и в другую файловую систему. Файловая система генерируется fsarchiver как часть распаковки.

-121--129046-

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

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

Некоторые примеры

Скажем, я хочу знать, что делает программа df . whatis дает мне ответ.

$ whatis df
df (1)               - report file system disk space usage

И теперь я хочу распаковать архив. apropos дает мне несколько вариантов для рассмотрения.

$ apropos unzip
bunzip2 (1)          - a block-sorting file compressor, v1.0.6
funzip (1)           - filter for extracting from a ZIP archive in a pipe
gunzip (1)           - compress or expand files
lz (1)               - gunzips and shows a listing of a gzip'd tar'd archive
preunzip (1)         - prefix delta compressor for Aspell
unzip (1)            - list, test and extract compressed files in a ZIP archive
unzipsfx (1)         - self-extracting stub for prepending to ZIP archives
uz (1)               - gunzips and extracts a gzip'd tar'd archive

UPDATE :

Поскольку и whatis , и apropos база данных поискового менеджера, можно получить только информацию о том, что уже установлено в системе.

0
23.05.2017, 14:33
2 ответа

Если ваша система не имеет / dev / STDERR , вы можете использовать Perl , то, как:

{
  your-code
  ..
} | perl -pe 'print STDERR'

Perl обрабатывает входную одну строку одновременно, Таким образом, вы не увидите частичные линии там. Например, с использованием кода:

printf 'Foo'; sleep 2; printf 'Bar\n'

вы увидите только FOOBAR через 2 секунды.

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

2
28.01.2020, 02:20

Я не знаю, есть ли ksh , есть возможность сделать это. ZSH может сделать это (с функцией MultiS ).

Но есть способ с TEE :

echo foo | tee /dev/stderr
echo foo | tee /proc/self/fd/2
2
28.01.2020, 02:20

Теги

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