Cat ошибка ввода вывода

I have a file of 3 bytes. I cannot use cat to see its content.

It happens on Ubuntu-18.04, and also on Windows’ WSL — ubuntu (on different machines)
When using vi myfile I see only the letter q.
When using cat -A myfile I get M-AM-1$
When using hexdump myfile I get :

0000000 b1c1 000a
0000003

When using ls -la myfile I get -rw------- 1 iftah iftah 3 Mar 26 11:56 myfile

And my problem is with: cat myfile which returns:

cat: write error: Input/output error

Why? What is so special about this one?


0

1

root@debian:/dev# dmesg |grep ttyS
[ 0.575165] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.575464] 00:0e: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

root@debian:~# ls -l /dev/ttyS*
crw-rw—- 1 root dialout 4, 64 Сен 17 13:32 /dev/ttyS0

root@debian:/dev# cat /dev/ttyS0
cat: /dev/ttyS0: Ошибка ввода/вывода

В чем проблема

  • Ссылка

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.

Введение

Стандартные потоки ввода и вывода в Linux являются одним из наиболее распространенных средств для обмена информацией процессов, а перенаправление >>> и | является одной из самых популярных конструкций командного интерпретатора.

В данной статье мы ознакомимся с возможностями перенаправления потоков ввода/вывода, используемых при работе файлами и командами.

Требования

  • Linux-система, например, Ubuntu 20.04

Потоки

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

Стандартный вывод и стандартная ошибка отображаются на дисплее терминала пользователя в виде текста.

Ввод и вывод распределяется между тремя стандартными потоками:

  • stdin — стандартный ввод (клавиатура),
  • stdout — стандартный вывод (экран),
  • stderr — стандартная ошибка (вывод ошибок на экран).

Потоки также пронумерованы:

  • stdin — 0,
  • stdout — 1,
  • stderr — 2.

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

  • < file — использовать файл как источник данных для стандартного потока ввода.
  • > file — направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — перезаписан сверху.
  • 2> file — направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — перезаписан сверху.
  • >>file — направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец.
  • 2>>file — направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец.
  • &>file или >&file — направить стандартный поток вывода и стандартный поток ошибок в файл. Другая форма записи: >file 2>&1.

Стандартный ввод

Стандартный входной поток обычно переносит данные от пользователя к программе. Программы, которые предполагают стандартный ввод, обычно получают входные данные от устройства типа клавиатура. Стандартный ввод прекращается по достижении EOF (конец файла), который указывает на то, что данных для чтения больше нет.

EOF вводится нажатием сочетания клавиш Ctrl+D.

Рассмотрим работу со стандартным выводом на примере команды cat (от CONCATENATE, в переводе «связать» или «объединить что-то»).

Cat обычно используется для объединения содержимого двух файлов.

Cat отправляет полученные входные данные на дисплей терминала в качестве стандартного вывода и останавливается после того как получает EOF.

Пример

cat

В открывшейся строке введите, например, 1 и нажмите клавишу Enter. На дисплей выводится 1. Введите a и нажмите клавишу Enter. На дисплей выводится a.

Дисплей терминала выглядит следующим образом:

test@111:~/stream$ cat
1
1
a
a

Для завершения ввода данных следует нажать сочетание клавиш Ctrl + D.

Стандартный вывод

Стандартный вывод записывает данные, сгенерированные программой. Когда стандартный выходной поток не перенаправляется в какой-либо файл, он выводит текст на дисплей терминала.

При использовании без каких-либо дополнительных опций, команда echo выводит на экран любой аргумент, который передается ему в командной строке:

echo Пример

Аргументом является то, что получено программой, в результате на дисплей терминала будет выведено:

Пример

При выполнении echo без каких-либо аргументов, возвращается пустая строка.

Пример

Команда объединяет три файла: file1, file2 и file3 в один файл bigfile:

cat file1 file1 file1 > bigfile

Команда cat по очереди выводит содержимое файлов, перечисленных в качестве параметров на стандартный поток вывода. Стандартный поток вывода перенаправлен в файл bigfile.

Стандартная ошибка

Стандартная ошибка записывает ошибки, возникающие в ходе исполнения программы. Как и в случае стандартного вывода, по умолчанию этот поток выводится на терминал дисплея.

