Добавить в корзинуПозвонить
Найти в Дзене
Linux | Network | DevOps

Терминал Linux. Команды в терминале

Прежде чем приступить к команда в терминале, поговорим о директориях в Linux. Здесь нет диска C:\\ D:\\ и прочих.
Когда я начинал свой путь в Linux, для меня это было наиболее непонятно. Поэтому хочу прояснить этот момент.
Не важно на сколько вы разобьете разделов ваш жесткий диск. В системе будет: "/" - корневая директория Затем уже идут все остальные каталоги, которые служат для чего-то.
Директория /home - хранит каталоги пользователей, в которых можно, как правило, выполнять большинство действий без пароля администратора. Ваш домашний каталог находится по адресу - /home/Ваше_Имя_пользователя.
Директории /mnt и /media - вот это важно, в эти каталоги монтируются другие физические диски, флешки и прочие носители информации.
В Ubuntu в каталог /media монтируются диски, флешки, то есть в этом каталоге создается папка с названием вашего электронного носителя.
Остальные каталоги системные и рассказу о них стоит выделить целую статью. Перейдем к командам в терминале. Когда вы
Оглавление

Что из себя представляет корневая файловая система Linux?

Прежде чем приступить к команда в терминале, поговорим о директориях в Linux. Здесь нет диска C:\\ D:\\ и прочих.
Когда я начинал свой путь в Linux, для меня это было наиболее непонятно. Поэтому хочу прояснить этот момент.

Не важно на сколько вы разобьете разделов ваш жесткий диск. В системе будет:

"/" - корневая директория

Затем уже идут все остальные каталоги, которые служат для чего-то.

Директория /home - хранит каталоги пользователей, в которых можно, как правило, выполнять большинство действий без пароля администратора. Ваш домашний каталог находится по адресу - /home/Ваше_Имя_пользователя.

Директории /mnt и /media - вот это важно, в эти каталоги монтируются другие физические диски, флешки и прочие носители информации.
В
Ubuntu в каталог /media монтируются диски, флешки, то есть в этом каталоге создается папка с названием вашего электронного носителя.

Остальные каталоги системные и рассказу о них стоит выделить целую статью.
Перейдем к командам в терминале.

Команды навигации в терминале.

Когда вы открываете терминал в Ubuntu. То вы находитесь в своем домашнем каталоге:

Значок ~ (тильда) - означает домашний каталог текущего пользователя.
Чтобы узнать текущую директорию, в терминале достаточно набрать команду: pwd . Выполнение данной команды представлено на скриншоте выше.

Для навигации в терминале используется команда "cd".
Сначала записывается команда
cd, затем путь, куда нужна перейти. Выглядит так:
Данной командой переходим в каталог /home cd /home
Но это не всё, что можно делать с помощью команды cd:

cd .. перейти в директорию уровнем выше
cd ../.. перейти в директорию двумя уровнями выше
cd перейти в домашнюю директорию
cd ~user перейти в домашнюю директорию пользователя user
cd - перейти в директорию, в которой находились до перехода в текущую директорию

Следующая команда используемая в навигации "ls".
Если ввести
ls, то отобразится содержимое текущей директории:

ls -F отобразить содержимое текущей директории с добавлением к именам символов, храктеризующих тип
ls -l показать детализированое представление файлов и директорий в текущей директории
ls -a показать скрытые файлы и директории в текущей директории

Важно!
Когда вы вводите команду
cd, вам не обязательно вводить полностью имя директории, достаточно нажать клавишу "TAB", произойдет автодополнение названия каталога.
Если имя не заполнилось, значит, есть еще один каталог с таким названием.
Нажав дважды клавишу "TAB", выведется список с каталогами, которые имеют в своем имене начальные буквы, которые вы ввели.

Это касается не только "cd", но и других команд.
Например, когда Вы хотите отредактировать какой-то файл.
Вы выполнили команду
ls, увидели, что у файла имя состоит из 30 знаков, то достаточно ввести первые буквы его имени и нажать клавишу "TAB" и произойдет автодополнение.

Команды удаления, копирования в терминале.

Итак с навигацией разобрались, теперь научимся удалять и копировать каталоги и файлы в терминале

Создание каталогов выполняется командой "mkdir":

mkdir dir1 создать директорию с именем 'dir1'
mkdir dir1 dir2 создать две директории одновременно
mkdir -p /dir1/dir2 создать дерево директорий

