Как скопировать файл в Linux через терминал

Для того, чтобы сменить владельца файла или каталога, в Unix-системах применяется команда chown. Если изменяя владельца для конкретного каталога нужно также произвести изменения для вложенных файлов и подкаталогов, то нужно применить команду рекурсивно. Для этого применяют параметр «-R». Команда имеет следующий вид:

Файлы в Unix

Начнём с того, что файлы в Unix бывают разные. Идеология «всё есть файл» предполагает, что файлы — не то, чем кажутся.

  1. Обычный файл — как раз всё то, что мы называем файлом.
  2. Директория — она же «папка», она же «каталог».
  3. Символическая ссылка — этакий ярлык на другой «файл».
  4. Блочное устройство — те же жёсткие диски, флешки.
  5. Символьное устройство — например, терминалы tty.
  6. Канал (fifo) — один из вариантов межпроцессорного взаимодействия.
  7. Unix сокет — ещё один из вариантов межпроцессорного взаимодействия.

Так что даже с понятием «файл» не так уж и просто. Зато есть возможность на всех них единообразно раздавать права, пользоваться ими. Например, можно сделать cat на устройство, echo для записи в сеть и т. д.

Во FreeBSD я успешно делал cat на директорию, правда получал не особо читаемую информацию. Но и её можно было использовать для получения нужной информации о файле типа «каталог».

В особо весёлых Unix-ах, например Plan9 можно использовать вместо интерфейса сокетов файлы типа /net/tcp. В общем, как всегда идеология «всё есть что-то» не имеет границ здравого смысла. И это прекрасно!

Команда для копирования «cp»

Для копирования файлов в Linux через терминал используется команда «cp» (от англ. «copy»). Команда «cp» представляет собой утилиту командной строки для копирования файлов и каталогов. Она поддерживает перемещение одного или нескольких файлов или папок с параметрами для создания резервных копий и сохранения атрибутов.

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

cp

Обратите внимание, по умолчанию команда «cp» всегда будет перезаписывать уже имеющиеся файлы копируемыми, но это поведение можно изменить с помощью опций, которые мы рассмотрим во второй части статьи.

Таким же образом выполняется копирование файла в другую папку. Вводим команду «cp», указываем путь к файлу и затем каталог, в который его нужно скопировать. Например, для того чтобы скопировать «» в каталог «folder» нужно выполнить вот такую команду:

cp folder/

Естественно, если это необходимо, вы можете вводить полные пути к файлам и папкам, которые копируете командой «cp». Например, копирование может выглядеть так:

cp ~/temp/ ~/temp/folder/

Еще один пример копирования с указанием полного пути:

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

cp folder/

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

cp *.txt folder/

При копировании каталогов нужно добавлять параметр «-R», так как без этого «cp» будет выдавать ошибку. Поэтому, для копирования каталогов нужно ввести команду «cp -R» и указать исходный и новый каталог. Например, для того чтобы скопировать каталог «folder» в «newfolder» вам нужно выполнить вот такую команду:

cp -R folder/ newfolder/

Как и в случае с файлами, папки можно копировать сразу по несколько штук. Для этого нужно ввести «cp», перечислить копируемые папки и указать каталог назначения. Например, для того чтобы скопировать папки «folder» и «folder2» в «newbigfolder» нужно выполнить следующее:

Читайте также:  Linux — работа с виртуальной памятью

cp -R folder/ folder2/ newbigfolder/

chmod

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

Можно представить настройки прав как последовательность бит. Именно так их представляет операционная система. Вот как это работает.

12345 rwx rwx rwx = 111 111 111 rw- rw- rw- = 110 110 110 rwx — — = 111 000 000

и так далее…

12345678910 rwx = 111 в двоичной нотации = 7 в восьмеричной и десятичнойrw- = 110 в двоичной нотации = 6 в восьмеричной и десятичнойr— = 101 в двоичной нотации = 5 в восьмеричной и десятичнойr— = 100 в двоичной нотации = 4 в восьмеричной и десятичной-wx = 011 в двоичной нотации = 3 в восьмеричной и десятичной-w- = 010 в двоичной нотации = 2 в восьмеричной и десятичной—x = 001 в двоичной нотации = 1 в восьмеричной и десятичной— = 000 в двоичной нотации = 0 в восьмеричной и десятичной

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

123 [[email protected] test]$ chmod 600 some_file