Пример

Рассмотрим пример стандартной ошибки с помощью команды ls, которая выводит список содержимого каталогов.

При запуске без аргументов ls выводит содержимое в пределах текущего каталога.

Введем команду ls с каталогом % в качестве аргумента:

ls %

В результате должно выводиться содержимое соответствующей папки. Но так как каталога % не существует, на дисплей терминала будет выведен следующий текст стандартной ошибки:

ls: cannot access %: No such file or directory

Перенаправление потока

Linux включает в себя команды перенаправления для каждого потока.

Команды со знаками > или < означают перезапись существующего содержимого файла:

  • > — стандартный вывод,
  • < — стандартный ввод,
  • 2> — стандартная ошибка.

Команды со знаками >> или << не перезаписывают существующее содержимое файла, а присоединяют данные к нему:

  • >> — стандартный вывод,
  • << — стандартный ввод,
  • 2>> — стандартная ошибка.

Пример

В приведенном примере команда cat используется для записи в файл file1, который создается в результате цикла:

cat > file1
a
b
c

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

Если файла file1 не существует, то в текущем каталоге создается новый файл с таким именем.

Для просмотра содержимого файла file1 введите команду:

cat file1

В результате на дисплей терминала должно быть выведено следующее:

a
b
c

Для перезаписи содержимого файла введите следующее:

cat > file1
1
2
3

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

В результате на дисплей терминала должно быть выведено следующее:

1
2
3

Предыдущего текста в текущем файле больше не существует, так как содержимое файла было переписано командой >.

Для добавления нового текста к уже существующему в файле с помощью двойных скобок >> выполните команду:

cat >> file1
a
b
c

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

Откройте file1 снова и в результате на дисплее монитора должно быть отражено следующее:

1
2
3
a
b
c

Каналы

Каналы используются для перенаправления потока из одной программы в другую. Стандартный вывод данных после выполнения одной команды перенаправляется в другую через канал. Данные первой программы, которые получает вторая программа, не будут отображаться. На дисплей терминала будут выведены только отфильтрованные данные, возвращаемые второй командой.

Пример

Введите команду:

ls | less

В результате каждый файл текущего каталога будет размещен на новой строке:

file1
file2
t1
t2

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

Пример

Для сохранения имен файлов, содержащих строку «LOG», используется следующая команда:

dir /catalog | find "LOG" > loglist

Вывод команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле loglist в виде списка (например, Config.log, Logdat.svd и Mylog.bat).

При использовании нескольких фильтров в одной команде рекомендуется разделять их с помощью знака канала |.

Фильтры

Фильтры представляют собой стандартные команды Linux, которые могут быть использованы без каналов:

  • find — возвращает файлы с именами, которые соответствуют передаваемому аргументу.
  • grep — возвращает только строки, содержащие (или не содержащие) заданное регулярное выражение.
  • tee — перенаправляет стандартный ввод как стандартный вывод и один или несколько файлов.
  • tr — находит и заменяет одну строку другой.
  • wc — подсчитывает символы, линии и слова.

Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):

  • cat — считывает данные со стандартного потока ввода и передает их на стандартный поток вывода. Без опций работает как простой повторитель. С опциями может фильтровать пустые строки, нумеровать строки и делать другую подобную работу.
  • head — показывает первые 10 строк (или другое заданное количество), считанных со стандартного потока ввода.
  • tail — показывает последние 10 строк (или другое заданное количество), считанные со стандартного потока ввода. Важный частный случай tail -f, который в режиме слежения показывает концовку файла. Это используется, в частности, для просмотра файлов журнальных сообщений.
  • cut — вырезает столбец (по символам или полям) из потока ввода и передает на поток вывода. В качестве разделителей полей могут использоваться любые символы.
  • sort — сортирует данные в соответствии с какими-либо критериями, например, арифметически по второму столбцу.
  • uniq — удаляет повторяющиеся строки. Или (с ключом -с) не просто удалить, а написать сколько таких строк было. Учитываются только подряд идущие одинаковые строки, поэтому часто данные сортируются перед тем как отправить их на вход программе.
  • bc — вычисляет каждую отдельную строку потока и записывает вместо нее результат вычисления.
  • hexdump — показывает шестнадцатеричное представление данных, поступающих на стандартный поток ввода.
  • strings — выделяет и показывает в стандартном потоке (или файле) то, что напоминает строки. Всё что не похоже на строковые последовательности, игнорируется. Команда полезна в сочетании с grep для поиска интересующих строковых последовательностей в бинарных файлах.
  • sed — обрабатывает текст в соответствии с заданным скриптом. Наиболее часто используется для замены текста в потоке: sed s/было/стало/g.
  • awk — обрабатывает текст в соответствии с заданным скриптом. Как правило, используется для обработки текстовых таблиц, например, вывод ps aux и т.д.
  • sh -s — текст, который передается на стандартный поток ввода sh -s. может интерпретироваться как последовательность команд shell. На выход передается результат их исполнения.
  • ssh — средство удаленного доступа ssh, может работать как фильтр, который подхватывает данные, переданные ему на стандартный поток ввода, затем передает их на удаленный хост и подает на вход процессу программы, имя которой было передано ему в качестве аргумента. Результат выполнения программы (то есть то, что она выдала на стандартный поток вывода) передается со стандартного вывода ssh.