Для удаления директорий используется команда "rmdir":

Аналогично удаляются директории, как и создаются. Такие же команды.

Для удаления файлов используется команда "rm":

Работает очень просто, пишете команду и название файла:

rm file1 удалить файл с именем 'file1'

Но "rm" позволяет не только удалять файлы, но и каталоги:

rm -r dir1 удалить директорию с именем 'dir1' и рекурсивно всё её содержимое
rm -r dir1 dir2 удалить две директории и рекурсивно их содержимое

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

rm -f file1
rm -rf dir1

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

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

mv название_файла новое_название

Чтобы переместить файл:

mv название_файла путь/

Ну и осталось копирование.
Для копирования используется команда "cp":

cp file1 file2 скопировать файл file1 и назвать его file2
cp -a dir1/ dir2/ - копировать директорию dir1 в директорию dir2
cp file1 dir1/ - копировать файл с именем file1 в директорию c именем dir1

Вот основные команды навигации в терминале Linux.

Важно!
У каждой команды присутствует множество параметров, чтобы узнать их, просто наберите
команду и параметр --help :
Например: rm --help

Для поиска файлов в терминале используется команда "find"

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

Формат команды find:

find путь -опции

путь – это каталог, в котором произвести поиск.

В обычном случае мы просто указываем путь к нужному каталогу, например:

/usr/share

Но в качестве пути можно указывать следующие значения:

. – поиск в текущем каталоге;

/ – поиск от корневого каталога;

~ – поиск в домашнем каталоге.

Опции.

Основные опции команды find:

-name - поиск файлов по имени, используя приведенный шаблон;

-user - поиск файлов, принадлежащих указанному пользователю;

-type - поиск файлов определенного типа.

Вот наиболее используемые типы:

  • d – каталог;
  • f – обычный файл;
  • l – символическая ссылка;

-size -n +n n - поиск файлов с размером n единиц;

-mtime -n +n – поиск файлов, созданных или модифицируемых менее чем (-) или более чем (+) дней назад.

Примеры использования команды "find".
Самый простой поиск, указываем путь и имя файла.
Например, найдем файл с именем file1
find /home/ -name file1

Но если бы мы написали не полностью имя, например "file", то файл "file1" не был найден. Для этого нужно писать имя в ковычках и в конце добавить *, вот таким образом:
find /home/ -name "file*"

Но нашлись и файлы и директории, где встречается название file, чтобы разграничить это и используется опция -type и параметр f, чтобы искать только файлы (для только директорий d):
find /home/ -name "file*" -type f

Но теперь нашлись файлы в фиг знает какой глубины директориях. А что если нам надо найти в текущем каталоге или в папках вложенности 1 или 2?
Для этого используется опция maxdepth (глубина поиска), то есть, если мы хотим найти файл в директории поиска, без рекурсивного просмотрах всех директорий:
find ~ -maxdepth 1 -name "file*" -type f

Как видим, что нашлись файлы только в директории поиска.
Если хотим включить первый уровень папок внутри каталога поиска, тогда нужно указать maxdepth 2:
find ~ -maxdepth 2 -name "file*" -type f

Как видно на скриншоте, теперь найден файл и в папке "Загрузки". Просто выставляем параметр опции -maxdepth для установки глубины поиска.
Важно! Нужно указывать его перед опцией -name.

Теперь разберем очень важную опцию поиска файла с размером "-size".
Важно, если мы хотим найти файлы размером в килобайтах, нужно писать в конце
k, для мегабайт M, для гигабайт G, для байт b. Важно соблюдать регистр.
Разберем пример:
Найдем файлы в домашней директории менее 10 килобайт с именем file*:
find ~ -name "file*" -type f -size -10k

Нашлись все файлы в домашней директории и ее папках, размер которых менее 10 килобайт.

Теперь давайте найдем файлы в домашней директории, которые весят больше 100 мегабайт:
find ~ -type f -size +100M

Нашелся один файл, который весит более 100 мегабайт.
Также можно искать файлы определенного размера, например которые весят 1G или 1M:
find ~ -type f -size 1G
И теперь переходим к поиску файлов, которые были созданы или модифицированы n дней назад.
Например, для поиска файлов, которые были изменены или созданы менее 2 дней назад:
find ~ -type f -mtime -2

