Шпаргалка по Shell

Изучите Shell с практическими лабораториями

Изучите написание сценариев Shell и операции командной строки с помощью практических лабораторий и сценариев реального мира. LabEx предлагает комплексные курсы по Shell, охватывающие основные команды Bash, файловые операции, обработку текста, управление процессами и автоматизацию. Освойте эффективность командной строки и методы написания сценариев Shell.

Операции с Файлами и Каталогами

Просмотр Файлов: ls

Отображает файлы и каталоги в текущем местоположении.

# Показать файлы в текущем каталоге
ls
# Показать с подробной информацией
ls -l
# Показать скрытые файлы
ls -a
# Показать с удобочитаемыми размерами файлов
ls -lh
# Сортировать по времени изменения
ls -lt

Создание Файлов: touch

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

# Создать новый файл
touch newfile.txt
# Создать несколько файлов
touch file1.txt file2.txt file3.txt
# Обновить временную метку существующего файла
touch existing_file.txt

Создание Каталогов: mkdir

Создает новые каталоги.

# Создать каталог
mkdir my_directory
# Создать вложенные каталоги
mkdir -p parent/child/grandchild
# Создать несколько каталогов
mkdir dir1 dir2 dir3

Копирование Файлов: cp

Копирует файлы и каталоги.

# Скопировать файл
cp source.txt destination.txt
# Рекурсивно скопировать каталог
cp -r source_dir dest_dir
# Копировать с запросом подтверждения
cp -i file1.txt file2.txt
# Сохранить атрибуты файла
cp -p original.txt copy.txt

Перемещение/Переименование: mv

Перемещает или переименовывает файлы и каталоги.

# Переименовать файл
mv oldname.txt newname.txt
# Переместить файл в каталог
mv file.txt /path/to/directory/
# Переместить несколько файлов
mv file1 file2 file3 target_directory/

Удаление Файлов: rm

Удаляет файлы и каталоги.

# Удалить файл
rm file.txt
# Удалить каталог и содержимое
rm -r directory/
# Принудительное удаление без подтверждения
rm -f file.txt
# Интерактивное удаление (подтверждение каждого)
rm -i *.txt

Навигация и Управление Путями

Текущий Каталог: pwd

Выводит путь к текущему рабочему каталогу.

# Показать текущий каталог
pwd
# Пример вывода:
/home/user/documents

Смена Каталога: cd

Переключается на другой каталог.

# Перейти в домашний каталог
cd ~
# Перейти в родительский каталог
cd ..
# Перейти в предыдущий каталог
cd -
# Перейти в определенный каталог
cd /path/to/directory
Викторина

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

Что делает cd ~?
Переходит в домашний каталог
Переходит в корневой каталог
Переходит в родительский каталог
Создает новый каталог

Дерево Каталогов: tree

Отображает структуру каталогов в виде дерева.

# Показать дерево каталогов
tree
# Ограничить глубину до 2 уровней
tree -L 2
# Показать только каталоги
tree -d

Обработка Текста и Поиск

Просмотр Файлов: cat / less / head / tail

Отображает содержимое файлов различными способами.

# Показать весь файл
cat file.txt
# Просмотр файла постранично
less file.txt
# Показать первые 10 строк
head file.txt
# Показать последние 10 строк
tail file.txt
# Показать последние 20 строк
tail -n 20 file.txt
# Следить за изменениями файла (полезно для логов)
tail -f logfile.txt

Поиск в Файлах: grep

Ищет шаблоны в текстовых файлах.

# Поиск шаблона в файле
grep "pattern" file.txt
# Поиск без учета регистра
grep -i "pattern" file.txt
# Рекурсивный поиск в каталогах
grep -r "pattern" directory/
# Показать номера строк
grep -n "pattern" file.txt
# Посчитать совпадающие строки
grep -c "pattern" file.txt
Викторина

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

Что делает grep -r "pattern" directory/?
Ищет только в текущем файле
Рекурсивно ищет во всех файлах в каталоге
Заменяет шаблон в файлах
Удаляет файлы, содержащие шаблон

Поиск Файлов: find

Находит файлы и каталоги по критериям.

# Найти файлы по имени
find . -name "*.txt"
# Найти файлы по типу
find . -type f -name "config*"
# Найти каталоги
find . -type d -name "backup"
# Найти файлы, измененные за последние 7 дней
find . -mtime -7
# Найти и выполнить команду
find . -name "*.log" -delete

