Ситуация и проще, и сложнее, чем предполагает ваш вопрос. Перефразируя то, что Кусалананда говорит в своем ответе, есть два стандартных (обычных) потока ввода/вывода (файловые дескрипторы) которые традиционно настроены и используются для вывода: stdout (файловый дескриптор1) и stderr (файловый дескриптор2). Наш канонический вопрос, Что такое операторы управления и перенаправления оболочки?, обсуждает, как перенаправить их. Наивно, мы можем перечислить пять различных комбинаций:
╔══════════════════════════════╦═════════════════════════════════════════════╗
║ ║ stderr ║
║ ╟─────────────────────┬───────────────────────╢
║ ║ default │ ║
║ ║ (same as the shell) │ redirected ║
╠════════╤═════════════════════╬═════════════════════╦═══════════════════════╣
║ │ default ║ ║ ║
║ │ (same as the shell) ║ 1 ║ 2 ║
║ ├─────────────────────╠═════════════════════╬═══════════════════════╣
║ stdout │ ║ ║ 4. redirected ║
║ │ ║ ║ to the same file ║
║ │ redirected ║ 3 ╟───────────────────────╢
║ │ ║ ║ 5. redirected ║
║ │ ║ ║ to different files ║
╚════════╧═════════════════════╩═════════════════════╩═══════════════════════╝
, но если вы считаете /dev/null
отличными от файла,
и добавить режим как частный случай,
и режим чтения-записи отличается от режима только записи,
и трубы как отличные от файлов,
тогда количество комбинаций увеличивается в геометрической прогрессии.
Однако, как неоднократно заявлялось,
«конечный результат stdout» не является стандартной фразой Unix/Linux/bash.
Другие ответы (возможно, мудро) ограничились
на stdout и stderr (файловые дескрипторы 1 и 2).
Я (опрометчиво?) считаю, что полный ответ на этот вопрос
следует учитывать тот факт, что доступны другие файловые дескрипторы —
до сотен, тысяч или даже более миллиона.
Например, если вы запустите команду вида difffile1file2
,
программа diff
откроет файл1
и файл2
,
и ядро, вероятно, назначит файловые дескрипторы 3 и 4.
Разница в том, что предопределены только файловые дескрипторы 0, 1 и 2.
Перенаправление файловых дескрипторов выше 2
обсуждается в следующих местах:
Например, см. этот пример высокого дескриптора файла:
$ cat canine.c #include#include main() { int i, len; char msg[] = "Hello, dog.\n"; len = strlen(msg); i = write(17, msg, len); if (i == len) printf("Success! i = %d = len\n", i); else if (i == -1) { printf("Error! i = %d (len = %d)\n", i, len); perror(""); } else printf("Unexpected result: i = %d, len = %d\n", i, len); } $ make canine cc canine.c -o canine $ ./canine Error! i = -1 (len = 12) Bad file descriptor $ ./canine 17> animal Success! i = 12 = len $ ls -l total 70 -rw-r--r-- 1 myusername mygroupname 12 Apr 12 13:36 animal -rwxr-xr-x 1 myusername mygroupname 67067 Apr 12 13:36 canine -rw-r--r-- 1 myusername mygroupname 358 Apr 12 13:36 canine.c $ cat animal Hello, dog.
Предупреждение: я не уверен, что приведенное выше будет работать для всех версий всех оболочек.
Стандартные программы не пишут в файловые дескрипторы выше 2. (если только они не получили этот файловый дескриптор от ядра открыв файл, установив сетевое подключение или что-то в этом роде). Но если у вас есть (нестандартная) программа, которая делает это, вы можете перенаправить эти файловые дескрипторы.
И если у вас всего 100 файловых дескрипторов, и вы считаете только, перенаправляется ли каждый из них или нет, у вас более нониллиона (1 000 000 000 000 000 000 000 000 000 000) возможные комбинации.
dd - это самый надежный способ ИМО, поскольку он делает копию вашего жесткого диска на SSD. Хотя вы должны иметь в виду, что SSD должен быть такого же или большего размера, поскольку команда dd будет дублировать каждый блок на вашем жестком диске на SSD. Так что это должно соответствовать.
Лучше переустановить ОС на SSD и передать свои данные с помощью rsync или около того.
Если вы хотите сделать побитовую копию, вам следует использовать другую машину.
Извлеките жесткий диск из исходного устройства и подключите жесткий диск и твердотельный накопитель к другому компьютеру Linux с помощью кабеля SATA. Затем загрузите этот компьютер и убедитесь, что он распознает оба диска. Скопируйте содержимое жесткого диска (предположим, это / dev / sdb
) на SSD ( / dev / sdc
):
cat /dev/sdb > /dev/sdc
Да, вы можете безопасно использовать cat
вместо dd
. Не только cat
отлично может обрабатывать двоичные потоки (по крайней мере, во всех современных дистрибутивах Linux), но он также выбирает оптимизированный размер блока для копии, поэтому копирование будет быстрее. По надежности он такой же, как dd
.
После завершения копирования вы можете установить SSD на исходный компьютер, и он сразу же заработает.
Обратите внимание, что, поскольку вы сказали, что размер SSD больше, в конце диска будет пустое пространство - тогда вам следует использовать инструмент для создания разделов на нем, чтобы не тратить лишнее место на диске. Однако, если вы этого не сделаете, ничего страшного не произойдет.
Я полагаю, что SSD не того же размера?
Лично я бы подключил SSD как дополнительный диск, сделал схему разделов и использовал rsync
для копирования данных. Чтобы упростить процесс, я бы использовал live CD с моим дистрибутивом, чтобы «заморозить» любой источник изменений на диске. При необходимости необходимо установить загрузчик на новый диск.