Задачи для linux практики

Упражнения по работе с командной строкой linux

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

Перед тем как начать — первый простой вопрос:

Как получить справку по команде ssh? ответ

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

Как посмотреть текущую рабочую директорию? ответ

Как сменить рабочую директорию? ответ

например, cd /var/www/

Как перейти в родительскую директорию? ответ

Как вернуться в домашнюю директорию? ответ

cd — вызов команды без аргументов приводит к переходу в директорию, указанную в переменной окружения $HOME.

Как вывести список файлов в директории? ответ

ls — вывести список файлов в текущей директории

ls /var/log/ — вывести список файлов в директории /var/log/

ls -l — вывести подробный список файлов

Как посмотреть вермя последнего изменения/доступа к файлу /tmp/test.txt? ответ

ls -l /tmp/test.txt — посмотреть время последнего изменения файла

ls -lu /tmp/test.txt — посмотреть время последнего доступа к файлу

stat /tmp/test.txt — показывает 3 временные метки:

  • Access — время последнего доступа к файлу (любое открытие файла для чтения: просмотр, поиск по файлу и т.п.)
  • Modify — время последнего изменения файла
  • Change — время изменения статуса файла (прав доступа, владельца, изменение файла).

Как создать новую директорию test? ответ

Как создать пустой файл? ответ

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

  • cp empty.txt empty1.txt — скопировать любой другой пустой файл
  • touch empty.txt — «потрогать» несуществующий файл
  • :> empty.txt — перенаправить в файл вывод команды, которая ничего не делает
  • vi empty.txt, затем сразу :wq — открыть файл и сохранить его пустым

Как создать файл /tmp/2mb.txt размером 2Mb? ответ

dd if=/dev/zero of=2mb.txt bs=1M count=2

если в предыдущей команде задать bs=1MB, то файл будет размером 2_000_000 байт.

в данном примере файл будет заполнен нулевыми байтами (0x00).

Как узнать тип файла? ответ

$ file empty.txt empty.txt: empty $ file /usr/bin/perl /usr/bin/perl: symbolic link to `perl5.16.3′ $ file /usr/bin/perl5.16.3 /usr/bin/perl5.16.3: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped $ file index.html index.html: HTML document, UTF-8 Unicode text, with very long lines

Как переименовать файл? ответ

mv имя_файла новое_имя_файла

Как удалить файл/директорию? ответ

rm имя_файла — удалить файл

rmdir имя_директории или rm -r имя_директории — удалить директорию

shred -uv имя_файла — удаление файла для параноиков (без опции -u просто перезаписывает содержимое файла мусором)

Как создать символическую/жесткую ссылку на файл/директорию? ответ

ln -s имя_файла имя_ссылки — создаём символическую ссылку на файл

ln -s имя_директории имя_ссылки — создаём символическую ссылку на директорию

ln имя_файла имя_жесткой_ссылки — создаём жесткую ссылку на файл

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

Как посмотреть размер файла? ответ

ls -l имя_файла — размер файла в байтах

ls -lh имя_файла — размер файла в более привычном формате

Как как узнать размер директории? ответ

du -s имя_директории — размер места в килобайтах (блоках по 1024 байт), которое директория со всем своим содержимым занимает на диске

Читайте также:  Как сделать нижнюю панель больше windows 10

du -sh имя_директории — в более привычном формате

Как узнать сколько свободного места осталось на разделе диска? ответ

при помощи команды df место_монтирования_раздела или просто df

df -h выведет размеры не в килобайтах, а в более удобном формате.

df -ih выведет информацию о количестве использованных и свободных инодов

Работа с текстовыми файлами

Как сравнить два текстовых файла? ответ

diff файл_1 файл_2 или diff -a файл_1 файл_2

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

или awk ‘END ’ имя_файла

а можно открыть файл в текстовом редакторе vi имя_файла и посмотреть кол-во строк CTRL+G

Как вывести на экран отсортированные строки текстового файла? ответ

Как удалить дубли строк из файла? ответ

sort -u имя_файла

или sort имя_файла | uniq

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

cat файл_1 >> файл_2

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

split -l 100 имя_файла 100-

в результате работы этой команды в директории появятся файлы 100-aa, 100-ab… содержащие по 100 строк из исходного файла. Если исходный файл содержал число строк не кратное 100, то в последнем файле будет меньше ста строк.

Как вывести на экран первые 30 строк файла? ответ

head -n30 имя_файла

Как вывести на экран последние 30 строк файла? ответ

tail -n30 имя_файла

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

cat имя_файла — вывести файл на экран целиком

more имя_файла — выводить файл на экран постранично (пробел — перейти к следующей странице, enter — на строку вниз)

less имя_файла — выводить файл на экран с возможностью перемещаться по нему вверх и вниз

vi имя_файла или nano имя_файла или emacs имя_файла — открыть файл в любимом текстовом редакторе

Как вывести на экран строки текстового файла /tmp/file.txt начинающиеся со слова ‘START’? ответ

*!G4;:%#`START/ p’ имя_файла