Рассмотрим наиболее применимые разрешения доступа для файлов. Те, что начинаются с цифры 7 используются для программ (они разрешают выполнение),  а остальные для других видов файлов.

  • 777rwxrwxrwx — отсутствуют любые ограничения, каждый может выполнять с файлом любые действия. Обычно это нежелательный вариант.
  • 755rwxr-xr-x — владелец имеет полный доступ, все остальные могут только читать и выполнять файл. Такие права устанавливаются на программы, используемые всеми пользователями.
  • 700rwx—— — только владелец имеет полный доступ к файлу. Никто другой не имеет никакого доступа к файлу. Это разрешение используется для программ, которые используются только владельцем и должны быть недоступны остальным пользователям.
  • 666rw-rw-rw- —все пользователи имеют права на чтение и запись файла.
  • 644rwxr—r— —владелец имеет разрешения чтения и записи файла. Все остальные пользователи могут лишь читать файл. Используется для файлов с данными, к которым нужно открыть доступ на чтение для всех пользователей, но изменять данные может только владелец.
  • 600rw——- —только владелец может читать и записывать файл. Никто другой не имеет доступа к файлу. Используется для частных файлов.

Синтаксис grep и find

Начнём с оператора find. Синтаксис файловой поисковой команды выглядит так:

find [где искать] [параметры] [-опции] [действия]

Некоторые употребительные параметры:

  • -depth : поиск в текущей папке и подкаталогах;
  • -version : вывести версию команды;
  • -print : показывать полные имена файлов (в Linux они могут быть сколь угодно большими);
  • -type f : поиск исключительно файлов;
  • -type d – поиск только директорий (папок).
Синтаксис grep и find

Перечень доступных опций (указываются через дефис):

  • name : файловый поиск по имени;
  • user : поиск по имени владельца файла;
  • perm : по атрибуту «режим доступа»;
  • mtime : по времени последнего изменения (редактирования) файла;
  • group : по группе;
  • atime : по дате последнего открытия файла;
  • newer : поиск файла с датой, более новой, чем заданная в шаблоне директивы;
  • size : по размеру файла в байтах;
  • nouser : поиск файлов, не имеющих введённого атрибута «владелец».

Синтаксис grep:

grep [опции] шаблон [где искать]

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

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

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

Синтаксис grep и find

Рассмотрим наиболее употребительные параметры grep:

  • -b : выводить номер блока перед выдачей результирующей строки;
  • -c : необходимо подсчитать число вхождений искомого фрагмента;
  • -i : поиск без учёта регистра;
  • -n : выдавать на стандартное устройство вывода номер строки, в которой найден искомый фрагмент или шаблон;
  • – l : в результате выдачи должны присутствовать только имена файлов с найденным поисковым фрагментом;
  • -s : игнорировать вывод ошибок;
  • -w : поиск фрагмента, опоясанного с двух сторон пробелами;
  • -v : инвертированный поиск, то есть отображение всех строк, не содержащих заданный фрагмент;
  • -e : параметр указывает, что далее следует регулярное выражение, имеющее собственный синтаксис;
  • -An : вывод искомого фрагмента и предыдущих n строк;
  • -Bn : то же, но со строками, идущими после шаблона.
Читайте также:  Как удалить Вебальту поисковую систему Webalta с компьютера?

Теперь имеет смысл перейти от теоретической части к практической.3

Управление файлами

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

$ ls consumer $ ll total 204818 -rw-rw-r— 1 oracle dba 104867572 Nov 19 13:23 -rw-r—— 1 oracle dba 279 Jan 04 2008 drwrxr-xr-x 1 oracle dba 1024 Sep 17 11:29 consumer $ ls -altr -rw-r—— 1 oracle dba 279 Jan 04 2008 drwrxr-xr-x 1 oracle dba 1024 Sep 17 11:29 consumer -rw-rw-r— 1 oracle dba 104867572 Nov 19 13:23 $

Команда cat позволяет просматривать содержимое любого файла, как показано в следующем фрагменте кода. Чуть позже вы узнаете, как просматривать и изменять файлы с помощью редактора vi.

  $ cat This is a test file. This file shows how to use the cat command. Bye! Это тестовый файл. Он просто показывает, как можно использовать команду cat. До свидания! $

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

$ cat | more

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

$ pwd $ /u10/oradata $ cp /u09/app/oracle/data $ cp -i overwrite (y/n) y

Команда mv позволяет перемещать исходный файл в другое место, изменять его имя или делать и то и другое. В следующем примере команда mv используется для изменения имени файла на :

 $ ls $ $ mv $ ls