Было найдено очень много файлов. Чтобы найти только файлы определенного пользователя, нужно использовать опцию -user (edward - это мое имя пользователя, вам нужно указывать своё):
find ~ -user edward -type f -mtime -2
В домашней папке все файлы принадлежат вашему текущему пользователю, поэтому повторится список.

Но, что если Вы хотите исключить из поиска скрытые директории, не меняя при этом глубину поиска?
Данная команда может показаться сложной на первый взгляд.
find ~ \( ! -regex '.*/\..*' \) -type f -mtime-2 Вот эта вот конструкция ( ! -regex '.*/\..*' \) как раз и уберет из поиска все скрытые файлы и директории:

Ну и для поиска файлов, которые были изменены или созданы более 100 дней назад, к примеру:
find ~ -type f -mtime +100
Это не все возможности этой команды. Я перечислил основные для поиска файлов и директорий.

Помимо "find" существует еще команда "locate" для поиска файлов.

Разница между ними в том, что
"locate" использует собственную базу данных для хранения имен файлов в то время, как "find" исследует директории в поисках заданного параметром командной строки имени файла.

Команда
"locate" ищет файлы очень быстро, так как она производит поиск не по файловой системе, а по собственной базе данных.

Поэтому при использовании данной команды следует использовать команду, которая обновит базу данных индексов файлов в системе:
sudo updatedb Хотя это и не обязательно, просто если не выполнить её, то вам может вывести в поиске удаленные файлы или не вывести только, что созданные.

Начнём использование данной команды:

В обычном виде вводится команда
locate и имя файла, который хотим найти:
locate file или найти все файлы с расширением
.exe:
locate .exe

Если мы хотим вывести результаты поиска в одну строку, тогда используем следующую опцию -0 (это тире и нуль):
locate -0 .exe Вот результат:

Но если мы ищем файл с названием 'file' , то не найдутся файлы с именами в другом регистре: File, FILE и т.д.
Чтобы это исправить, то нужно использовать следующую опцию -i , то есть:
locate file -i
Если мы хотим узнать просто сколько файлов имеют в своих именах "file" или файлов с расширением .exe и т.д., то нужно указать опцию -c:
locale .exe -c

Что означает, что в системе 10 файлов имеют расширение .exe

И если мы хотим ограничить число выводимых файлов в поиске по заданному параметру, мы ставим опцию -n и вводим число:
locate .exe -n 2 То есть данная команда с опцией -n 2 выведет нам только 2 первых найденных файла:

И напоследок об этой команде, что её лучше выполнять с опцией -e, тогда будут отображены файлы, которые существуют в системе.
Т.е. даже тогда когда запись о файле находится в базе данных, все равно будет осуществлена проверка физического нахождения файла в системе Linux, перед выводом команды
"locate":
locate .exe -e
Теперь об очень полезных командах "whereis" и "which".
У нас установлены программы в системе и чтобы узнать размещение бинарных файлов, исходных кодов и руководств, относящихся к установленной программе, нужно выполнить команду
"whereis", для примера найдем информацию о пакете google-chrome:
whereis google-chrome

Команда же "which" отображает полный путь к установленной программе, также в качестве примера возьмем google-chrome:
which google-chrome

Создание разделов на диске с помощью fdisk

Чтобы посмотреть список подключенных дисков, выполняется команда:
sudo fdisk -l

На скриншоте видно, что подключено два диска.
Я будут проводить "опыты" с флешкой, которая подключена как /dev/sdb

Чтобы начать манипуляции с диском, нужно ввести команду и название диска, то есть в моем случае это(
и да, нужно все команды вводить с правами суперпользователя, то есть добавить sudo):
sudo fdisk /dev/sdb Будет предложено ввести команду, чтобы узнать список команд предлагается ввести "m" для справки:

Вывелся список доступных команд, смотрим какие есть возможности. Их много, но советую пользоваться только:

a переключение флага загрузки
d удаление раздела
m вывод этого меню
n добавление нового раздела
p вывод таблицы разделов
q выход без сохранения изменений
v проверка таблицы разделов
w запись таблицы разделов на диск и выход


Нам необходимо ввести `n` то есть добавим новый раздел:

Команда (m для справки): n
Действие команды
e расширенный
p основной раздел (1-4)

выбираем основной нажав `p`, либо расширенный (о разнице можно почитать на википедии).

