Не могу перезаписать файл linux

Запись файлов в Bash

Одна из наиболее распространенных задач при написании сценариев Bash или работе в командной строке Linux — это чтение и запись файлов.

В этой статье объясняется, как записать текст в файл в Bash с помощью операторов перенаправления и команды tee .

Запись в файл с использованием операторов перенаправления

В Bash перенаправление вывода позволяет вам захватить вывод команды и записать его в файл.

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

  • Оператор перенаправления > записывает вывод в указанный файл. Если файл существует, он обрезается до нулевой длины. В противном случае файл создается. Будьте особенно осторожны при использовании этого оператора, так как вы можете перезаписать важный файл.
  • Оператор перенаправления >> добавляет вывод в указанный файл. Если файл не существует, он создается.

У вас должны быть права на запись в файл. В противном случае вы получите сообщение об ошибке в разрешении отказано.

Вот простой пример, показывающий, как перенаправить вывод команды echo в файл:

Чтобы предотвратить перезапись существующих файлов, включите опцию «noclobber» с помощью встроенной команды set :

>| оператор позволяет вам переопределить параметр Bash «noclobber»

Оператор >> добавляет вывод в конец файла, а не перезаписывает файл:

Используйте команду printf если вы хотите создать сложный вывод:

Если вы хотите записать несколько строк в файл, используйте перенаправление документа Here (Heredoc).

Например, вы можете передать содержимое команде cat и записать его в файл:

Чтобы добавить строки, замените > на >> перед именем файла:

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

Вывод команды date будет записан в файл.

Запись в файл с помощью команды tee

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

По умолчанию команда tee перезаписывает указанный файл, как и оператор > . Чтобы добавить вывод в файл, вызовите команду с параметром -a ( —append ):

Если вы не хотите, чтобы tee выводил данные на стандартный вывод, вы можете перенаправить его на /dev/null :

Чтобы записать текст в несколько файлов, укажите файлы в качестве аргументов команды tee :

Еще одно преимущество команды tee заключается в том, что вы можете использовать ее вместе с sudo и записывать в файлы, принадлежащие другим пользователям. Чтобы добавить текст в файл, в который у вас нет прав на запись, добавьте sudo перед tee :

Выходные данные команды echo передаются как входные в tee , который повышает разрешения sudo и записывает текст в файл.

Выводы

В Linux для записи текста в файл используйте операторы перенаправления > и >> или команду tee .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Копирование, перемещение, переименование и удаление файлов и каталогов в Linux

Деятельность системного администратора Linux-систем неразрывно связана с работой в файловой системе. Т. е. с копированием, удалением, перемещением или переименованием файлов и каталогов. Естественно, все эти действия выполняются в командной строке. Поскольку для сервера использование графических оболочек является неоправданной тратой системных ресурсов. Серверная машина должна предоставлять только исчерпывающий инструментарий для выполнения возлагаемых на неё задач. Поэтому использование командной оболочки на сервере — необходимое и достаточное условие для выполнение задач по администрированию. Какой бы «недружелюбной» и на первый взгляд «неудобной» была системная консоль, но выполнение в ней таких элементарных действий как работа с файлами и каталогами определяет основу системного администрирования.

Читайте также:  Создать простой том не активна windows 10

Основные команды для работы с файловой системой Linux

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

  • cd – перемещение по дереву каталогов файловой системы. В качестве параметра указывается пункт назначения — какой-либо каталог по относительному или абсолютному пути;
  • ls – просмотр содержимого каталога. По-умолчанию выводит содержимое текущего (активного) каталога, если целевой каталог не задан явно через параметр;
  • cp – копирование файлов и каталогов. Первым параметром является источник, вторым — конечный объект-копия;
  • rm – удаление файлов. Может использоваться и для удаления каталогов;
  • rmdir – удаление каталогов;
  • mv – перемещение или переименование файлов или каталогов. В качестве параметров указываются сначала источник, затем конечный объект. Для переименования абсолютные (или относительные) пути для источника и целевого объекта должны совпадать;
  • pwd – определение текущего (активного) каталога.

Итого команд меньше десятка, однако это внушительный арсенал.

Перемещение по дереву файловой системы

Чтобы попасть в нужное место файловой системы, например в каталог, в котором хранятся файлы настроек виртуальных хостов Apache, нужно дать команду (для Ubuntu, например):

Теперь команда pwd выведет этот путь, конечный каталог которого (sites-available) стал активным:

Далее, командой ls можно просмотреть содержимое этого каталога и узнать, какие виртуальные хосты доступны веб-серверу:

Или, что, то же самое:

С помощью команды ls можно также просматривать и скрытые файлы и каталоги (имена которых начинаются с символа точки), а также режимы доступа к ним, добавив ключи -a и -l. Нужно заметить, что в случае использования опции -a также будут показаны псевдокаталоги с именами «.» и «. .», обозначающие текущий и каталог уровнем выше соответственно. Например, если требуется запустить какой-либо исполняемый файл (скрипт или программу) в текущем каталоге, то следует дать следующую команду:

Для перехода в каталог, уровнем выше:

Перейти на два уровня выше:

Перейти в каталог somedir1, который находится в каталоге уровнем выше:

» используется для обозначения домашнего каталога текущего пользователя, например следующая команда:

переведёт пользователя в каталог с сайтом на CMS Drupal (к примеру…), находящуюся в директории htdocs его домашнего каталога. Если в имени файла или директории присутствуют символы пробела, то в этом случае необходимо такие фрагменты заключать в двойные кавычки:

Действия с файлами и каталогами

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

Копирование

Когда, к примеру, нужно создать конфигурацию нового виртуального хоста, то в этом случае проще всего воспользоваться копией существующей конфигурации по-умолчанию:

Теперь можно вносить специфические для нового виртуального хоста настройки в файле drupal8-devtest.conf.

Для того, чтобы скопировать все файлы в какой-либо директории, очень желательно директорию-источник сделать активной, т. е. предварительно перейти в неё:

В результате все файлы (со всеми поддиректориями и их содержимым) из директории /etc/skel/ скопируются в домашний каталог текущего пользователя. Ключ -R позволяет выполнять копирование рекурсивно, т. е. и для всех поддиректорий, ключ -p указывает команде cp сохранять информацию о владельце и режимах доступа к файлам. По-умолчанию команда cp при копировании перезаписывает уже существующие файлы. Для того, чтобы заставить cp каждый раз запрашивать разрешение на перезапись нужно добавлять ключ -i (интерактивный режим). Можно также указать cp никогда не перезаписывать файлы — для этого служит ключ -n. Символ точки «.» указывает обрабатывать все файлы в текущем каталоге.

Читайте также:  Git server mac os

Когда нужно скопировать определённые файлы, например, начинающиеся на «drupal» или с определённым расширением, можно воспользоваться заданием маски с помощью символа звёздочки «*»:

Перемещение и переименование файлов

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

просто переименует файл drupal8-devtest.conf на drupal8-devtest_back.conf.

перенесёт тот же файл в директорию backup домашнего каталога текущего пользователя. И даст ему новое имя drupal8-devtest_back.conf.

Для переименования каталога, как и в случае с командой cp часто необходимо директорию, в которой происходит переименование или из которой осуществляется перемещение, нужно сделать активной:

Перемещение файла (или каталога со всем его содержимым) в другое место нужно дать команду:

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

Удаление

Команда rm – одна из самых опасных. При неосмотрительном и невнимательном её использовании можно удалить целую файловую систему, которую придётся потом восстанавливать. Для удаления какого-либо файла нужно выполнить следующую команду:

Очень рекомендуется использовать опцию -i:

Данная команда кроме всех файлов и каталогов в директории downloads удалит также (по-умолчанию) и сам этот каталог. Поэтом крайне важно контролировать её действия с помощью опции -i. Также для команды rm можно использовать задание масок с помощью символа звёздочки.

Для ознакомления со всеми доступными для каждой из команд опциями следует использовать ключ —help для вывода краткой справки.

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

Источник

Как перезаписать содержимое всех текстовых файлов содержимым одного файла?

Есть папка в которой расположена куча файлов с расширением .srf (текстовые файлы).

Есть файл sample.srf содержимым которого надо перезаписать содержимое всех .srf файлов в указаной папке.

find ./ -type f -name «*.srf» -exec cat /path/to/sample.srf > ‘<>‘ \;

Перед обратным слешем ты пропустил пробел.

И чем вам ‘cp’ не угодил?

Это всё равно не будет работать. Ну никак вообще, тут минимум 2 ошибки.

Почитай пожалуйста man bash раздел REDERECTION обрати внимание на символ > . Затем загляни в man find почитай справку по -exec разберись с тем, что он не вызывает шел.

Так REDIRECT у тебя ломает всю логику find , но если решить эту проблему, то всплывает вторая проблема. Если в -exec не использовать shell, то cat будет считать файлом >

Чтобы это работало так как задумано, должно быть примерно так:

Это хоть и работает, но не проще ли использовать cp , ведь перезаписанный файл эквивалент скопированного:

Это такое масло масляное, что у меня даже с монитора потекло. Кроме всего прочего ещё и уязвимое к именам файлом.

Это такое масло масляное, что у меня даже с монитора потекло. Кроме всего прочего ещё и уязвимое к именам файлом.

Печальная тендеция, когда народ стал воспринимать сообщения из stackoverflow как верх правильности 🙁

Кроме всего прочего ещё и уязвимое к именам файлом.

Кстати, да. У меня выбивало ошибки что мол некоторые srf -файлы не найдены, при этом показывало список из нескольких файлов *.srf .

Как говорит один местный корректор, который метит в модераторы -«орнул в голосину». Ты так хорошо оформил пост, а опечатку капсом не заметил.

Всё верно. Я показал принцип работы. Команду не запускал, а комент писал с телефона.

Зацепился за фразу ТС про содержимое файла. Как уже в этом треде правильно подметили, cp в данном случае лучше. Я лишь показал пример, как использовать find для таких простых задач.

Как уже в этом треде правильно подметили, cp в данном случае лучше.

Не так всё было. Мне было лень расписывать, но нашелся добрый человек, который не поленился объяснить, что дело вовсе не в «лучше»…

Вот я не пойму, зачем ты к словам придираешься? Повторяю: я дал совет использовать find. Что конкретно надо использовать в -exec на усмотрение пользователя. Я уже дважды написал, что cat, который я вписал в команду с телефона по памяти, тут не подходит. Но нет, ты все-равно продолжаешь о чём-то спорить.

Читайте также:  Linux удаленное исполнение команд

надо перезаписать содержимое всех — файлов

Чё, на подходе новый вирус шифровальщик на баше ?

Вот я не пойму, зачем ты к словам придираешься?

Потому что вы попытались обмануть, «лучше» означает что оно работает, но есть способ сделать по другому с некими критериями «лучше». А у вас было в принципе неправильно.

Я уже дважды написал, что cat, который я вписал в команду с телефона по памяти, тут не подходит.

Ну вот опять 25. Почему не подходит? Вам дали скрипт с cat, и оно как раз из разряда «хуже».

Повторяю: я дал совет использовать find.

А вот тут как раз и плохой совет. Оно тут нафиг не нужно. «Есть папка в которой расположена куча файлов с расширением .srf » (c) ТС. Накой тут find? Если бы там был, скажем -delete (хотя тоже не posix-стандарт) оно ещё имело бы смысл, но тут одна папка и куча fork-ов на bash, который тоже бы форкался на cat.

Эпично. То, что ты перезаписываешь sample.srf, не забыл? Потенциально содержание может отличаться, а значит это приведет к совсем не тому результату, что ожидает ТС. Неправильный пример, я считаю. Правильно сначала вынести sample.srf подальше, а потом проводить копирование.

А чо сразу cp ? Здравый смысл подсказывает хардкор: т.е. первый файл — cp , остальные — ln -f на первый.

Эпично. То, что ты перезаписываешь sample.srf, не забыл?

Тут все примеры этим грешат и подразумевается, что это надо проверять дополнительно. И как раз в этот однострочник эту проверку сделать наиболее просто. Но ведь оно просто ругнется и ничего особо страшного на самом деле не произойдёт.

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

куча хардлинков непонятно накой надо в одном каталоге

Только для одного: ему нужна структура каталогов и файлов без содержимого именно в виде структуры файлов.

Только для одного: ему нужна структура каталогов и файлов без содержимого именно в виде структуры файлов.

Какая-то чушь спора ради спора. У него и так уже есть структура, содержимое только разное. Что потом будет нет смысла гадать, всё что угодно, может и это только шапки файлов, которые будут дополняться и так далее.

Самый простой ответ. Чего то там выше наворочили, не пойму..

Потому что вы попытались обмануть

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

А ещё круто не читать коментарии. Про cat уже никто ничего не говорит, но ты всё ещё цепляешься за него.

Какие теории? Натуральный факт.

вокруг однострочника, который написан по памяти для разовой задачи за пять секунд — это очень круто.

К этому вам никто не предъявляет претензии. Все люди могут ошибаться. Но почему-то тут принято юлить и хамить, переводить стрелки.

Про cat уже никто ничего не говорит, но ты всё ещё цепляешься за него.

Именно вы вот только всё время про него говорите, вот опять только что.

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

А твой троллинг довольно уныл. Удачи.

А твой троллинг довольно уныл. Удачи.

Вот и я говорю, что без хамства и прочего «сам дурак» ну никак тут не могут.

Источник

Оцените статью