Манипуляция Текстом: sed / awk / sort

Обрабатывает и манипулирует текстовыми данными.

# Заменить текст в файле
sed 's/old/new/g' file.txt
# Извлечь определенные столбцы
awk '{print $1, $3}' file.txt
# Сортировать содержимое файла
sort file.txt
# Удалить дублирующиеся строки
sort file.txt | uniq
# Посчитать частоту слов
cat file.txt | tr ' ' '\n' | sort | uniq -c

Разрешения и Владение Файлами

Просмотр Разрешений: ls -l

Отображает подробные разрешения и владение файлами.

# Показать подробную информацию о файле
ls -l
# Пример вывода:
# -rw-r--r-- 1 user group 1024 Jan 1 12:00 file.txt
# d = каталог, r = чтение, w = запись, x = выполнение

Изменение Разрешений: chmod

Изменяет разрешения файлов и каталогов.

# Дать разрешение на выполнение владельцу
chmod +x script.sh
# Установить определенные разрешения (755)
chmod 755 file.txt
# Удалить разрешение на запись для группы/других
chmod go-w file.txt
# Рекурсивное изменение разрешений
chmod -R 644 directory/
Викторина

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

Что устанавливает chmod 755 file.txt?
Чтение, запись, выполнение для всех пользователей
Чтение и запись для владельца, чтение для остальных
Чтение, запись, выполнение для владельца; чтение, выполнение для группы и остальных
Только чтение для всех пользователей

Изменение Владения: chown / chgrp

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

# Изменить владельца
chown newowner file.txt
# Изменить владельца и группу
chown newowner:newgroup file.txt
# Изменить только группу
chgrp newgroup file.txt
# Рекурсивное изменение владения
chown -R user:group directory/

Числа Разрешений

Понимание числовой нотации разрешений.

# Расчет разрешений:
# 4 = чтение (r), 2 = запись (w), 1 = выполнение (x)
# 755 = rwxr-xr-x (владелец: rwx, группа: r-x, остальные: r-x)
# 644 = rw-r--r-- (владелец: rw-, группа: r--, остальные: r--)
# 777 = rwxrwxrwx (полные разрешения для всех)
# 600 = rw------- (владелец: rw-, группа: ---, остальные: ---)

Управление Процессами

Просмотр Процессов: ps / top / htop

Отображает информацию о запущенных процессах.

# Показать процессы для текущего пользователя
ps
# Показать все процессы с деталями
ps aux
# Показать процессы в виде дерева
ps -ef --forest
# Интерактивный просмотр процессов
top
# Улучшенный просмотр процессов (если доступен)
htop

Фоновые Задания: & / jobs / fg / bg

Управляет фоновыми и переднеплановыми процессами.

# Запустить команду в фоне
command &
# Показать активные задания
jobs
# Вывести задание на передний план
fg %1
# Отправить задание в фон
bg %1
# Приостановить текущий процесс
Ctrl+Z

Завершение Процессов: kill / killall

Завершает процессы по PID или имени.

# Завершить процесс по PID
kill 1234
# Принудительно завершить процесс
kill -9 1234
# Завершить все процессы с именем
killall firefox
# Отправить определенный сигнал
kill -TERM 1234

Мониторинг Системы: free / df / du

Мониторинг системных ресурсов и использования диска.

# Показать использование памяти
free -h
# Показать дисковое пространство
df -h
# Показать размер каталога
du -sh directory/
# Показать самые большие каталоги
du -h --max-depth=1 | sort -hr

Перенаправление Ввода/Вывода

Перенаправление: > / >> / <

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

# Перенаправить вывод в файл (перезаписать)
command > output.txt
# Добавить вывод в файл
command >> output.txt
# Перенаправить ввод из файла
command < input.txt
# Перенаправить и вывод, и ошибки
command > output.txt 2>&1
# Отбросить вывод
command > /dev/null
Викторина

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

В чем разница между > и >> при перенаправлении в оболочке?
> добавляет, >> перезаписывает
> перезаписывает файл, >> добавляет в файл
> перенаправляет stdout, >> перенаправляет stderr
Разницы нет

Конвейеры (Pipes): |

Соединяет команды с помощью конвейеров.

# Базовое использование конвейера
command1 | command2
# Множественные конвейеры
cat file.txt | grep "pattern" | sort | uniq
# Посчитать строки в выводе
ps aux | wc -l
# Просмотреть длинный вывод постранично
ls -la | less