Номер раздела (1-4):

Ставим номер раздела, без разницы какой, но для порядка я бы посоветовал начинать размечать разделы с 1. Эта цифра означает как будет называться ваш диск sdb1 или sdb2 и т.д.

Далее размечаем только что созданный раздел.
В первом пункте советую оставить значение по умолчанию (нажать ENTER):

Первый цилиндр (1-261, по умолчанию 1):
Используется значение по умолчанию 1

А здесь, если вы хотите использовать весь объем диска для одного раздела, то тоже нажать ENTER.
Но если хотите выставить размер, то делается это просто, ставим + размер диска и значение K (килобайты), M (мегабайты), G(гигабайты)
В примере разделу выделили 2048 мегабайта:

Last цилиндр, +цилиндры or +size{K,M,G} (1-261, по умолчанию 261): +2048M

Вот скриншот:

Теперь можно ввести команду: "p", чтобы посмотреть список разделов:

Затем можно создать аналогично второй раздел:

Здесь я выбрал только тип размера основной (primary), вводить размер не стал, потому что остальной объем диска будет использовать вторым разделом.
Опять смотрим, список разделов командой "p", проверяем, чтобы всё нас устраивало.

Далее вводим команду `w`, что означает сохранить настройки и выйти.
То есть записываем наши разделы на диск:

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

Теперь приступим к форматированию созданных разделов.

Удаление разделов с помощью fdisk

С удалением всё намного проще, мы вводим:
fdisk /dev/sdb Только выбираем команду "d" и выбираем номер удаляемого раздела, то есть чтобы удалить раздел /dev/sdb1 мы вводим 1:

И конечно, чтобы применить изменения, нужно затем ввести команду "w".

Форматирование разделов с помощью mkfs.

Воспользуемся командой mkfs (от английских слов make file system - сделать файловую систему).
Формат ее простой
mkfs.файловая система устройство
Например, если нам необходимо отформатировать наш
/dev/sdb1 в ext4, для этого выполним следующую команду:
mkfs.ext4 /dev/sdb1
Чтобы посмотреть список доступных файловых систем, нужно ввести в консоле
mkfs и нажать два раза Tab (про автодополнение команд клавишой TAB я уже упоминал в первой статье про терминал Linux):

Здесь стоит заметить, многие сразу зададутся вопросом, а где же FAT32?
Чтобы отформатировать флешку в FAT32 - это команда mkfs.vfat, остальные думаю в объяснении не нуждаются.

В какую файловую систему форматировать ваши разделы - это уже вам решать. Хочу только упомянуть об опции -L 'имя_раздела'. Чтобы присвоить имя раздела (Label), выполняется следующая команда:
mkfs.ntfs -L Diskette /dev/sdb1

Монтирование и размонтирование разделов с помощью команды mount

Для новичков часто не понятно, что такое монтирование. На самом деле здесь всё логично и просто.
Монтирование разделов - это объяснение системе, как добраться до ваших данных и сделать их доступными для использования. Системе нужно указать файловую систему подключаемого раздела, собственно название раздела /dev/sdx, /dev/hdx, т.д., и каталог, в котором будет виден подключаемый раздел.

Монтирование выполняется командой
mount (естественно с правами суперпользователя sudo):

sudo mount -t ext4 /dev/sdb1 /mnt/data

-t ext4 – указываем файловую систему подключаемого диска
/dev/sdb1 – Собственно, сам раздел который мы подключаем
/mnt/data – Точка монтирования место куда подключается наш раздел

В принципе, вам можно не париться в Ubuntu c монтирование дисков, они автоматически монтируются.

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

Размонтирование дисков:
Размонтировать диск можно командой
umount и указав раздел:
umount /dev/sdb1
Вот в принципе и всё.
Более подробно про монтирование я напишу в следующей статье.

Создание aliases (псевдонимов) в Ubuntu.

Сейчас приведу пример, чтобы было понятно.
Допустим мы используем часто команды для обновления:
sudo apt-get update Создав псевдоним alias, можно просто набрать в терминале:

update

И будет выполнена абсолютно та же команда.

Теперь приступим к практике.

Для начала создадим текстовый файл в каталоге текущего пользователя, куда и будут добавляться наши псевдонимы, для этого выполним следующую команду: gedit ~/.bash_aliases Откроется файл в текстовым редакторе, куда можно добавлять псевдонимы.