Если в качестве аргумента передается файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).

Пример

Команда tee, как правило, используется для просмотра выводимого содержимого при одновременном сохранении его в файл.

wc ~/stream | tee file2

Пример

Допускается перенаправление нескольких потоков в один файл:

ls -z >> file3 2>&1

В результате сообщение о неверной опции «z» в команде ls будет записано в файл t2, поскольку stderr перенаправлен в файл.

Для просмотра содержимого файла file3 введите команду cat:

cat file3

В результате на дисплее терминала отобразиться следующее:

ls: invalid option -- 'z'
Try 'ls --help' for more information.

Заключение

Мы рассмотрели возможности работы с перенаправлениями потоков >>> и |, использование которых позволяет лучше работать с bash-скриптами.

Оффлайн
mirochek

красный кружок с белым кирпичиком

Обновлений не делали? Покажите  выводы —
sudo apt-get updatecat /etc/apt/sources.list

rom@rom-Lenovo-G570:~$ sudo apt-get update
[sudo] password for rom:
Игн http://ru.archive.ubuntu.com trusty InRelease
Получено:1 http://ru.archive.ubuntu.com trusty-updates InRelease [65,9 kB]     
В кэше http://ppa.launchpad.net trusty InRelease                               
Игн http://extras.ubuntu.com trusty InRelease                                 
Получено:2 http://ru.archive.ubuntu.com trusty-backports InRelease [65,9 kB]   
Получено:3 http://extras.ubuntu.com trusty Release.gpg [72 B]                 
В кэше http://extras.ubuntu.com trusty Release                                 
Получено:4 http://ru.archive.ubuntu.com trusty-proposed InRelease [65,9 kB]   
В кэше http://ppa.launchpad.net trusty/main i386 Packages                     
В кэше http://ru.archive.ubuntu.com trusty Release.gpg                         
Получено:5 http://ru.archive.ubuntu.com trusty-updates/main Sources [262 kB]   
В кэше http://extras.ubuntu.com trusty/main Sources                           
В кэше http://security.ubuntu.com trusty-security InRelease                   
В кэше http://ppa.launchpad.net trusty/main Translation-en                     
В кэше http://extras.ubuntu.com trusty/main i386 Packages                     
Получено:6 http://ru.archive.ubuntu.com trusty-updates/restricted Sources [5 352 B]
Получено:7 http://ru.archive.ubuntu.com trusty-updates/universe Sources [151 kB]
В кэше http://security.ubuntu.com trusty-security/main Sources                 
Игн http://www.openprinting.org lsb3.2 InRelease                               
В кэше http://security.ubuntu.com trusty-security/restricted Sources           
Получено:8 http://ru.archive.ubuntu.com trusty-updates/multiverse Sources [5 946 B]
Получено:9 http://ru.archive.ubuntu.com trusty-updates/main i386 Packages [692 kB]
В кэше http://www.openprinting.org lsb3.2 Release.gpg                         
В кэше http://security.ubuntu.com trusty-security/universe Sources             
В кэше http://www.openprinting.org lsb3.2 Release                             
В кэше http://security.ubuntu.com trusty-security/multiverse Sources           
В кэше http://security.ubuntu.com trusty-security/main i386 Packages           
В кэше http://www.openprinting.org lsb3.2/contrib i386 Packages               
Получено:10 http://ru.archive.ubuntu.com trusty-updates/restricted i386 Packages [15,6 kB]
Получено:11 http://ru.archive.ubuntu.com trusty-updates/universe i386 Packages [340 kB]
В кэше http://security.ubuntu.com trusty-security/restricted i386 Packages     
Получено:12 http://ru.archive.ubuntu.com trusty-updates/multiverse i386 Packages [13,6 kB]
В кэше http://ru.archive.ubuntu.com trusty-updates/main Translation-en         
В кэше http://ru.archive.ubuntu.com trusty-updates/multiverse Translation-en   
В кэше http://ru.archive.ubuntu.com trusty-updates/restricted Translation-en   
В кэше http://ru.archive.ubuntu.com trusty-updates/universe Translation-en     
Получено:13 http://ru.archive.ubuntu.com trusty-backports/main Sources [8 661 B]
В кэше http://security.ubuntu.com trusty-security/universe i386 Packages       
Получено:14 http://ru.archive.ubuntu.com trusty-backports/restricted Sources [28 B]
Получено:15 http://ru.archive.ubuntu.com trusty-backports/universe Sources [34,0 kB]
Получено:16 http://ru.archive.ubuntu.com trusty-backports/multiverse Sources [1 898 B]
Получено:17 http://ru.archive.ubuntu.com trusty-backports/main i386 Packages [9 814 B]
Получено:18 http://ru.archive.ubuntu.com trusty-backports/restricted i386 Packages [28 B]
В кэше http://security.ubuntu.com trusty-security/multiverse i386 Packages     
Получено:19 http://ru.archive.ubuntu.com trusty-backports/universe i386 Packages [41,0 kB]
Игн http://extras.ubuntu.com trusty/main Translation-ru_RU                     
В кэше http://security.ubuntu.com trusty-security/main Translation-en         
Получено:20 http://ru.archive.ubuntu.com trusty-backports/multiverse i386 Packages [1 552 B]
В кэше http://ru.archive.ubuntu.com trusty-backports/main Translation-en       
В кэше http://ru.archive.ubuntu.com trusty-backports/multiverse Translation-en
Игн http://extras.ubuntu.com trusty/main Translation-ru                       
В кэше http://security.ubuntu.com trusty-security/multiverse Translation-en   
В кэше http://ru.archive.ubuntu.com trusty-backports/restricted Translation-en
В кэше http://ru.archive.ubuntu.com trusty-backports/universe Translation-en   
В кэше http://ru.archive.ubuntu.com trusty Release                             
Получено:21 http://ru.archive.ubuntu.com trusty-proposed/main i386 Packages [120 kB]
Игн http://extras.ubuntu.com trusty/main Translation-en                       
В кэше http://security.ubuntu.com trusty-security/restricted Translation-en   
Получено:22 http://ru.archive.ubuntu.com trusty-proposed/restricted i386 Packages [28 B]
Получено:23 http://ru.archive.ubuntu.com trusty-proposed/universe i386 Packages [23,0 kB]
Получено:24 http://ru.archive.ubuntu.com trusty-proposed/multiverse i386 Packages [733 B]
Получено:25 http://ru.archive.ubuntu.com trusty-proposed/main Translation-en [47,9 kB]
В кэше http://security.ubuntu.com trusty-security/universe Translation-en     
Получено:26 http://ru.archive.ubuntu.com trusty-proposed/multiverse Translation-en [539 B]
Получено:27 http://ru.archive.ubuntu.com trusty-proposed/restricted Translation-en [28 B]
Получено:28 http://ru.archive.ubuntu.com trusty-proposed/universe Translation-en [20,1 kB]
В кэше http://ru.archive.ubuntu.com trusty/main Sources                       
В кэше http://ru.archive.ubuntu.com trusty/restricted Sources                 
В кэше http://ru.archive.ubuntu.com trusty/universe Sources                   
В кэше http://ru.archive.ubuntu.com trusty/multiverse Sources                 
В кэше http://ru.archive.ubuntu.com trusty/main i386 Packages                 
В кэше http://ru.archive.ubuntu.com trusty/restricted i386 Packages           
В кэше http://ru.archive.ubuntu.com trusty/universe i386 Packages             
В кэше http://ru.archive.ubuntu.com trusty/multiverse i386 Packages           
В кэше http://ru.archive.ubuntu.com trusty/main Translation-ru                 
В кэше http://ru.archive.ubuntu.com trusty/main Translation-en                 
В кэше http://ru.archive.ubuntu.com trusty/multiverse Translation-ru           
В кэше http://ru.archive.ubuntu.com trusty/multiverse Translation-en           
В кэше http://ru.archive.ubuntu.com trusty/restricted Translation-ru           
В кэше http://ru.archive.ubuntu.com trusty/restricted Translation-en           
В кэше http://ru.archive.ubuntu.com trusty/universe Translation-ru             
В кэше http://ru.archive.ubuntu.com trusty/universe Translation-en             
Игн http://ru.archive.ubuntu.com trusty/main Translation-ru_RU                 
Игн http://ru.archive.ubuntu.com trusty/multiverse Translation-ru_RU           
Игн http://ru.archive.ubuntu.com trusty/restricted Translation-ru_RU           
Игн http://ru.archive.ubuntu.com trusty/universe Translation-ru_RU
Игн http://www.openprinting.org lsb3.2/contrib Translation-ru_RU               
Игн http://www.openprinting.org lsb3.2/contrib Translation-ru                 
В кэше http://www.openprinting.org lsb3.2/contrib Translation-en               
Получено 1 994 kБ за 13с (144 kБ/c)                                           
Чтение списков пакетов… Ошибка!
E: Ошибка чтения - read (5: Ошибка ввода/вывода)
E: Списки пакетов или файл состояния не могут быть открыты или прочитаны.