Как вывести на экран содержимое текстового файла без однострочных комментариев (строка комментария начинается с символа #)? ответ

Как среди нескольких файлов в директории найти те, которые содержат слово ‘test’? ответ

grep ‘test’ * — поиск во всех файлах в текущей директории

grep ‘test’ файл_1 файл_2 файл_3 — поиск только в указанных файлах

Источник

Отчёт с Олимпиады по Linux + задания с ответами

7 декабря прошел финальный тур Олимпиады по GNU/Linux среди студентов и молодых специалистов. Вот топик с анонсом: первый тур проводился дистанционно, второй — очно в Москве. Ниже отчёт и примеры заданий заочного и очного туров.


Геннадий Мазуров занял первое место.

Победители:

  • I место — Геннадий Мазуров
  • II место — Бова Боваев
  • III место — Вячеслав Карпухин

Отчёт

Мы уже далеко не первый год проводим Олимпиады по системному администрированию, но в этот раз события развивались несколько стремительнее, чем обычно. После топика с анонсом мы поймали хабраэффект, который, в частности, выразился в том, что формат из межвузовского очень быстро перерос в международный. Часть претендентов просилась участвовать вне конкурса – из интереса. Мы решили никого не ограничивать, и допустили к участию в первом туре всех желающих. По нашим подсчетам примерно 60% участников пришло с Хабра, остальные узнавали про олимпиаду в социальных сетях, а также из объявлений в университетах. Многие звали друзей.

Из-за того, что было много участников не из Москвы, нам пришлось на ходу менять даты второго тура (не все успевали приехать) и некоторые правила. Возникли также разночтения в трактовке, кто такие “молодые специалисты”. Мы ориентировались на людей, закончивших ВУЗы 1-3 года назад (то есть примерно до 25 лет), но нечетко это проговорили. Я прошу прощения у всех участников, которые из-за этого могли ощутить некоторую скомканность организации. Второй раз на эти грабли не наступим.

Читайте также:  Chm reader для linux

Мы намерено упростили задания первого тура, чтобы не возник отпугивающий эффект, как это было год назад, когда до финала добрались только 12 человек. В этом году на второй тур мы отобрали 30 лучших участников, из них к нам 7 декабря смогли приехать 22 человека. Зато, по мнению нашего победителя, Геннадия Мазурова, который уже принимал участие в нашей олимпиаде 2 года назад, на этот раз во втором туре задания были существенно сложнее, чем ранее.

Геннадий вышел вперёд с большим отрывом. В первом туре можно было набрать максимум 30 баллов, во втором – 70. Победитель набрал по итогам двух туров 80 баллов (в среднем у участников было по 45 баллов). Геннадий живет в Москве, он закончил МГТУ им Баумана и уже работает. Второе место завоевал Бова Боваев (66 баллов), который, можно сказать, пробился к нам на финал: его допустили участвовать в первом туре вне конкурса, а потом уже разобрались с наличием-отсутствием у него высшего образования. Бова родом из Элисты (Калмыкии), заканчивает университет и сейчас также живет в Москве. Третье место занял Вячеслав Карпухин из Уфы (63 балла).

О формате проведения второго тура участники могли догадаться: мы всячески давали понять, что наш финал будет похож на экзамены RedHat. Готовиться можно было по Exam Objectives на сайте RedHat. Но в отличие от экзаменов RedHat мы разрешали пользоваться интернетом. Во втором туре было 20 заданий с разными баллами, которые нужно было выполнить за 4 с половиной часа. После подведения итогов мы разослали всем финалистам правильные варианты решения для заданий второго тура.

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

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

Задания первого тура с ответами

Выборочные задания второго тура, вызвавшие наибольшие затруднения

Исходная ситуация: в вашем распоряжении находятся 2 виртуальные машины с установленной CentOS 6.3 x64, расположенные в одном VLAN. Имена машин — node1 и node2. SELinux на момент проверки выполнения заданий должен работать в режиме targeted enforcing. Перед проверкой заданий машины будут перезагружены.

7. Создайте на node1 каталог /pub. Корневая файловая система, которой принадлежит каталог /pub, должна быть смонтирована с опциями по умолчанию. Каталог /pub предназначен для совместной работы пользователей user1 и user2. Необходимо, чтобы каждый из них мог создавать в /pub файлы, а другой пользователь мог их редактировать. Остальные пользователи не должны иметь доступа в данный каталог.

Читайте также:  Как писать драйвера для линукс

Это задание про SETGID directory, которые используются для организации совместной работы пользователей. Правильно это задание выполнили только 2 участника.

mkdir /pub
chown root:grp1 /pub
chmod u=rwx,g=rws,o= /pub

SETGID (s) обеспечивает, что все файлы и каталоги, которые создаются внутри /pub, имеют ту же группу, что и /pub, т.е. grp1.
Далее надо было удостовериться, что для пользователей grp1 параметр umask=0002, чтобы по умолчанию вновь создаваемые объекты разрешали группе писать g=rwx.

11. На node1 предоставьте каталог /d01 и его подкаталоги в общий доступ по NFS только на чтение для всех адресов сети. Убедитесь, что содержимое всех каталогов доступно с узла node2.

С этим заданием никто из участников на 100% не справился.

Первая хитрость заключалась в том, что /d01 содержит точки монтирования других файловых систем, которые по умолчанию не экспортируются. Поэтому предпочтительный вариант решения – добавить в /etc/exports отдельные записи для /d01, /d01/public и /d01/private.

Еще один вариант – использовать при экспорте /d01 опцию nohide, однако в реальной жизни ее следует использовать с осторожностью (man 5 exports)

Вторая хитрость, которая поджидала на пути, это запись:

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

и открыть порты NFS в файрволле. В принципе, достаточно было разрешить все подключения, т.к. в других заданиях ограничения не накладываются:

iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state —state NEW -j ACCEPT

15. На node2 используйте часть неразмеченного пространства диска размером 2ГБ и подключите его по протоколу iSCSI к node1. На узле node1 это пространство должно быть доступно в виде блочного устройства.

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

Перезапустить службу tgtd и активировать ее автозагрузку:

service tgtd restart
chkconfig tgtd on

Открыть порт iscsi-target 3260/tcp с помощью iptables.
На node1 убедиться, что установлен пакет iscsi-initiator-utils, обнаружить target:

iscsiadm -m discovery -t st -p 10.1.x.2:3260
Starting iscsid: [ OK ]
10.1.x.2:3260,1 iqn.2012-12.com.example:server.target0

Проверить, что доступен новый диск:

17. На node2 установите и настройте web-сервер с двумя виртуальными сайтами — www.example.com и www.test.net. Сайт www.example.com должен быть доступен при обращении к серверу по 8088 порту, а www.test.net — по 8088 и 443. web-сервер должен автоматически запускаться при старте системы.

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

Конфигурация virtual hosts в минималистичном варианте может быть такой (можно там же в httpd.conf):

По SSL-части нужно было изменить в /etc/httpd/conf.d/ssl.conf:

Остальное по умолчанию.
Поскольку SELinux работает в режиме targeted enforcing, apache не может использовать порт 8088, этого порта нет среди разрешенных для него политикой:

semanage port -l | grep -w http_port_t
http_port_t tcp 8080, 80, 443, 488, 8008, 8009, 8443

добавляем для контекста http_port_t еще один разрешенный порт (утилита semanage входит в пакет policycoreutils-python, его нужно было установить):

semanage port -a -t http_port_t -p tcp 8088

После этих действий можно запустить apache и установить автозагрузку:

service httpd start
chkconfig httpd on

Также необходимо было открыть порты 8088 и 443 с помощью iptables.

Источник

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