Tee: tee

Записывает вывод как в файл, так и в stdout.

# Сохранить вывод и отобразить его
command | tee output.txt
# Добавить в файл
command | tee -a output.txt
# Множественные выводы
command | tee file1.txt file2.txt

Here Documents: <<

Предоставляет многострочный ввод командам.

# Создать файл с помощью here document
cat << EOF > file.txt
Line 1
Line 2
Line 3
EOF
# Отправить письмо с помощью here document
mail user@example.com << EOF
Subject: Test
This is a test message.
EOF

Переменные и Окружение

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

Создание и использование переменных оболочки.

# Присвоение переменных (без пробелов вокруг =)
name="John"
count=42
# Использование переменных
echo $name
echo "Hello, $name"
echo "Count: ${count}"
# Подстановка команд
current_dir=$(pwd)
date_today=$(date +%Y-%m-%d)

Переменные Окружения: export / env

Управление переменными окружения.

# Экспортировать переменную в окружение
export PATH="/new/path:$PATH"
export MY_VAR="value"
# Просмотреть все переменные окружения
env
# Просмотреть конкретную переменную
echo $HOME
echo $PATH
# Сбросить переменную
unset MY_VAR

Специальные Переменные

Встроенные переменные со специальным значением.

# Аргументы скрипта
$0  # Имя скрипта
$1, $2, $3...  # Первый, второй, третий аргумент
$#  # Количество аргументов
$@  # Все аргументы как отдельные слова
$*  # Все аргументы как одно слово
$?  # Код завершения последней команды
# Информация о процессе
$$  # PID текущей оболочки
$!  # PID последней фоновой команды

Развертывание Параметров

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