Шаблон добавления псевдонима bash - alias.

alias название псевдонима='команда_терминала'

Каждый псевдоним начинается с новой строки.

К примеру, добавим псевдонимы для команд
sudo apt-get update и sudo apt-get upgrade:

alias update='sudo apt-get update'
alias upgrade='sudo apt-get upgrade'

У вас должно получиться как на скриншоте:

Сохраняем созданный нами файл ".bash_aliases".

Теперь важно!!!
Чтобы псевдонимы bash aliases заработали, нужно выполнить следующую команду в терминале:
source ~/.bash_aliases
Данную команду нужно выполнять всегда после того, как вы добавили какой-либо новый псевдоним в данный файл или изменили его.

Но это еще не все плюсы.
Можно добавлять в alias команду терминала с дополнительными параметрами.
К примеру установка пакета без подтверждения:
sudo apt-get install -y Псевдоним будет выглядеть следующим образом:

alias install='sudo apt-get install -y'

Но это еще не всё, можно также добавить путь к каталогу, к примеру, запустить наутилус от имени администратора в папку /usr/bin/:

alias admnautilus='sudo nautilus /usr/bin/'

Но и еще огромный плюс псевдонимов Bash aliases - это, что они добавляются в автодополнение в терминале по клавише TAB.

Права доступа к каталогам и файлам в Linux. А также расскажу о том, как можно изменить права и владельца на файлы и директории в Linux.


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

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

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

Для статьи я создал несколько файлов и каталогов в домашней папке.
Для того,
чтобы просмотреть права доступа на файлы и каталоги в нужной директории, переходим в неё и выполняем команду:ls -l У нас будет выведено следующее сообщение в терминале:

Как видно, для наших файлов и каталогов вывелась подробная информация.
Слева
отображены права доступа на файл и директорию вида:

drwxrwxr-x

Чуть ниже подробно разберу это непонятную надпись, а пока двигаемся дальше.
Для того,
чтобы просмотреть права доступа на определенный файл, нужно ввести следующую команду: ls -l имя_нужного_файла Вот как это выглядит:

Для того, чтобы просмотреть права доступа на определенный каталог, вводим следующую команду:ls -l имя_нужной_директории Выглядит это следующим образом:

Для того, чтобы просмотреть права доступа на директории и файлы рекурсивно внутри каталога, нужно ввести следующую команду, перейдя в нужный каталог: ls -Rl либо ввести каталог: ls -Rl имя_нужной_директории Выглядит это следующим образом:

Расшифровка "символьной формы" прав доступа на каталоги и файлы в Linux.

После выполнений команд из первого пункта у нас выдавалось сообщение вида:

drwxrwxr-x

Будем использовать в качестве примера в этом пункте.

Это символьная форма прав доступа в Linux. Давайте разберем её подробно.
Данное сообщение состоит из 10 символов:
Первый символ обозначает тип данных.
Данный символ может быть следующим:
В большинстве случаев это будет:
- = обычный файл;
d = каталог (directory);
l = символическая ссылка (link);
Но кроме этого, еще может быть следующим:
b = файл блочного устройства (block);
c = файл символьного устройства;
s = доменное гнездо (socket);
p = именованный канал (pipe).
Следовательно, в нашем случае это директория (каталог, папка).

Затем идут следующие 9 символов, которые и обозначают права доступа:

rwxrwxr-x

Данные 9 символов состоят из трех групп:

rwx rwx r-x

Первая группа из трех символов обозначает права доступа владельца файла или директории (u - user).
Вторая группа из трех символов обозначает права доступа на файл или директорию для системной группы (g - group).
Третья группы из трех символов обозначает права доступа на файл или директорию для всех остальных (o - other)

У этих трех групп одинаковая комбинация символов, то есть

rwx

Что же они обозначают?
Очень легко запомнить:
r - read, то есть право доступа на чтение файла или директории.
w - write, то есть право на изменение и удаление файла или директории.
x - eXecute, то есть право на запуск файла как программы или вход в директорию.
Они идут обязательно в таком порядке:

rwx

Если, вместо какого то символа идет тире, к примеру

r-x

то это значит, что отсутствуют права на изменение и удаление файла или директорию
Или к примеру:

r--

то это обозначает, что отсутствуют права на изменение и запуск файла или директории. Доступен только просмотр.

