Команды bash.

Основы работы с Linux. -> Работа в консоле. Команды bash.

Команды BASH

полезная ссылка

Вывод на экран

echo $переменная | строка | "строка $переменная"

Переменные и их вывод в консоль.

#!/bin/bash 
STR="Hello World!"
echo $STR
echo $PATH # переменная поиска команд
echo "$PATH - переменная поиска" # форматирование строки

Команда переправления вывода

echo 'hello' > filename.txt
echo 'hello' >> filename.txt

Переменная PATH

echo $PATH
  • это мета где система ищет исполняемые файлы-команды, например python

    whereis python

  • выведет все места где находятся файлы для питона

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

PATH=$PATH:~/opt/bin

Или

PATH=~/opt/bin:$PATH

Команда pwd.

  • вывод текущей директории

Смена директории. Команда cd

cd ~ # домашняя директория

cd / # корневая директория

cd dirname/subdir # смена директории

cd .. # поднятие на уровень вверх

Просмотр директории. Команда ls.

ls # краткий список
ls -l # полный список
ls -la # включая скрытые файлы
ls -lh # c кратким размером

Команда grep.

grep -rn 'string' # поиск файлов со строкой с указанием номера строки

Обединение команд оператор |.

ls -la | grep 'substr' # поиск файлов и директорий содержащих подстроку

Команда mkdir (создание директории).

mkdir dirname

Команда rm.

rm ./filename # удаление файла
rm -R dirname # удаление директории и ее содержимого

Команда nano.

nano ./filename # редактирование файла
  • ctrl+o - запись в файл

  • ctrl+x - выход из редактора

Команда cat

cat filename

вывод содержимого файла

Системная переменная $PS1

Меняет внешний вид приглашения.

echo $PS1
PS1='>>>'
export PS1='<<<'

Команда chmode.

chmod +x ./filename # сделать файл исполняемым
chmod 777 ./filename # изменение прав на файл
chmod 667 -R dirname # изменение прав на содержимое директории

Команда chown.

chown -R user:user dirname # изменение владельца и группы директории и всего содержимого рекурсивно

Строка, определяющая содержимое файла (на каком языке python, php, bash и т.д.).

#!/bin/bash
#!/usr/bin/env python

Язык bash

Справочник по встроенным командам

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

>> > - перенаправляет в файл

| - соединяет вывод одной команды со вводом другой

Команда source и запуск bash скриптов.

myscript # запуск команды (файла) из системных директорий
./myscript # запуск файла из текущей дериктории
source ./myscript # запуск скрипта в текущей сессии терминала (оболочки) shell в ТЕКУЩЕМ процессе
. ./myscript # аналог предыдущей команды

Использование точки говорит о текущей директории (не находящейся в переменной PATH) без точки интерпретатор будет искать файл в $PATH.

Использование source позволяет менять окружение оболочки т.к. выполняется не в новом процессе как при обычном запуске (без source).

Условие. Проверяем существование файла .bashrc

cd () {
    builtin cd ${1:+"$@"} # выполняем оригинальную команду с параметрами
    if [ -f "env.sh" ] # проверяем существование файла
    then
     source ./env.sh # запускаем файл
    fi  
}

.bashrc - файл выполняющийся первым при запуске терминала.

Основы работы с Linux. -> Пишем команду склеивания видео файлов.

Разберем что представляет собой команда.

Любая команда - это программа (файл), написаная на каком-то языке.

Обычно в Linux команды пишут на bash, но она может быть написана на чем угодно включая python.

Чтобы команда стала доступной для выполнения нужно выполнить 2 условия.

  1. Файл, описывающий ее программу должен иметь права на выполнение.

    chmod +x myfile.py

  2. Файл должен находится в одном из путей, указанных в $PATH.

Файл команды может быть текстовым (читабельным) или бинарным - результат компиляции таких языков как C++.

Файл .bash_aliases

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

Например

alias vjoin=’~/www/doc/shell/videojoin.sh’

В данном случае при запуске команды vjoin в консоле будет выполнен файл videojoin.sh в домашнем каталоге.

Файл videojoin.sh

rm ./output.mp4
echo '' > list.txt
for entry in ./*.mp4
do
  echo "file $entry" | sed -e "s/.\///" -e "" >> list.txt
done
ffmpeg -f concat -i list.txt -codec copy output.mp4

Эта небольшая программа отсортирует и склеит видеоролики из каталога в один файл.

1 - удаляем файл output.mp4 в текущей папке

2 - создаем пустой файл list.txt

3 - проходим по всем файлам видео с расширением mp4

4 - записываем имя каждого в тектовик

5 - запускаем конвертацию по списку

Задача 1.

Вариант 1.

Написать команду, которая выполняет файл start.py из текущей директории таким образом, чтобы она запускалась каждый раз при смене директории.

Вариант 2.

Написать команду, которая выполняет файл start.py из текущей директории таким образом, чтобы она запускалась каждый раз при запуске терминала.

Задача 2.

Вариант 1

Создать программу на BASH (команду) выводящую на экран содержимое всех файлов текущего каталога.

Вариант 2

Создать команду, удаляющую все файлы с расшитением *.pyc из текущего каталога и подкаталогов.

Задача 3.

Вариант 1

Создать команду, добавляющую каталог bin в текущем каталоге в переменную $PATH.

Вариант 2

Создать команду, добавляющую строку ===> в приглашение терминала.