Как написать и использовать после этого типичный текстовый пакетный командный файл?
Я говорю о файле, который содержит следующие команды:
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
Думаю, я смогу написать это с помощью Leafpad, но...
Где мне его сохранить?
Какой формат?Какое имя и расширение?
Как я могу использовать его после этого в сеансе LXTerminal, имея только один заказ (в идеале, если бы была возможность использовать его автоматически при каждом запуске системы)?
Большое спасибо за уделенное время!
решение1
В мире unix-подобных систем нет "пакетных" файлов. Мы используем скрипты, содержащие "she-bangs". Чтобы создать такой скрипт, откройте текстовый редактор (например, Leafpad) и начните со строки вроде этой:
#!/path/to/interpreter
Где /path/to/interpreter
находится двоичный файл, который будет использоваться для интерпретации вашего скрипта. В Linux мы обычно используем "bash" (Bourne Again SHell), "эволюцию" старой доброй оболочки Bourne Shell. По сути, bash запускает двоичные файлы с аргументами, указанными в скрипте, из путей, включенных в переменную среды PATH (обычно она включает /bin, /sbin, /usr/bin, /usr/sbin и другие).
Но вы также можете использовать другие интерпретаторы, такие как Python, Perl, Ruby, sh, csh, zsh, dash, ksh, помимо множества других вариантов.
Ниже she-bang идет ваш скрипт. В вашем конкретном случае, чтобы запустить указанные команды, мы можем использовать bash, в скрипте вроде этого:
#!/bin/bash
# the line above sets bash as the interpreter
# note that "sudo" is not required here because we will run the script as super user later.
apt-get update
# updates APT repositories
apt-get upgrade
# check for software upgrades and upgrade them
apt-get autoremove
# remove obsolete packages
apt-get autoclean
# remove stored .deb files
apt-get check
# update package cache and check for broken dependencies
Теперь сохраните файл. Расширение не нужно, но по символическим причинам назовите его расширением .sh. Мы запустим скрипт как суперпользователь, поэтому нет необходимости менять права доступа к файлу.
Откройте терминал и перейдите в путь, где вы сохранили свой скрипт. Допустим, вы сохранили его как script.sh. Выполните следующую команду:
chmod +x script.sh
chmod
означает "изменить режим" и используется для изменения того, кто может делать что-либо с вашим скриптом. +x
добавляет разрешение на выполнение для всех пользователей, что позволяет любому запускать скрипт, как будто это любая другая программа. Я не буду вдаваться в полный список того, что означают все эти разрешения, ноэтот вопросдовольно хорошо их резюмирует. После этого вы можете ввести:
sudo ./script.sh
Не забудьте часть ./ и не оставляйте пробелов между ., / и s. Команда sudo
будет запущена ./script.sh
с привилегиями root, поэтому потребуется ваш пароль (конечно, вы должны быть системным администратором).
решение2
То, что в мире Windows называется "пакетным" файлом, в мире *NIX называется "скриптом". По большей части скрипты представляют собой файл с несколькими командами или командами, организованными определенным образом. Вот несколько вещей, которые вам следует знать:
Базовая структура
Обычно вы увидите что-то вроде этого:
#!/bin/sh
# Comments
printf "Hello world"
Первая строка указывает интерпретатор (обычно называемый shebang
строкой), вторая — комментарий (все, что находится после, #
не интерпретируется, это просто текст), третья — фактическая команда.
В терминале вы можете вызвать файл без строки shebang. Это приведет к тому, что скрипт будет прочитан и интерпретирован вашей текущей оболочкой (также известной как интерпретатор команд). Например, я запускаю mksh
оболочку. Я указываю, что #!/bin/sh
он будет запущен оболочкой Ubuntu по умолчанию - dash
. Каждая оболочка имеет некоторые особенности синтаксиса команд, поэтому вам нужно соответствующим образом адаптировать свой скрипт.
Написание сценария
Это должно быть сделано в текстовом редакторе, но вы также можете написать это в LibreOffice Writer и затем сохранить его в виде обычного текста. Лично я просто использую текстовые редакторы командной строки ( nano
в основном или vim
); аналогия здесь была бы edit
в версиях Windows до Windows 7.
Имена файлов и расширения не имеют значения в системах *NIX, так как система считывает первые несколько байт файла, чтобы определить его тип. Я привык добавлять .sh
расширение, но на самом деле - это не нужно.
Сделать скрипт исполняемым
Это делается с помощью chmod 755 scriptName.sh
команды. Это означает read-write-execute
разрешения для владельца (вас) read-execute
для пользователей, которые находятся в группе владельца (например, владельцем файла может быть admin
, поэтому, если вы принадлежите к admin
группе, вы можете читать и выполнять файл ), и read-execute
для кого-либо еще. Никогда не давайте разрешения на запись другим ! Если у вас есть привилегии суперпользователя, это может привести к какой-то плохой афере (т. е. вас могут взломать, и злонамеренный пользователь изменит ваши скрипты так, что они сохранят вашу личную информацию ).
Запуск скриптов
Вы всегда можете запустить скрипт, перейдя в его расположение в терминале и введя ./scriptName
.
Чтобы запустить любую команду где угодно, включая скрипты, они должны храниться где-то в системе, которая включена в $PATH
переменную. Вот что я имею в виду:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin
$PATH
переменная сообщает мне, что если скрипт или исполняемый двоичный файл находится в /usr/local/sbin
или /usr/local/bin
или любом другом из этих каталогов, я могу выполнить эту команду, просто введя ее в терминал.
Теперь, для ваших собственных скриптов, вы должны создать bin
папку, и хранить скрипты там. Если вы используете bash
ваш .profile
файл конфигурации содержит следующие строки:
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
Если вы раскомментируете (удалите #
) перед последними тремя строками (от if
до fi
), ваша личная bin
папка будет включена в $PATH
переменную.