Записать строку в конец файла linux
Как добавить строку в конец файла linux через командную строку ?
короткая ссылка на этот вопрос: close
спросил 9 лет назад
1 ответ
В консоли Linux записать строку в файл.
Для добавления строк в конец файла воспользоваться командай echo и знаком >> для перенаправления вывода в файл:
echo "this text will be added at the end off file info.txt" >> ~/Documents/info.txt
Другой пример bash добавления строки «nameserver 8.8.8.8» в файл /etc/resolf.conf:
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
Если же у вас не хватает прав для записи в файл:
-bash: /etc/resolv.conf: Permission denied
То можно выполнить запись строки в файл под sudo (root) с помощью команды sudo sh -c :
sudo sh -c "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf"
Если вы хотите добавлять строку в файл не на bash, а на php, то как это сделать можно прочитать здесь.
Запись в файлы с помощью команды cat в Linux
Команда cat представляет собой инструмент Unix, используемый для управления и отображения содержимого файлов. Команда получила свое название от слова «concatenate», потому что, помимо прочего, она может объединять файлы.
В этой статье мы рассмотрим несколько простых способов использования этой команды для записи текста в файл с примерами. Использование cat очень простое, поэтому для продолжения работы не требуется никакого предварительного программирования или опыта работы с Unix.
Основы команд cat
Начнем с того, что мы просто опишем основы команды cat , чтобы помочь вам, если вы никогда не использовали ее раньше или вам нужен краткий обзор.
Синтаксис
Синтаксис выглядит так:
cat [OPTION]. [FILE].
Чтобы быстро найти синтаксис или параметры команды, запустите cat с параметром справки:
cat --help
Или, вы можете использовать:
man cat
Эти команды должны отображать следующий список параметров:
-A, --show-all equivalent to -vET -b, --number-nonblank number nonempty output lines, overrides -n -e equivalent to -vE -E, --show-ends display $ at end of each line -n, --number number all output lines -s, --squeeze-blank suppress repeated empty output lines -t equivalent to -vT -T, --show-tabs display TAB characters as ^I -u (ignored) -v, --show-nonprinting use ^ and M- notation, except for LFD and TAB --help display this help and exit --version output version information and exit
Отображение содержимого файла на стандартном выводе
Чтобы вывести содержимое файла на стандартный вывод, просто назовите файл, который хотите отобразить:
cat filename1
Если файл находится в другом каталоге, вам нужно указать его:
cat /dir1/dir2/filename1
Мы ожидаем увидеть содержимое этого файла, распечатанное на стандартный вывод, в данном случае — терминал:
Content of filename1!
Это наиболее распространенное использование команды cat, поскольку она позволяет легко просматривать содержимое файла, не открывая текстовый редактор.
Запись текста в файл с помощью cat
Чтобы перенаправить вывод команды cat из стандартного вывода в файл, мы можем использовать оператор перенаправления вывода > :
cat filename1 > filename2
Это приведет к замене содержимого filename2 на содержимое filename1 , поэтому убедитесь, что он не содержит ничего, что вы бы не хотели потерять. Теперь filename2 содержит:
Content of filename1!
Оператор перенаправления вывода перенаправит вывод любой вызываемой нами команды. Например, давайте попробуем это с помощью команды pwd , которая печатает имя текущего рабочего каталога:
pwd > testfile
Если мы посмотрим сейчас на testfile :
cat testfile
Он содержит путь к текущему рабочему каталогу:
/home/kristina
Если файл, на который вы перенаправляете, не существует, будет создан файл с таким именем:
cat filename1 > newfilename
Объединение файлов с помощью cat
Объединить несколько файлов с помощью cat очень просто — просто перечислите файлы в желаемом порядке:
cat filename1 filename2 > outputfile cat outputfile
Этот код берет файлы filename1 и filename2 , сцепляет их и выводит на новый outputfile :
Content of filename1! Content of filename2!
Стандартный ввод между файлами
Когда имя входного файла отсутствует в списке, cat начинает чтение со стандартного ввода до тех пор, пока не достигнет EOF (конца файла). Сигнал о конце файла отправляется ctrl+d в командной строке:
$ cat > outputfile Hello World $ cat outputfile
Hello World
Мы даже можем добавить текст из стандартного ввода между файлами, которые мы хотим объединить, используя — , чтобы указать, где мы ожидаем стандартный ввод. Если у нас есть такие файлы, как filename1 , filename2 и filename3 , и нам нужен текст из стандартного ввода между filename1 и filename2 , мы должны написать:
$ cat filename1 - filename2 filename3 > output Text from standard input! $ cat output
Проверив output , мы увидим что-то вроде:
Content of filename1! Text from standard input! Content of filename2! Content of filename3!
Добавление файлов с помощью cat
В предыдущих примерах использование оператора перенаправления отбрасывало предыдущее содержимое файла output . Что, если мы хотим добавить новый контент к старому? Для добавления файлов мы используем оператор >> :
cat filename1 filename2 >> output cat output
И это должно привести к:
Original output file contents. Content of filename1! Content of filename2!
Объединение содержимого всего каталога файлов с помощью cat
Чтобы объединить все содержимое всех файлов в каталоге, мы используем подстановочный знак * :
cat /dir1/dir2/* > output
Чтобы объединить все содержимое всех файлов в текущем рабочем каталоге, мы будем использовать:
cat * > output
* также можно использовать для объединения всех файлов с одинаковым расширением:
cat *.txt > output
Перечисление номеров строк
Перечисление всех строк вывода осуществляется с помощью опции -n :
cat -n filename1 filename2 filename3 > output cat output
Что бы написать что-то вроде:
1 Content of filename1! 2 Content of filename2! 3 Content of filename3!
Напишите $ в конце каждой строки
В опции -E знаменует конец каждой строки в файле с $ :
cat -E filename1 filename2 filename3 > output cat output
Сортировка строк составных файлов по конвейеру
Это немного обман. Команда cat не может сортировать, но для этого мы можем использовать конвейер. Команда канала ( | ) используется для превращения вывода одной команды во ввод другой. Чтобы отсортировать строки файла, мы будем использовать обе cat и еще одну команду sort :
cat filename2 filename3 filename1 | sort > output cat output
Content of filename1! Content of filename2! Content of filename3!
Вывод
Cat — это простой, но мощный инструмент Unix, который предустановлен в большинстве систем. Его можно использовать отдельно или в сочетании с другими командами с помощью каналов. Первоначально созданный Кеном Томпсоном и Деннисом Ритчи в 1971 году, cat простой в использовании и интуитивно понятный функционал выдерживает испытание временем.
В этой статье мы изучили некоторые возможности использования команды cat для записи текста в файлы, проверки содержимого, объединения и добавления файлов, а также для перечисления строк и их сортировки.
Источник:
Bash: добавить текст в файл
В Bash есть несколько способов добавить текст в файл. Эта статья объясняет некоторые из них.
Чтобы добавить текст в файл, у вас должны быть права на запись в него. В противном случае вы получите сообщение об ошибке в разрешении отказано.
Добавить в файл с помощью оператора перенаправления ( >> )
Перенаправление позволяет захватывать выходные данные команды и отправлять их в качестве входных данных в другую команду или файл. Оператор перенаправления >> добавляет вывод в указанный файл.
Существует ряд команд, которые вы можете использовать для вывода текста на стандартный вывод и перенаправления его в файл, причем наиболее часто используются команды echo и printf .
Чтобы добавить текст в файл, укажите имя файла после оператора перенаправления:
echo "this is a new line" >> file.txt
При использовании с параметром -e команда echo интерпретирует экранированные символы обратной косой черты, такие как новая строка n :
echo -e "this is a new line nthis is another new line" >> file.txt
Чтобы получить более сложный вывод, используйте команду printf которая позволяет вам указать форматирование вывода:
printf "Hello, I'm %s.n" $USER >> file.txt
Другой способ добавить текст в файл — использовать документ Here (Heredoc). Это тип перенаправления, который позволяет передавать команде несколько строк ввода.
Например, вы можете передать содержимое команде cat и добавить его в файл:
cat > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF
Вы можете добавить вывод любой команды в файл. Вот пример с командой date :
date +"Year: %Y, Month: %m, Day: %d" >> file.txt
При добавлении к файлу с использованием перенаправления будьте осторожны, чтобы не использовать оператор > для перезаписи важного существующего файла.
Добавить в файл с помощью команды tee
tee — это утилита командной строки в Linux, которая считывает из стандартного ввода и записывает как в стандартный вывод, так и в один или несколько файлов одновременно.
По умолчанию команда tee перезаписывает указанный файл. Чтобы добавить вывод в файл, используйте tee с параметром -a ( —append ):
echo "this is a new line" | tee -a file.txt
Если вы не хотите, чтобы tee выводил данные на стандартный вывод, перенаправьте его на /dev/null :
echo "this is a new line" | tee -a file.txt >/dev/null
Преимущество использования команды tee перед оператором >> заключается в том, что tee позволяет добавлять текст сразу в несколько файлов и записывать в файлы, принадлежащие другим пользователям, вместе с sudo .
Чтобы добавить текст в файл, в который у вас нет прав на запись, добавьте sudo перед tee как показано ниже:
echo "this is a new line" | sudo tee -a file.txt
tee получает вывод команды echo , повышает разрешения sudo и записывает в файл.
Чтобы добавить текст в несколько файлов, укажите файлы в качестве аргументов команды tee :
echo "this is a new line" | tee -a file1.txt file2.txt file3.txt
Выводы
В Linux для добавления текста в файл используйте оператор перенаправления >> или команду tee .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Как сохранить в файл вывод консоли
Если вывод в (графическую) консоль не очень объёмный, можно просто выделить мышкой кусок и вставить его в сообщение щелчком средней кнопки. В противном случае можно использовать перенаправление вывода в файл через «воронку», например так:
some_command parameters >logfile.txt
Если файл существует он будет перезаписан. Чтобы дополнить его нужно вместо > использовать >>.
Чтобы видеть результат выполнения на экране, и одновременно писать в файл, можно воспользоваться командой tee :
some_command parameters | tee -a logfile.txt
Команда setterm -dump создает «слепок» буфера текущей виртуальной консоли в виде простого текстового файла с именем по умолчанию — screen.dump. В качестве ее аргумента можно использовать номер консоли, для которой требуется сделать дамп. А добавление опции -file имя_файла перенаправит этот дамп в файл с указанным именем. Опция же -append присоединит новый дамп к уже существующему файлу — «умолчальному» screen.dump или поименованному опцией -file .
Т.е. после использования команды, например
setterm -dump -file /root/screenlog
соответственно в файле /root/screenlog будет содержимое одной страницы консоли.
Также можно копировать текст из буфера прокрутки (т.е. всё что на экране и выше за экраном). Чтобы лучше разобраться, читайте о консольном менеджере окон screen . Также может пригодиться увеличить размер буфера прокрутки.
1) Запускаем screen
screen
2) Нажимаем Enter. Всё. Мы находимся в нулевом окне консоли.
3) Выполняем нужные команды, вывод которых необходимо скопировать.
4) Ctrl+A, Ctrl+[ — мы в режиме копирования. Ставим курсор на начало выделения, жмём пробел, потом ставим курсор на конец выделения, жмём пробел. Текст скопирован в буфер.
5) Ctrl+A, с — мы создали новое 1-е окно.
6) Ctrl+A, 1 — мы перешли на 1-е окно.
7) Открываем любой (?) текстовый редактор (я пробовал в mc), и жмём Ctrl+A, Ctrl+] — текст вставлен. Сохраняем.
8) Ctrl+A, Ctrl+0 — вернуться обратно в нулевое окно.
Можно заюзать script .
script --timing=terminal-timing.log terminal.log # в terminal.log запишется все что будет выполнено в терминале # в terminal-timing.log запишется время когда и сколько команды выполнялись. Этот файл нужен чтобы потом была возможность воспроизвести лог с помощью scriptreplay.
когда все нужные команды выполнены
exit
Все записано в terminal.log
Чтобы воспроизвести лог выполняем
scriptreplay terminal-timing.log terminal.log 4 # 4 в конце команды означает скорость воспроизведения. 1 - оригинальная (можно не указывать), 2 - в два раза быстрее и т.д.
В konsole/yakuake вывод можно сохранить комбинацией ctrl+shift+s. Буфер этих программ можно изменить в настройках (по умолчанию, емнип, 1000 строк).
В FreeBSD есть замечательная утилита watch, которая позволяет мониторить терминалы, но как оказалось, в Linux она выполняет совсем иные функции =\ Стоит погуглить на эту тему, чего-нть да найдется.
Как увеличить буфер обратной прокрутки?
Первым решением будет увеличить дефолтный (умолчальный) размер буфера в исходниках ядра и перекомпилировать его. Позвольте предположить, что вы столь же не склонны заниматься этим, как и я, и поискать средство более гибкое.
И такое средство есть, а называется оно framebuffer console , для краткости fbcon . Это устройство имеет файл документации fbcon.txt ; если вы устанавливали документацию к ядру, то он у вас есть. Выискивайте его где-то в районе /usr/share ветви (я не могу указать точный путь из-за разницы в дистрибутивах).
На этом месте прошу прощения: мы должны сделать небольшое отступление и немного поговорить о видеобуфере ( framebuffer ).
Видеобуфер — это буфер между дисплеем и видеоадаптером. Его прелесть в том, что им можно манипулировать: он позволяет трюки, которые не прошли бы, будь адаптер связан напрямую с дисплеем.
Один из таких трюков связан с буфером прокрутки; оказывается, вы можете «попросить» видеобуфер выделить больше памяти буферу прокрутки. Достигается это через загрузочные параметры ядра. Сначала вы требуете framebuffer (видеобуфер); Затем запрашиваете больший буфер прокрутки.
Нижеследующий пример касается GRUB , но может быть легко адаптирован к LILO . В файле настройки GRUB — menu.lst — найдите соответствующую ядру строчку, и затем: Удалите опцию vga=xxx , если таковая присутствует. Добавьте опцию video=vesabf или то, что соответствует вашему «железу». Добавьте опцию fbcon=scrollback:128 . После этой процедуры, строка параметров ядра должна выглядеть приблизительно так:
kernel /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128
Спрашивается, зачем удалять опцию vga=xxx ? Из-за возможных конфликтов с видео-опцией. На своем ATI адаптере, я не могу изменить буфер прокрутки, если vga=xxx присутствует в списке. Возможно в вашем случае это не так. Если вышеперечисленные опции работают — хорошо; но что, если вы хотите увеличить число строк, или установить более мелкий шрифт на экране? Вы всегда делали это при помощи опции vga=xxx — а она-то и исчезла. Не переживайте — то же самое может быть достигнуто изменением параметров fbcon, как описано в файле fbcon.txt (но не описано в данной статье).
С опцией fbcon=scrollback:128 у меня буфер прокрутки увеличился до 17 экранов (35 раз Shift+PgUp по полэкрана). Кстати, 128 — это килобайт. Автор статьи утверждает, что больше установить нельзя. Я и не пробовал.