Таким образом, из нашего примера:

drwxrwxr-x

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

Как видите, ничего сложного нет.

Но у Вас может возникнуть вопрос о том, а как же узнать, кто именно является владельцем файла и какая группа?

Теже самые команды

ls -l

из первого пункта:

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

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

Небольшое отсупление.
В
Наутилусе (файловом менеджере Ubuntu), можно нажать правой кнопкой мыши на файле и открыть свойства, перейти на вкладку Права, можно увидеть:

Здесь видны в графическом режиме права доступа, владелец и группа.
Если Вы являетесь владельцем файла или директории, то Вы можете изменять права доступа.

Подробно разобрали просмотр прав доступа на файлы и каталоги Linux.
Теперь приступим к их изменению в терминале.

Изменение прав доступа на файлы и каталоги в Linux в символьном режиме.

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

chmod personOperatorRights имя_файла

вместо person нужно использовать один из следующих символов:
u - user, пользователь, владелец файла или директории.
g - group, группа файла или директории.
o - other, все другие.
a - all, то есть все вместе взятые, и владелей и группа, и все остальные.
Этот символ обозначает субъект, которому будут назначены или изменены права.

вместо
Operator, может быть один из следующих символов:
+ - "плюс" добавляем нужные права
- - "минус" удаляем нужные права
= - "равно" устанавливаем нужные права
Этот символ обозначает оператор, от которого зависит будут ли добавлены, удалены или установлены нужные права, которые последуют за оператором

вместо
Rights перечисляем символы прав доступа:
r -read - чтение
w - write - запись
x - eXecute - выполнение
Важно замечание. Здесь идет перечисление из трех перечисленных символов.
Но в определенном порядке rwx, но не нужно указывать тире, то есть просто пропускаем символ. Примеры: rw, wx, rx, r, w, x.

имя_файла - это путь к файлу или директории.

Кроме того, нужный параметр -R, который обозначает рекурсивность.
То есть если нужно изменить права всех файлов и директорий внутри нужной нам директории, нужно после
chmod установить параметр -R. Выглядит это следующим образом:

chmod -R personOperatorRights имя_файла

Важное замечание!
Если Вы не являетесь владельцем файла или директории, или у вас нет прав на изменение файла, то нужно будет использовать права суперпользователя:sudo chmod
Приступим к практике. Разберем примеры.
1). Убираем права для группы на изменение файла:chmod g-w file1 Выглядит это следующим образом:

2). Убираем права на чтение у группы и всех остальных: chmod go-r file1

3). Добавим для группы права на чтение и изменение: chmod g+rw file1

Вот таким образом можно менять права на файлы.

4). Вы, наверное, зачастую видели команду: chmod +x имя_файла.sh Это значит, что мы даём права на выполнение всем для данного файла.
Эта команда аналогична командам:chmod ugo+x имя_файла.sh
chmod a+x имя_файла.sh То есть, если мы хотим добавить или установить права для всех на данный файл или директорию, мы можем не писать кому. Просто оператор и права.

5). Изменим рекурсивно права на файлы и директории внутри нужно директории, отменим к примеру все права у остальных пользователей и групп: chmod -R o-rwx ~/linuxrussia.com/

Изменение прав доступа на файлы и каталоги в абсолютном режиме.

Есть более простой способ изменение прав доступа на файлы и каталоги в Linux. Это изменение прав доступа в числовом представлении.

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

rwxrwxr-x

А теперь, делим на группы:

rwx rwx r-x

Теперь преобразуем в двоичном виде наши права доступа:
- если есть символ, то это 1.
- если прочерк или тире, то это 0.

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

111 111 101

А теперь переведем эти цифры в восьмеричную систему исчисления:

7 7 5

Вот и получили наша магическое число:

775

Более проще запомнить:
r - это 4,
w - это 2,
x - это 1.

Каждая цифра обозначает определенную группу:
Первая цифра - права для владельца,
вторая цифра - права для группы,
третья цифра - права для остальных.

Просто прибавляем цифры:
чтение r и изменение w нужно?
Прибавляем 4+2, то получаем 6.

Следовательно если хотим выдать права только владельцу файла полные права, а остальным убрать все:chmod 700 имя_файла

Вот так меняются права.

Изменение владельца и группы файла или каталога.