# Значения по умолчанию
${var:-default}  # Использовать значение по умолчанию, если var пусто
${var:=default}  # Установить var в значение по умолчанию, если пусто
# Манипуляции со строками
${var#pattern}   # Удалить кратчайшее совпадение с начала
${var##pattern}  # Удалить самое длинное совпадение с начала
${var%pattern}   # Удалить кратчайшее совпадение с конца
${var%%pattern}  # Удалить самое длинное совпадение с конца

Основы Скриптинга

Структура Скрипта

Базовый формат скрипта и его выполнение.

#!/bin/bash
# Это комментарий
# Переменные
greeting="Hello, World!"
user=$(whoami)
# Вывод
echo $greeting
echo "Current user: $user"
# Сделать скрипт исполняемым:
chmod +x script.sh
# Запустить скрипт:
./script.sh

Условные Операторы: if

Управление потоком скрипта с помощью условий.

#!/bin/bash
if [ -f "file.txt" ]; then
    echo "File exists"
elif [ -d "directory" ]; then
    echo "Directory exists"
else
    echo "Neither exists"
fi
# Сравнение строк
if [ "$USER" = "root" ]; then
    echo "Running as root"
fi
# Сравнение чисел
if [ $count -gt 10 ]; then
    echo "Count is greater than 10"
fi

Циклы: for / while

Повторение команд с использованием циклов.

#!/bin/bash
# Цикл for с диапазоном
for i in {1..5}; do
    echo "Number: $i"
done
# Цикл for с файлами
for file in *.txt; do
    echo "Processing: $file"
done
# Цикл while
count=1
while [ $count -le 5 ]; do
    echo "Count: $count"
    count=$((count + 1))
done

Функции

Создание многократно используемых блоков кода.

#!/bin/bash
# Определение функции
greet() {
    local name=$1
    echo "Hello, $name!"
}
# Функция с возвращаемым значением
add_numbers() {
    local sum=$(($1 + $2))
    echo $sum
}
# Вызов функций
greet "Alice"
result=$(add_numbers 5 3)
echo "Sum: $result"

Сетевые и Системные Команды

Сетевые Команды

Проверка подключения и сетевой конфигурации.

# Проверить сетевое подключение
ping google.com
ping -c 4 google.com  # Отправить только 4 пакета
# DNS-запрос
nslookup google.com
dig google.com
# Сетевая конфигурация
ip addr show  # Показать IP-адреса
ip route show # Показать таблицу маршрутизации
# Загрузка файлов
wget https://example.com/file.txt
curl -O https://example.com/file.txt

Системная Информация: uname / whoami / date

Получение информации о системе и пользователе.

# Информация о системе
uname -a      # Вся системная информация
uname -r      # Версия ядра
hostname      # Имя компьютера
whoami        # Текущее имя пользователя
id            # ID пользователя и группы
# Дата и время
date          # Текущая дата/время
date +%Y-%m-%d # Пользовательский формат
uptime        # Время работы системы

Архив и Сжатие: tar / zip

Создание и извлечение сжатых архивов.

# Создать архив tar
tar -czf archive.tar.gz directory/
# Извлечь архив tar
tar -xzf archive.tar.gz
# Создать zip архив
zip -r archive.zip directory/
# Извлечь zip архив
unzip archive.zip
# Просмотреть содержимое архива
tar -tzf archive.tar.gz
unzip -l archive.zip

Передача Файлов: scp / rsync

Передача файлов между системами.

# Скопировать файл на удаленный сервер
scp file.txt user@server:/path/to/destination
# Скопировать с удаленного сервера
scp user@server:/path/to/file.txt .
# Синхронизировать каталоги (локальный на удаленный)
rsync -avz local_dir/ user@server:/remote_dir/
# Синхронизировать с удалением (зеркалирование)
rsync -avz --delete local_dir/ user@server:/remote_dir/

История Команд и Сокращения

История Команд: history

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

# Показать историю команд
history
# Показать последние 10 команд
history 10
# Выполнить предыдущую команду
!!
# Выполнить команду по номеру
!123
# Выполнить последнюю команду, начинающуюся с 'ls'
!ls
# Интерактивный поиск по истории
Ctrl+R

Расширение Истории

Повторное использование частей предыдущих команд.

# Аргументы последней команды
!$    # Последний аргумент предыдущей команды
!^    # Первый аргумент предыдущей команды
!*    # Все аргументы предыдущей команды
# Пример использования:
ls /very/long/path/to/file.txt
cd !$  # Переходит в /very/long/path/to/file.txt

Сочетания Клавиш

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

# Навигация
Ctrl+A  # Переместиться в начало строки
Ctrl+E  # Переместиться в конец строки
Ctrl+F  # Переместиться вперед на один символ
Ctrl+B  # Переместиться назад на один символ
Alt+F   # Переместиться вперед на одно слово
Alt+B   # Переместиться назад на одно слово
# Редактирование
Ctrl+U  # Очистить строку перед курсором
Ctrl+K  # Очистить строку после курсора
Ctrl+W  # Удалить слово перед курсором
Ctrl+Y  # Вставить последний удаленный текст
# Управление процессами
Ctrl+C  # Прервать текущую команду
Ctrl+Z  # Приостановить текущую команду
Ctrl+D  # Выход из оболочки или EOF

Комбинации Команд и Советы

Полезные Комбинации Команд

Мощные однострочники для общих задач.

# Найти и заменить текст в нескольких файлах
find . -name "*.txt" -exec sed -i 's/old/new/g' {} \;
# Найти самые большие файлы в текущем каталоге
du -ah . | sort -rh | head -10
# Мониторинг лог-файла на наличие определенного шаблона
tail -f /var/log/syslog | grep "ERROR"
# Посчитать файлы в каталоге
ls -1 | wc -l
# Создать резервную копию с временной меткой
cp file.txt file.txt.backup.$(date +%Y%m%d-%H%M%S)

Псевдонимы (Aliases) и Функции

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

# Создать псевдонимы (добавить в ~/.bashrc)
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
# Просмотреть все псевдонимы
alias
# Создать постоянные псевдонимы в ~/.bashrc:
echo "alias mycommand='long command here'" >>
~/.bashrc
source ~/.bashrc

Управление Заданиями и Сессии Screen

Управление долго выполняющимися процессами и сессиями.

# Запустить команду в фоне
nohup long_running_command &
# Запустить сессию screen
screen -S mysession
# Отключиться от screen: Ctrl+A затем D
# Повторно подключиться к screen
screen -r mysession
# Показать список сессий screen
screen -ls
# Альтернатива: tmux
tmux new -s mysession
# Отключиться: Ctrl+B затем D
tmux attach -t mysession

Системное Обслуживание

Общие задачи системного администрирования.

# Проверить использование диска
df -h
du -sh /*
# Проверить использование памяти
free -h
cat /proc/meminfo
# Проверить запущенные службы
systemctl status service_name
systemctl list-units --type=service
# Обновить списки пакетов (Ubuntu/Debian)
sudo apt update && sudo apt upgrade
# Поиск установленных пакетов
dpkg -l | grep package_name

Соответствующие Ссылки