rom@rom-Lenovo-G570:~$ cat /etc/apt/sources.list
# deb cdrom:[Ubuntu 14.04.3 LTS _Trusty Tahr_ - Beta i386 (20150805)]/ trusty main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://ru.archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://ru.archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty universe
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates universe
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://ru.archive.ubuntu.com/ubuntu/ trusty multiverse
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu trusty-security main restricted
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted
deb http://security.ubuntu.com/ubuntu trusty-security universe
deb-src http://security.ubuntu.com/ubuntu trusty-security universe
deb http://security.ubuntu.com/ubuntu trusty-security multiverse
deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu trusty partner
# deb-src http://archive.canonical.com/ubuntu trusty partner

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
deb http://extras.ubuntu.com/ubuntu trusty main
deb-src http://extras.ubuntu.com/ubuntu trusty main
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://www.openprinting.org/download/printdriver/debian/ lsb3.2 contrib

#bash #cat

#bash #cat

Вопрос:

У меня есть файл в 3 байта. Я не могу использовать cat для просмотра его содержимого.

Это происходит в Ubuntu-18.04, а также в Windows ‘WSL — ubuntu (на разных машинах) При использовании vi myfile я вижу только букву q . При использовании cat -A myfile я получаю, M-AM-1$ При использовании hexdump myfile я получаю :

 0000000 b1c1 000a
0000003
  

При использовании ls -la myfile я получаю -rw------- 1 iftah iftah 3 Mar 26 11:56 myfile

И моя проблема заключается в: cat myfile который возвращает:

 cat: write error: Input/output error
  

Почему? Что такого особенного в этом?

Комментарии:

1. Возможно unix.stackexchange.com/questions/327658 / … представляет интерес?

2. @BrianAgnew спасибо, вот и все. Я попытался создать тот же файл с нуля, используя echo -n -e 'xc1xb1x0a' > newFile и в WSL cat newFile выдает мне тот же сбой, что и на выделенном компьютере Ubuntu, cat newFile успешно.

3. Ошибка записи вообще не является проблемой при чтении файла, который вы передали cat в качестве входных данных. Как следует из названия, возникла проблема с записью этого содержимого в cat стандартный вывод.

  • Cat b25 ошибка зарядки
  • Cat 336 коды ошибок
  • Castlevanialosue exe системная ошибка
  • Castlevania lords of shadow ошибка 0xc0000906
  • Castle windsor ошибка 80131500 что это