Skip to content

Текстовые файлы и потоки

Доброго времени суток! Сегодня поговорим о работе с текстовыми файлами и потоками в Linux Bash. Разберем команды для сортировки и объединения файлов, а также повторим команды поиска заданной строки и вывода в файл.

  1. Получите список всех процессов и перенаправьте вывод в файл ps.txt.
    ps > ps.txt

  2. Выполните команду поиска всех обычных файлов в каталоге /etc так, чтобы найденные имена файлов были записаны в файл SysComm в домашнем каталоге, а поток ошибок – в нуль-устройство /dev/null.
    find /etc > SysCom 2> /dev/null

  3. Выполните ту же команду, но так, чтобы потоки вывода и ошибок были записаны в файл SysComm.
    find /etc &> SysComn

  4. Допишите в конец файла SysComm информацию о текущей дате и времени, выводимую командой date.
    date >> SysComn

  5. Установите опцию noclobber и сотрите содержимое файла ps.txt с помощью перенаправления вывода.
    set -o noclobber
    > ps.txt
    (невозможно перезаписать файл)

  6. Проведите нерекурсивный поиск файлов символических ссылок в каталоге /usr/share/doc так, чтобы их список был выведен в отсортированном виде с помощью фильтра sort.
    find /usr/share/doc - type l | sort -r

  7. Выведите список всех процессов в файл ps.txt и отсортированный список на экран одновременно.
    ps | tee ps.txt |sort -r

  8. Определите из man ascii восьмеричный код системного звукового сигнала и выведите его с помощью echo.
    echo -e '007'

  9. Команда less позволяет открыть несколько файлов, указав их в качестве аргументов. Просмотрите несколько файлов? Как перейти от просмотра одного файла к другому?
    less ps.txt SysComn (n — переход к следующему файлу)

  10. Выведите содержимое файла /etc/passwd в обратном порядке следования строк с нумерацией.
    cat -b /etc/passwd | sort -r -n

  11. Получите имена трех самых больших файлов в каталоге /usr/bin.
    ls -sl | sort -n -r | cut -c62-100

  12. Получите столбец относительных приоритетов всех процессов в системе.
    ps -l | cut -c25-30

  13. Получите столбец из имен пользователей, находящийся в данный момент в сеансе.
    who | cut -c1-8

  14. Получите список всех пользователей системы. В каком файле он находится?
    cut -d: -f1 /etc/passwd

  15. Получите пронумерованный столбец, составленный из символов строк – имен файлов в текущем каталоге так, чтобы были выведены символы с третьего до последнего.
    ls -l | cut -c58-80 | cat -b

  16. С помощью sed получите список только тех процессов, которые связаны с каким-либо терминалом (фильтр по строке tty).
    ps -e | sed '/tty/!d;'

  17. В полученном списке процессов с помощью sed замените все строки tty на terminal.
    ps -e | sed '/tty/!d; s/tty/terminal/g'

  18. Создайте файл из четверостишия st4.txt.
    cat > st4.txt
    Мой дядя самых честных правил,
    Когда не в шутку занемог,
    Он уважать себя заставил
    И лучше выдумать не мог.
    Ctrl+D

  19. Вставьте две пустые строки после каждой строки в st4.txt.
    sed 'G;G' st4.txt

  20. Удалите все пробелы/табы в конце каждой строки в st4.txt.
    sed 's/[ \t]*$//' st4.txt

  21. Создайте файл st.txt, скопировав st4.txt 5 раз, пронумеруйте строки.
    paste -d"\n" -s st4.txt st4.txt st4.txt st4.txt st4.txt > st.txt

  22. Выведите каждую пятую строку, начиная со второй.
    sed -n '2-5p' st.txt

  23. Выведите первые 10 строк файла, используя команду sed.
    sed 10q st.txt

  24. При помощи awk удалите из списка процессов п.16 второй столбец.
    ps -e | awk '{$2=""; print $0}'

  25. При помощи awk пронумеруйте полученный список.
    ps | awk '{print NR " || " $0} '

  26. Выведите отсортированный список имен пользователей.
    cat /etc/passwd | sort -t:

  27. Выведите четные строки файла.
    сat ps.txt | awk 'NR%2==0'

  28. Создайте в текущем каталоге копию D1 каталога d1 из lab3 с подкаталогами.
    cp ~/linux_lab3/d1 D1 -R

  29. Копируйте файл st4.txt в каталог D1.
    cp ps.txt D1

  30. Сравните рекурсивно каталоги d1 и D1.
    diff D1 ~/linux_lab3/d1

  31. Сравните содержимое домашних каталогов двух пользователей.
    diff /root ~/ (Под рутом)

  32. Создайте два файла ps1.txt и ps2.txt, содержащие полный список текущих процессов. Получите файл patch.txt с отличиями ps1.txt от ps2.txt.
    ps -l > ps1.txt
    ps -l > ps2.txt
    diff ps1.txt ps2.txt > patch.txt

  33. Получите список групп пользователей в системе, отсортированный по GID в обратном числовом порядке.
    cut -d: -f1,3 /etc/group | sort -r -t: -k2 -m

  34. С помощью find, head и sort получите список из десяти файлов в домашнем каталоге, занимающих наибольшее дисковое пространство.
    find -size +1 | head -10 | sort -n

  35. Выведите общее количество файлов в текущем каталоге.
    ls | wc -l

  36. Выведите пронумерованный список файлов в текущем каталоге.
    ls | cat -b

  37. Задайте шаг нумерации, равный двум.
    ls | nl | sed 2~2d

  38. Сколько имеется пользователей, UID которых больше 100?
    awk '$3>100{print $1,$3}' /etc/passwd

  39. Выведите последние три строки файла /etc/passwd, заменив разделители – двоеточия на разделители – вертикальные черты (|).
    tail -3 /etc/passwd | sed 's/:/|/g'

  40. Разделите файл /etc/passwd на части по 10 строк, находящиеся в текущем каталоге. Имена файлов должны начинаться с passwd.
    split -l10 /etc/passwd passwd | cat /etc/passwd

    И, конечно же, не забывайте оставлять свои комментарии.

Опубликовано вLinux Bash

Будьте первым, кто оставит комментарий

    Добавить комментарий