Если по какой-то причине нужно избавиться от файла, для этого служит команда этом, однако, следуют соблюдать особую осторожность, поскольку команда rm удаляет файлы навсегда. Для безопасности лучше использовать команду rm с параметром –i, в случае чего она будет отображать перед безвозвратным удалением файла соответствующее предупреждение. Будьте предельно аккуратны с командой rm, поскольку с ее помощью можно очень легко случайно удалить даже всю файловую систему!

$ ls $ rm $ rm -i : ? (y/n) y $ ls $

Синтаксис Chmod

chmod [-Rvf] [Правила доступа] [Файл/Файлы/Каталог, директория файлов]

В части [Правила доступа] могут быть либо числовые, либо символьные значения. [Файл/Файлы/Каталог файлов] — путь к файлу, файлам или к каталогу файлов, абсолютный или относительный.

Ключи -R, -v, -f

  • -R Рекурсивное изменение прав доступа для каталога и вложенных файлов и подкаталогов
  • -v Подробное описание применения изменения прав доступа или невозможности этого действия
  • -f Не выдавать сообщение об ошибке для тех файлов и каталогов, для которых невозможно изменить права доступа

Правила доступа Chmod

Как вы уже знаете, права доступа определяются тем, как пользователь может взаимодействовать с файлами и каталогами, а именно r — read (чтение), w — write (запись), x — execute (выполнение). А также, вы знаете, что эти права должны быть прописаны для трёх групп пользователей:

  1. Владелец файла или каталога;
  2. Пользователи, входящие в группу владельца;
  3. Остальные.
Синтаксис Chmod

Теперь посмотрим в таблицу определения прав:

Читайте также:  15 Примеров использования в linux команды top

Три варианта записи прав пользователей

То есть, для того, чтобы записать правило для владельца дать доступ на чтение и запись, остальным дать права только на чтение, мы должны дать права (rw-r—r—)

Теперь обратите внимание на столбец Символьная и Восьмеричная. Там визуально показано, что то, что выглядит символьно как (rw-r—r—), в восьмеричном виде выглядит как (644). Это выражение и будем использовать как числовую запись в команде.

Теперь осталось собрать всё воедино в одну запись. Для примера, изменим права на доступ «всем дать права на чтение, владельцу право изменять содержимое» для файла :

chmod -v 644

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

Изменение даты и времени в командной строке Linux

Для начала необходимо отметить, что в Linux-машине есть два типа часов: программные часы (system clock), которые поддерживаются ядром системы, и аппаратные часы (работающие от батарейки), которые работают и в выключенном компьютере. При загрузке ядро выставляет системные часы по аппаратным, и далее они работают независимо друг от друга.

Способ первый: команда Date

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

# date —set=’NEW_DATE’

здесь NEW_DATE — строка даты и времени в формате: «Sun, 28 Sep 2014 16:21:42» или «2014-09-29 16:21:42».

Также формат даты можно задать самому:

# date +FORMAT —set=’NEW_DATE’

Например:

# date +’%Y%m%d %H%m’ —set=’20140928 1518′

Вы также можете увеличивать или уменьшать дату или время на некоторое количество дней, месяцев, годов, секунд, минут или часов. Также вы можете комбинировать параметры даты и времени в одной команде.

# date —set=’+5 minutes’

# date —set=’-2 weeks’

# date —set=’+3 months’

# date —set=’-3 months +2 weeks -5 minutes’

И в конце установите аппаратные часы по программным:

# hwclock —systohc

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

# hwclock —hctosys

Способ второй: NTP

Другой способ точной установки даты и времени — использование NTP (network time protocol). В Linux команда ntpdate может синхронизировать системные часы с публичными NTP-серверами.

Установить ntpdate можно с помощью следующих команд:

В системах на базе Debian:

# aptitude install ntpdate

В системах на базе Red Hat:

# yum install ntpdate

Для синхронизации времени  введите команды:

# ntpdate -u <имя NTP-сервера или IP-адрес>

# hwclock —systohc

Вместо синхронизации вручную вы можете также установить демон  NTP (ntpd), который будет работать в фоновом режиме и постоянно синхронизировать системные часы.

Основная безопасность

Ваш домашний каталог — это ваше личное пространство в системе.

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

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

Обычно система запускает веб-сервер и позволяет пользователям иметь свое собственное веб-пространство. Обычная настройка заключается в том, что если вы поместите каталог в свой домашний каталог с именем public_html, то веб-сервер будет читать и отображать его содержимое. Однако веб-сервер работает от имени другого пользователя, поэтому по умолчанию он не будет иметь доступа для доступа и чтения этих файлов. Это ситуация, когда необходимо предоставить команду execute для вашего домашнего каталога, чтобы пользователь веб-сервера мог получить доступ к необходимым ресурсам.