Для изменения владельца или группы у файла или каталога есть команда chown.
Используется следующий шаблон выполнения данной команды: sudo chown имя_нового_владельца:имя_новой_группы имя_файла_или_директории Стоит заметить, что если хотим изменить только группу, то шаблон следующий:sudo chown :имя_новой_группы имя_файла_или_директории Если хотим изменить только владельца, то шаблон следущий: sudo chown имя_нового_владельца имя_файла_или_директории Ну и соответственно рекурсивно:sudo chown -R имя_нового_владельца:имя_новой_группы имя_файла_или_директории В принципе ничего сложного.

Чтобы
узнать имя текущего пользователя, используется команда: whoami Чтобы узнать в каких группах состоит текущий пользователь: groups
Давайте сменим владельца у файла на root: sudo chown root file1

Вот таким образом меняются владельцы и группы.


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

Возможно не всё стало понятно из описания, что я имею в виду. Разберем на двух самых частых примерах и всё станет более понятно.

Допустим, есть у нас пользователь в системе. И у него нет доступа к командам суперпользователя. То есть его нет в группах admin и sudo.

Либо вот какая ситуация. Кто-то пользуется вашей учетной записью, а пароль вы свой давать не хотите.

И бывают такие ситуацию, что всем ЭТИМ людям требуется выполнять какие -то команды, которые требуют привилегия суперпользователя.

Опять же, допустим. Наш пользователь хочет обновлять компьютер через консоль.
То есть он хочет выполнять в терминале следующие команды:

sudo apt-get update
sudo apt-get dist-upgrade

Почему именно dist-upgrade а не upgrade, читаем в следующей статье:

Для этих манипуляций есть замечательное решение, которое очень гибкое.

В системе linux есть файл "sudoers", который позволяет настраивать много разных вещей.
Но мы остановимся в этой статье только на доступе к sudo без пароля для выполнения различных команд, а также скриптов.

Предупреждение!
Это текстовый файл и править его напрямую НЕЛЬЗЯ!!! Категорически.
Данная информация рассчитана на более опытных пользователей. Новичкам, только вчера установившим Ubuntu, лучше не лезть.

Для правки файла с привилегиями "sudoers" в Ubuntu существует команда:
sudo visudo

Выполнив в терминале данную команду, откроется текстовый файл в редакторе nano:

-43

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

имя_пользователя ALL=NOPASSWD: команда

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

edward ALL=NOPASSWD: /usr/bin/apt-get update
edward ALL=NOPASSWD: /usr/bin/apt-get dist-upgrade

Сохраняем (CTR-O) и закрываем (CTR-X) в nano.

Теперь пользователю доступны команды к обновлению системы без пароля:

-44

Вот таким образом всё получилось.

Важные замечания.
Путь до программы прописывается полностью, то есть в нашем примере не apt-get, а /usr/bin/apt-get
Откуда мне узнать, где эта программа находится?
Очень просто, вводим в терминале команду

whereis название_программы

Получаем пути, и нас интересуют только каталоги /usr/bin и /usr/sbin.
Вот примеры:

-45

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

Не надо бояться сделать ошибку! Чем хороша visudo для редактирования файла sudoers?

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

-46

Здесь думаю лишним будет говорить, что "Quit" не выбираем НИКОГДА!!!

А как же скрипты???
Итак, разобрали возможно выполнения команд с sudo без ввода пароля.

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

Делается это аналогичным образом, паттерн такой же:

имя_пользователя ALL=NOPASSWD: полный_путь_до_скрипта

Опять же, следует избегать пробелов в названии каталогов, но если они есть то экранируются они "обратным слэшем" - \

Вот так будет выглядеть:

vpnuser ALL=NOPASSWD: /etc/scripts/checkvpnc-connect.sh
vpnuser ALL=NOPASSWD: /etc/scripts/checkvpnc-destiny.sh

И теперь пользователь выполнит в терминале:

sudo /etc/scripts/checkvpnc-destiny.sh

И у него выполнится скрипт и пароль спрошен не будет.

Вот так это делается.
Надеюсь, данная информация окажется вам полезной.

P.S. Кто-то может сказать, типа зачем такие сложности и вообще давайте дадим себе доступ на все команды с sudo без ввода пароля. (Это можно сделать в этом файле).
Но мы не виндоузпользователи, которые сидят под админами (большинство). Есть такая вещь, как безопасность и ей пренебрегать не стоит.