Меню

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

I created infrared receiver as in LIRC manual (http://www.lirc.org/receivers.html). And tested it on windows using program called Terminal.

When I switched on RTS pin DCD pin was also switched on and when I used remote controll DCD was blinking. So everything works with hardware.

Next I tried using the same hardware on Linux Mint 17 on same computer as in http://lifehacker.com/5527752/control-your-desktop-pc-with-a-remote-using-lirc but with no luck:

piotrek-H87-HD3 piotrek # cat /dev/ttyS0 
cat: /dev/ttyS0: Input/output error

I also followed http://www.commandlinefu.com/commands/view/10218/ttys0-terminal-on-serial-connection. In this tutorial there was the same
error I had so I tried looking in BIOS setup but serial ports were enabled.

Why isin’t it working?

Some information data:

piotrek-H87-HD3 piotrek # cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
4: uart:16550A port:0000F080 irq:19 tx:34 rx:0 CTS|DSR|CD
5: uart:unknown port:00000000 irq:0
6: uart:unknown port:00000000 irq:0
7: uart:unknown port:00000000 irq:0
8: uart:unknown port:00000000 irq:0
...

//EDIT

I was wondering lately if maybe linux somehow switched pin layout of my serial port? My motherboard COM port pins layout is :

Motherboard layout

I have back panel extension cord which maps 1:1 pin layout from motherboard to back panel like this:

-------------------
 [1][3][5][7][9] /
   [2][4][6][8] /
   ___________ /

In windows pin order is same as in motherboard manual. Is it possible that pins are switched somehow? Can I check it?

Nobody seems to know the answer so maybe I ask another question. Can I write some script (python maybe?) that will enable selected pins on /dev/ttyS0 so I could measure voltage and check which pin is which?

I created infrared receiver as in LIRC manual (http://www.lirc.org/receivers.html). And tested it on windows using program called Terminal.

When I switched on RTS pin DCD pin was also switched on and when I used remote controll DCD was blinking. So everything works with hardware.

Next I tried using the same hardware on Linux Mint 17 on same computer as in http://lifehacker.com/5527752/control-your-desktop-pc-with-a-remote-using-lirc but with no luck:

piotrek-H87-HD3 piotrek # cat /dev/ttyS0 
cat: /dev/ttyS0: Input/output error

I also followed http://www.commandlinefu.com/commands/view/10218/ttys0-terminal-on-serial-connection. In this tutorial there was the same
error I had so I tried looking in BIOS setup but serial ports were enabled.

Why isin’t it working?

Some information data:

piotrek-H87-HD3 piotrek # cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
4: uart:16550A port:0000F080 irq:19 tx:34 rx:0 CTS|DSR|CD
5: uart:unknown port:00000000 irq:0
6: uart:unknown port:00000000 irq:0
7: uart:unknown port:00000000 irq:0
8: uart:unknown port:00000000 irq:0
...

//EDIT

I was wondering lately if maybe linux somehow switched pin layout of my serial port? My motherboard COM port pins layout is :

Motherboard layout

I have back panel extension cord which maps 1:1 pin layout from motherboard to back panel like this:

-------------------
 [1][3][5][7][9] /
   [2][4][6][8] /
   ___________ /

In windows pin order is same as in motherboard manual. Is it possible that pins are switched somehow? Can I check it?

Nobody seems to know the answer so maybe I ask another question. Can I write some script (python maybe?) that will enable selected pins on /dev/ttyS0 so I could measure voltage and check which pin is which?

Оффлайн
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

Есть некоторые вопросы с командой linux кошка

#cd /sys/class/leds/green
# ls -al
....
-rw-rw-r-- root    root   4096  1970-01-02 08:00 duty_pcts
....
#cat duty_pctys

ошибка возникает в это время

__/system/bin/sh: cat:duty_pcts:I/O error__

1 ответы

Компания cat Команда говорит вам: «Эй, я пытался прочитать этот файл с именем duty_pcts, но по какой-то причине чтение не удалось. Я спросил у ОС код ошибки в errno переменная, и ОС сообщила мне, что это ошибка ввода-вывода (EIO)».

Прочтите страницы руководства для errno, open(2), read(2) и close(2) [например, с помощью man 2 read] и посмотрите, может ли какой-либо из системных вызовов установить errno в EIO. Для read(2) вы найдете, например,

   EIO    I/O error. This will happen for example when the process is in
          a background process group, tries to read from its controlling
          tty, and either it is ignoring or blocking SIGTTIN or its pro-
          cess group is orphaned.  It may also occur  when  there  is  a
          low-level I/O error while reading from a disk or tape.

Создан 17 сен.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

linux
unix

or задайте свой вопрос.

Если вы знакомы с основными командами Linux, вам также следует изучить концепцию перенаправления ввода-вывода.

Вы уже знаете, как работает команда в Linux. Она принимает вход и дает вам выход. Здесь есть несколько игроков. Позвольте нам рассказать вам о них.

Stdin, stdout и stderr

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

  • Стандартный ввод ( stdin ) является источником входных данных. По умолчанию стандартный ввод – это любой текст, введенный с клавиатуры. Идентификатор потока равен 0.
  • Стандартный вывод ( stdout ) является результатом команды. По умолчанию он отображается на экране. Идентификатор потока равен 1.
  • Стандартная ошибка ( stderr ) – это сообщение об ошибке (если есть), генерируемое командами. По умолчанию stderr также отображается на экране. Идентификатор потока равен 2.

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

Думайте об этом как о струе воды. Вам нужен источник для воды, например, кран. Вы подключаете к нему трубу и можете хранить ее в ведре (файле) или поливать растения (распечатывать). Вы также можете подключить его к другому крану, если это необходимо. По сути, вы перенаправляете воду.

В Linux также существует такая концепция перенаправления, при которой вы можете перенаправить stdin, stdout и stderr из обычного места назначения в другой файл или команду (или даже на периферийные устройства, такие как принтеры).

Позвольте нам показать, как работает перенаправление и как вы можете его использовать.

Перенаправление вывода

Первой и самой простой формой перенаправления является перенаправление вывода, также называемое перенаправлением stdout.

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

andreyex@destroyer:~$ ls
appstxt  new.txt  static-ip.txt

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

command > file

Например, позвольте нам сохранить вывод команды ls в файл с именем output.txt:

andreyex@destroyer:~$ ls > output.txt

Выходной файл создается заранее

Как вы думаете, каким должно быть содержимое этого выходного файла? Позвольте нам использовать команду cat, чтобы показать вам сюрприз:

andreyex@destroyer:~$ cat output.txt 
appstxt
new.txt
output.txt
static-ip.txt

Вы заметили, что включение output.txt существует ? Мы сознательно выбрали этот пример, чтобы показать вам это.

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

Добавить вместо удаления

Одна из часто игнорируемых проблем заключается в том, что если вы перенаправляете файл, который уже существует, оболочка сначала удалит ( замкнет ) файл. Это означает, что существующее содержимое выходного файла будет удалено и заменено выводом команды.

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

command >> file

Совет

Вы можете запретить забивание в текущем сеансе оболочки, используя: set -C

Зачем вам перенаправлять стандартный вывод? Вы можете сохранить выходные данные для дальнейшего использования и проанализировать их позже. Это особенно полезно, когда вывод команды слишком велик и занимает весь экран. Это как собирать бревна.

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

Прежде чем вы увидите перенаправление stdin, вы должны узнать о перенаправлении канала. Это более распространено, и, вероятно, вы будете часто его использовать.

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

command 1 | command 2

Позвольте нам показать вам практический пример. Скажем, вы хотите посчитать количество видимых файлов в текущем каталоге. Вы можете использовать ls -1 (это цифра один, а не буква L) для отображения файлов в текущем каталоге:

andreyex@destroyer:~$ ls -1
appstxt
new.txt
output.txt
static-ip.txt

Вы, наверное, уже знаете, что команда wc используется для подсчета количества строк в файле . Если вы объедините обе эти команды с конвейером, вот что вы получите:

andreyex@destroyer:~$ ls -1 | wc -l
4

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

Вы увидите результат последней команды в конвейере. Это очевидно, потому что вывод предыдущей команды (команд) подается на следующую команду (команды) вместо перехода на экран.

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

command_1 | command_2 | command_3 | command_4

Помните, что stdout/stdin это кусок данных, а не имена файлов

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

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

find . -type f -name "*.txt" | mv destination_directory

Вот почему вы часто будете видеть команду find, используемую в сопряжении с командой exec или xargs. Эти специальные команды «преобразуют текст с кучей имен файлов в имя файла», которые могут быть переданы в качестве аргумента.

find . -type f -name "*.txt" | xargs -t -I{} mv {} ../new_dir

Перенаправление ввода

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

command < file

Вы не увидите, что stdin часто используется. Это потому, что большинство команд Linux принимают имена файлов в качестве аргумента и, следовательно, перенаправление stdin часто не требуется.

Возьмите это к примеру:

head < filename.txt

Приведенная выше команда могла быть просто заголовком filename.txt (без <).

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

tr a-z A-Z < filename.txt

На самом деле, использование stdin рекомендуется по конвейеру, чтобы избежать ненужного использования команды cat.

Например, многие люди используют приведенный выше пример с cat, а затем используют tr на нем. Честно говоря, здесь нет необходимости использовать cat.

cat filename.txt | tr a-z A-Z

Объединить перенаправления

Вы можете комбинировать перенаправление stdin, stdout и pipe в соответствии с вашими потребностями.

Например, приведенная ниже команда перечисляет все файлы .txt в текущем каталоге, а затем подсчитывает эти файлы .txt и сохраняет выходные данные в новый файл.

ls *.txt | wc -l > count.txt

Перенаправление ошибок

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

andreyex@destroyer:~$ ls -l ffffff > output.txt
ls: cannot access 'ffffff': No such file or directory

В начале этой статьи мы упоминали, что существует три потока данных, и stderr – это один из потоков выходных данных, который отображается на экране по умолчанию.

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

Но как вы различаете stdout и stderr, когда они оба являются потоком выходных данных? По их идентификатору потока (также называется дескриптором файла).

Поток данных Идентификатор потока
stdin
stdout 1
stderr 2

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

Когда вам нужно перенаправить stderr, вы используете его идентификатор как 2> или 2>>. Это означает, что перенаправление вывода для потока данных stderr (ID 2).

Примеры перенаправления Stderr

Позвольте нам показать вам несколько примеров. Предположим, вы просто хотите сохранить ошибку, вы можете использовать что-то вроде этого:

andreyex@destroyer:~$ ls fffff 2> error.txt
andreyex@destroyer:~$ cat error.txt 
ls: cannot access 'fffff': No such file or directory

Это было просто. Давайте сделаем это немного более сложным (и полезным):

andreyex@destroyer:~$ ls -l new.txt ffff > output.txt 2> error.txt 
andreyex@destroyer:~$ cat output.txt 
-rw-rw-r-- 1 andreyex andreyex 0 May  5 10:12 new.txt
andreyex@destroyer:~$ cat error.txt 
ls: cannot access 'ffff': No such file or directory

В приведенном выше примере команда ls пытается отобразить два файла. Для одного файла она получает успех, а для другого – ошибку. Поэтому мы перенаправили stdout в ouput.txt (с>), а stderr в error.txt (с 2>).

Вы также можете перенаправить как stdout, так и stderr в один и тот же файл. Есть способы сделать это.

В приведенном ниже примере мы сначала отправляем stderr (с 2 >>) в файл комбинированный .txt в режиме добавления. Затем стандартный вывод (с >>) отправляется в тот же файл в режиме добавления.

andreyex@destroyer:~$ ls -l new.txt fff 2>> combined.txt >> combined.txt 
andreyex@destroyer:~$ cat combined.txt 
ls: cannot access 'fff': No such file or directory
-rw-rw-r-- 1 andreyex andreyex 0 May  5 10:12 new.txt

Другой способ, и он является предпочтительным, состоит в том, чтобы использовать что-то вроде 2>&1. Что можно примерно перевести как «перенаправить stderr на тот же адрес, что и stdout».

Давайте возьмем предыдущий пример и на этот раз используем 2>&1 для перенаправления как stdout, так и stderr в один и тот же файл.

andreyex@destroyer:~$ ls -l new.txt fff > output.txt 2>&1
andreyex@destroyer:~$ cat output.txt 
ls: cannot access 'fff': No such file or directory
-rw-rw-r-- 1 andreyex andreyex 0 May  5 10:12 new.txt

Имейте в виду, что вы не можете использовать 2>>&1, думая об использовании его в режиме добавления. 2>&1 уже переходит в режим добавления.

Вы также можете сначала использовать 2>, а затем 1>&2, чтобы перенаправить стандартный вывод в тот же файл, что и стандартный вывод. По сути, это «>&», который перенаправляет один поток данных в другой.

Резюме

  • Есть три потока данных. Один вход, stdin (0) и два потока выходных данных stdout (1) и stderr (2).
  • Клавиатура является стандартным устройством ввода, а экран является устройством вывода по умолчанию.
  • Перенаправление вывода используется с > или >> (для режима добавления).
  • Перенаправление ввода используется с <.
  • Stderr может быть перенаправлен с помощью 2> или 2>>.
  • Stderr и stdout можно комбинировать, используя 2>&1.

Надеюсь, вам понравилось эта подробная статья по перенаправлению в Linux. Если у вас все еще есть сомнения или у вас есть предложения по улучшению этой статьи, сообщите нам об этом в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Cat 336 коды ошибок
  • Castlevanialosue exe системная ошибка