Архив рубрики: Bash

как в Linux вывести настройки IP адресов сетевых карт?

чтобы вывести настройки сетевой карты есть команда: ifconfig

чтобы вывести только ip адрес, маску и подсеть можно выбрать эти даные конвеером из несколькоих команд:

вставить вот это в консоль Linux:
ifconfig eth0 | grep "inet addr:" | cut -f2,3

ifconfig eth1 | grep "inet addr:" | cut -f2,3
графическая консоль linux Mint

The package lists or status file could not be parsed or opened

выдал мне Linux Mint ошибку:

Часть текста в моей консоли Linux:
...

Reading package lists... Done
Error opening the cache:
E:Type '‘Google' is not known on line 1 in source list /etc/apt/sources.list.d/google-chrome.list, E:The list of sources could not be read., E:The package lists or status file could not be parsed or opened.

Дело в том, что я допустил ошибку при в строке добавления репозитария google Chrome через консоль командой echo.

Но в стандартном месте: /etc/apt/sources.list не оказалось строчки с таким содержимым.

Оказалось надо быть внимательнее и /etc/apt/sources.list.d/google-chrome.list это указание на отдельный файл репозитариев Google Chrome.

Удаление этого файла решило проблему.

как в Linux добавить строку в конец файла без его открытия в редакторе?

часто когда настраиваешь Linux компьютер требуется добавить в конец разных файлов строку (или несколько) с настройками. Это можно сделать не открывая файл в редакторе, тем более обычно рекомендуют открывать файл в редакторе vi или nano.

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

Вместо этого можно:

вставить вот это в консоль Linux:
echo "Строка для вставки в конец файла" >> полный_путь_к_файлу_для_вставки_текста_в_его_конец

sudo — как запустить команду от имени другого пользователя (например root или vasya)

sudo — выполнить команду от имени другого пользователя

СИНТАКСИС

sudo -V | -h | -l | -L | -v | -k | -K | -s | [ -H ] [ -P ] [ -S ] [ -b ] | [ -p запрос ] [ -c класс| ] [ -a тип_аутентификации ] [ -u имя_пользователя/#uid ] команда

ОПИСАНИЕ

sudo позволяет разрешенному пользователю выполнять команду как суперпользователь или другой пользователь, как определено в файле sudoers. Реальный и эффективный uid и gid при этом устанавливаются так, чтобы соответствовать таковым целевого пользователя, как определено в файле passwd (также инициализируется вектор группы, если целевой пользователь — не root). По умолчанию sudo требует, что бы пользователи аутентифицировали себя при помощи пароля (ЗАПОМНИТЕ: это пароль пользователя, не пароль root). Как только пользователь аутентифицировал себя происходит обновление временной метки и пользователь может использовать sudo некоторый период времени без пароля (по умолчанию пять минут, если в sudoers не указано другое).

sudo определяет, кто является авторизованным пользователем сверяясь с файлом /etc/sudoers и всеми файлами с подходящим названием в каталоге/etc/sudo.d. Указав для sudo флаг -v пользователь может обновить временную метку без выполнения команды. Строка приглашения для ввода пароля так же устаревает, если пользователь не введёт пароль в течение 5 минут (если в sudoers не переопределено другое).

Если не указанный в файле sudoers пользователь попытается выполнить при помощи sudo команду, то уполномоченному пользователю будет отправлено почтовое сообщение, как определено во время конфигурации или в файле sudoers (по умолчанию это root). Обратите внимание, что сообщение не будет отправлено, если неавторизованный пользователь пытается выполнить sudo с флагами -l или -v. Это позволяет пользователям определить — разрешено им использовать sudo или нет.

sudo может регистрировать оба типа попыток, успешные и не удачные, (так же как и ошибки) при помощи системного журнала регистрации событийsyslog(3), собственного журнала, или с использованием обоих вариантов. По умолчанию sudo регистрирует события через syslog(3), но это можно изменить во время конфигурации или в файле sudoers.

ПАРАМЕТРЫ

sudo акцептирует следующие параметры командной строки:

«-V»
Параметр -V (версия) заставляет sudo показать номер версии и выйти. Если пользователем инициировавшим вызов является root, то параметр -Vотобразит список значений по умолчанию с которыми был собран sudo, в том числе локальные сетевые адреса машины.
«-l»
Параметр -l (список) перечислит дозволенные (и запрещенные) команды для пользователя на данной машине.
«-L»
Параметр -L (список по умолчанию) отобразит список параметров, которые могут быть установлены в строке Defaults, с кратким описанием каждого. Этот параметр полезен в сочетании с grep(1).
«-h»
Параметр -h (помощь) заставит sudo показать справку об использовании и выйти.
«-v»
Если указан параметр -v (идентифицировать), sudo обновит временную метку пользователя, предложив пользователю, если необходимо, указать пароль. Это продлит срок действия прежнего пароля sudo на следующие 5 минут (или на тот срок, который указан в sudoers), но не требует при этом выполнения какой-либо команды.
«-k»
Указание для sudo параметра -k (уничтожить) лишает законной силы временную метку пользователя, устанавливая время на начало века. При следующем выполнении sudo потребуется указать пароль. Эта операция не требует указания пароля и была добавлена, чтобы позволить пользователю аннулировать права sudo из файла .logout.
«-K»
Параметр -K (уничтожить наверняка) для sudo полностью удаляет временную метку пользователя. Этот параметр тоже не требует указания пароля.
«-b»
Параметр -b (фон) сообщает sudo выполнить заданную команду в фоновом режиме. Если вы используете параметр -b, то вы не сможете использовать контроль над запущенными процессами оболочки для манипуляций командами.
«-p»
Параметр -p (приглашение) позволяет переопределить внешний вид приглашения в систему по умолчанию. Если вид приглашения содержит управляющий символ %u, то %u будет заменен учетным именем пользователя. Аналогично %h может быть заменено на имя компьютера.
«-c»
Параметр -c (класс) заставляет sudo выполнить определенную команду с ограничением ресурсов, свойственным указанному классу пользователя. Параметр класс может быть либо именем класса, указанным в /etc/login.conf, или знаком -. Указание класс с помощью — означает, что команда будет выполнена с учетом прав того пользователя, от имени которого эта команда выполняется. Если параметр класс указывает на текущий класс пользователя, то команда должна быть выполнена от имени root, или команда sudo должна выполняться из оболочки суперпользователя (root). Этот параметр доступен с BSD-классом входа в систему, где sudo был сконфигурирован с параметром —with-logincap.
«-а»
Параметр (тип аутентификации) принуждает sudo при идентификации пользователя использовать указанный тип аутентификации, в соответствии с /etc/login.conf. Системный администратор может указать перечень подходящих для sudo методов аутентификации путём добавления в /etc/login.conf записи «auth-sudo». Этот параметр доступен только на системах поддерживающих BSD-тип аутентификации, если sudo был сконфигурирован с параметром —with-bsdauth.
«-u»
Параметр -u (пользователь) вызывает sudo для выполнения указанной команды от имени пользователя, отличного от root. Для указания uid вместоимени пользователя, используйте #uid.
«-s»
Параметр -s (оболочка) запускает командный интерпретатор, определенный переменной окружения SHELL, или оболочку указанную в passwd(5).
«-H»
Параметр -H (HOME) устанавливает значение переменной окружения HOME к домашнему каталогу целевого пользователя (по умолчанию root), определенную в passwd(5). По умолчанию sudo не изменяет HOME.
«-Р»
Параметр -P (сохранить вектор группы) сообщает sudo о необходимости сбережения вектора группы пользователя в неизменном виде. По умолчанию sudo инициализирует групповой вектор к списку групп, к которым принадлежит целевой пользователь. Однако, реальный и эффективный идентификаторы групп назначаются соответствующими целевому пользователю.
«-S»
Параметр -S (stdin) заставляет sudo считывать пароль со стандартного ввода вместо терминала.
«—«
Флаг обозначает, что sudo должен прекратить выполнение параметров командной строки. Это полезно в сочетании с флагом -s.

КОДЫ ВОЗВРАТА

В случае успешного выполнения возвращаемым значением sudo будет возвращаемое значение выполненной программы.

В противном случае sudo завершает работу со значением 1, если обнаруживает проблемы в конфигурации/правах доступа или sudo не в состоянии выполнить заданную команду. В последнем случае сообщение об ошибке будет выведено в stderr. Если sudo не в состоянии получить stat(2) на одну или болееe запись в пользовательском PATH, то сообщение об ошибке будет выведено на stderr. (Если каталог не существует или если это на самом деле не каталог, запись о нем будет игнорирована и об ошибке сообщено не будет.) При нормальных обстоятельствах этого не должно произойти. Наиболее частая причина возврата от stat(2) «permission denied», если вы запустили автоматическое монтирование дисков и один из каталогов в вашем PATH находится на машине, которая в настоящий момент не доступна.

ПРИМЕЧАНИЯ ПО БЕЗОПАСНОСТИ

sudo пытается быть безопасной при выполнении внешних команд. Переменные, контролирующие выполнение динамической загрузки и связей, могут быть использованы для уничтожения программ выполняемых sudo. Для борьбы с этим, переменные окружения LD_*, _RLD_*, SHLIB_PATH (только HP-UX) и LIBPATH (только AIX), изъяты из окружения доступного для команд выполняемых всеми. sudo также изымает переменные IFS, ENV, BASH_ENV, KRB_CONF, KRB5_CONFIG, LOCALDOMAIN, RES_OPTIONS, HOSTALIASES, NLSPATH, PATH_LOCALE, TERMINFO, TERMINFO_DIRS И TERMPATH, поскольку они тоже могут представлять угрозу. Если установлена переменная TERMPATH и является именем пути, то она также будет игнорирована. Дополнительно, если переменные LC_* или LANGUAGE содержат символы / или %, то они будут игнорированы. Если sudo було собрано с поддержкой SecurID, то переменные VAR_ACE, USR_ACE и DLC_ACE будут также очищены. Список переменных, подлежащих очистке со стороны sudo, может быть распечатан в вывод команды sudo -V, выполненной от имени суперпользователя (root).

Во избежание подмены команд sudo проверяет «.» и «» (оба указывают на текущий каталог), когда осуществляет поиск команды в пользовательском PATH (если один из них есть в PATH) в последнюю очередь. Однако, обратите внимание, что фактическая переменная окружения PATH не модифицирована и передается программе, выполняемой sudo, в неизмененном виде.

Из соображений безопасности, если ваша ОС поддерживает разделяемые библиотеки и не отключает пользовательский путь поиска для программ использующих setuid (чаще всего), вы должны использовать параметры линковщика которые исключают такую возможность или линкуют sudoстатически.

sudo проверяет принадлежность каталога содержащего временные метки (по умолчанию это /var/run/sudo) и игнорирует каталоги с содержимым не принадлежащим root и доступным на запись только для root. В системах, позволяющих не привилегированным пользователям передавать права на файлы через chown(2), если временная метка находится в каталоге доступном для записи для всех (т.е.: /tmp), то возможна ситуация, когда пользователь создаст каталог каталог содержащий временную метку прежде, чем будет выполнено sudo. Однако, так как sudo проверяет права владения и режим доступа каталога и его содержимого, то вред может быть нанесён только «скрытыми» файлами, помещенными в каталог с временными метками. Это вряд ли случится в том случае, если владельцем каталогов с временными метками является суперпользователь и они не доступны для других пользователей для записи в них. Что бы обойти эту проблему вы можете использовать каталог для хранения временных меток (например /var/adm/sudo), никому не доступный для записи, или создать /var/run/sudo, с соответствующими владельцем (root) и правами доступа (0700) в системных файлах запуска.

sudo игнорирует временные метки с датой создания в далеком будущем. Временные метки с датой большей, чем настоящий момент времени + 2 * TIMEOUT будут игнорироваться, регистрироваться sudo и уполномоченному пользователю будет послано предупреждение. Это сделано во избежание создания временных меток с поддельными датами, которые позволят отдавать файлы пользователям.

Обратите внимание, что sudo регистрирует только явно выполненные команды. Если пользователь выполняет такую команду как sudo su или sudo sh, то команды выполненные из этих оболочек не будут запротоколированы и при этом их не затронет управление доступом sudo. Тоже-самое верно по отношению к командам, допускающим использование управляющих символов (включая большинство редакторов). В связи с этим должна быть проявлена осторожность при предоставление пользователям доступа к выполнению команд посредством sudo, во-избежание нечаянного предоставления пользователю доступа к оболочке суперпользователя (root).

EXAMPLES

Внимание: следующие примеры содержат работающие записи sudoers(5).

Для получения списка файлов в каталоге закрытом для чтения:
sudo ls /usr/local/protected

Для получения списка файлов домашнего каталога пользователя yazza на машине, где файловая система, содержащая ~yazza не позиционируется как корневая:
sudo -u yazza ls ~yazza

Для редактирования файла index.html как пользователь www:
sudo -u www vi ~www/htdocs/index.html

Для выключения компьютера:
sudo shutdown -r +15 «quick reboot»

Для создания списка занимаемого каталогами места в партиции /home. Обратите внимание, что это выполняется в под-оболочке (sub-shell) для выполнения cd и переадресации файла.
sudo sh -c «cd /home ; du -s * | sort -rn > USAGE»

ПЕРЕМЕННЫЕ

sudo использует следующие системные переменные:

PATH Установленную в нормальное значение, если установлен SECURE_PATH. SHELL Используется для указания оболочки для запуска с параметром -s. USER Устанавливается к целевому пользователю (root, если параметром -u не определено другое). HOME В варианте -s или -H (или если sudo было сконфигурировано с
параметром —enable-shell-sets-home) указывает на домашний                                   каталог целевого пользователя.
SUDO_PROMPT Используется как заданная по умолчанию подсказка пароля. SUDO_COMMAND Установлено на команды, выполняемые sudo. SUDO_USER Установлено на вход в систему пользователя, которому разрешено
вызывать sudo. SUDO_UID Установлено на uid пользователя, которому разрешено вызывать sudo. SUDO_GID Установлено на gid пользователя, кто вызвал sudo. SUDO_PS1 Если установлено, PS1 будет установлен на это значение.

ФАЙЛЫ

/etc/sudoers /etc/sudo.d/* Описание того, кто и какие команды может выполнять /var/run/sudo Каталог содержащий временные метки

АВТОРЫ

Многие люди годами работали над sudo. Эта версия содержит код написанного преде всего:
Todd Miller
Chris Jepeway

Краткую историю sudo смотри в файле HISTORY в дистрибутиве или в интернете по адресу http://www.sudo.ws/sudo/history.html.

Александр Блохин <sass@altlinux.ru> — перевод на русский язык.

ОШИБКИ

Если вам кажется, что вы нашли ошибку в sudo, то отправьте рапорт об ошибке по адресу: http://www.courtesan.com/sudo/bugs/

ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ

Sudo поставляется «КАК ЕСТЬ’ и любые явные или неявные гарантии, включая, но не ограничиваясь неявными гарантиями, коммерческой ценности и пригодности для конкретной цели отрицаются. Подробности смотри в файле LICENSE, поставляемом вместе с sudo.

ПРЕДОСТЕРЕЖЕНИЕ

Не существует никакого простого способа предотвратить захват пользователем оболочки с правами суперпользователя (root), если он имеет доступ к командам оболочки.

Если пользователь имеет sudo ALL, то ничто не остановит его от создании собственной программы, которая даст ему оболочку привилегированного пользователя (root), не смотря ни на какие элементы ! в спецификации пользователя.

Выполнение сценариев оболочки через sudo может вызвать те же самые ошибки ядра, которые делают сценарии оболочки со сменой идентификатора пользователя опасными на некоторых операционных системах (если ваша ОС поддерживает каталог/dev/fd/, сценарии оболочки со сменой идентификатора пользователя в целом безопасны).

СМ. ТАКЖЕ

stat(2), login_cap(3), sudoers(5), passwd(5), visudo(8), grep(1), su(1).

 
Источник — www.opennet.ru

делегирование прав sudo другому пользователю

нужно чтобы пользователь мог зайти на Linux в SSH или с консоли напрямую и выполнить какую-то команду, требующую прав root

ну не давать ему же пароль от root!

Можно включить его в группу admin, но и это лишнее количество передаваемых прав. Так он дел натворит! Можно дать ему доступ к sudo на конкретные команды или (и) переменные среды конкретного пользователя. Этому и посвящена эта запись.

Идея в том, что будет один пользователь и он сможет выполнять определенные команды от sudo не имея root прав. Но можно сделать это и нескольким пользователям.

Общий вид команд этого файла:

[пользователь] [хост]=([кем может стать]) [что может сделать]

#TVS
#%tvs-ssh-system-views TVS-Laptop = NOPASSWD: /home/tvs/scripting/test.sh  # этот вариант с правами на выполнение скрипта группе не работает. Нужно указывать каждому пользователю.

запуск файла редактирования и делегирования прав sudo

sudo visudo

настройка делегирования прав sudo

vova TVS-Laptop = NOPASSWD: /home/tvs/scripting/test.sh

tvs TVS-Laptop = NOPASSWD: /home/tvs/scripting/test.sh

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

1) chmod 771 имя_файла.sh
2) запускать имя файла.sh без source имя_файла.sh
т.е.
запуск скрипта от sudo
sudo имя_файла.sh

Также здесь, в настройках, указывается какие пользователи могут выполнять команды от sudo

# User privilege specification
root ALL=(ALL:ALL) ALL

Defaults env_reset #команда сбрасывает все переменные среды. Если нужен доступ к каким-то переменным среды, то их нужно указать здесь.

Defaults:%admin !env_reset # не сбрасывать переменные среды для группы admin
которая будет сохранять переменные окружения для всех пользователей группы admin, или:
Defaults:tvs env_keep=my_var1 #сохранить для пользователя tvs переменную var1
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL  #членам группы admin дать все права root

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL  #членам группы sudo дать разрешение выполнять любые команды

команды проверки конфигурации sudo

sudo -l

пример результатов работы этой команды:

tvs@TVS-Laptop:~$ sudo -l
Matching Defaults entries for tvs on this host:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User tvs may run the following commands on this host:
(ALL : ALL) ALL
(root) NOPASSWD: /home/tvs/scripting/test.sh
tvs@TVS-comp:~$

sudo -ll # показать полные данные по правам sudo для текущего пользователя

пример результатов работы этой команды:

tvs@comp:~$ sudo -ll

Matching Defaults entries for tvs on this host:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User tvs may run the following commands on this host:

Sudoers entry:
RunAsUsers: ALL
RunAsGroups: ALL
Commands:
ALL

Sudoers entry:
RunAsUsers: root
Commands:
NOPASSWD: /home/tvs/scripting/test.sh

sudo -lU user_name

пример результатов работы этой команды:

tvs@comp:~$ sudo -lU vova
User vova is not allowed to run sudo on TVS-comp.

редактирование файла настроек sudo напрямую

nano /etc/sudoers

#    /etc/sudoers файл настроек sudo.

команда visudo проверяет синтаксис этого файла и не дает его сохранить если в нем есть ошибки.

 

запуск нескольких команд через SSH

иногда нужно подключиться к Linux серверу и что-то выполнить, затем выйти. Например посмотреть квоты пользователей или нагрузку на процессор, но при этом не нужно, чтобы юзер что-то еще делал. Для этого могут служить следующие параметры SSH подключения:


$ ssh root@192.168.1.1 'uptime; df -h'

Узнать Memory Usage и Load Average

$ ssh root@192.168.1.1 ‘free -m | cat /proc/loadavg’

Показать Версию Ядра, информацию о CPU и кол-во RAM


$ ssh root@192.168.1.1 << EOF
uname -a
grep "model name" /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF

Выполнение Локального Скрипта на Удаленном Linux Сервере

 bash -s # говорит BASH при запуске, чтобы тот считывал данные со стандартного ввода (перенаправление или конвеер). 

$ ssh [user]@[server] ‘bash -s’ < [local_script]

Запустить Локальный Скрипт ‘local_script.sh’ на Удаленной Машине

$ ssh root@192.168.1.1 ‘bash -s’ < local_script.sh

Источник данных

bc — консольный калькулятор для конвеерных вычислений в Linux

bc — Basic Calculator

позволяет делать вычисления с C подобным синтаксисом в консоли Linux. Принимает выражение для вычисления с конвеера.

Может делать операции с плавающей запятой.

пример вычисления из размера диска в блоках его размера:

echo 303701360 /1024 | bc
результат работы команды:

296583   # 296 мегабайт

пример вычисления из размера диска в блоках его размера - результат будет с дробной частью (для чисел меньше ноля):
 -l — параметр который говорит bc выводить разультаты  с запятой (дробной частью) 

echo 303701360 /1024^2 | bc -l

результат работы команды:

289.63218688964843750000

 

 

cat Linux — команда просмотра и объединения файлов

просмотр файла в консоли

cat /var/log/syslog

просмотр файла в консоли с нумерацией его строк

вывести файл, поставив впереди каждой не пустой строки порядковый номер

cat -b /var/log/kdm.log
Результаты команды:

1 (EE) [mi] EQ overflowing. Additional events will be discarded until existing events are processed.
2 (EE)

3 (EE) Backtrace:
4 (EE)
5 (EE) Backtrace:

6 X.Org X Server 1.13.0
7 Release Date: 2012-09-05
8 X Protocol Version 11, Revision 0
9 Build Operating System: Linux 3.2.0-54-generic i686 Ubuntu
10 Current Operating System: Linux TVS-Laptop 3.5.0-47-generic #71-Ubuntu SMP Tue Feb 18 23:59:30 UTC 2014 i686
11 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.5.0-47-generic root=UUID=37c67962-d4d1-41f2-8f7e-6d89fad78900 ro quiet splash acpi_osi=Linux vt.handoff=7
12 Build Date: 05 November 2013 03:14:52PM
13 xorg-server 2:1.13.0-0ubuntu6.5 (For technical support please see http://www.ubuntu.com/support)
14 Current version of pixman: 0.30.2

просмотр файла в консоли с нумерацией всех (и пустых тоже) его строк

cat -n /var/log/kdm.log

Результаты команды:

1 (EE) [mi] EQ overflowing. Additional events will be discarded until existing events are processed.
2 (EE)
3 (EE) Backtrace:
4 (EE)
5 (EE) Backtrace:
6
7 X.Org X Server 1.13.0
8 Release Date: 2012-09-05

просмотр файла в консоли с нумерацией всех (и пустых тоже) его строк и вывод всех не печатаемых символов

отображение не печатных символов:

Опция -E показывает символы конца строки.

Опция -e показывает непечатаемые символы плюс символ конца строки

Опция -T показывает символ табуляции

Опция -t показывает непечатаемые символы плюс символ табуляции

Опция -v показывает непечатаемые символы кроме табуляции и конца строки.


cat -n -A -E -e -T -t -v /var/log/kdm.log

Результаты команды:

1 (EE) [mi] EQ overflowing. Additional events will be discarded until existing events are processed.$
2 (EE) $
3 (EE) Backtrace:$
4 (EE) $
5 (EE) Backtrace:$
6 $
7 X.Org X Server 1.13.0$
8 Release Date: 2012-09-05$
9 X Protocol Version 11, Revision 0$
10 Build Operating System: Linux 3.2.0-54-generic i686 Ubuntu$

объединение файлов командой cat

cat -n /var/log/kdm.log /var/log/kern.log

эта команда посылает на выдачу объединенный поток из перечисленных файлов (выдавая их один за другим)

Список полезных команд Linux

http://forum.ubuntu.ru/?topic=124998.0

http://howtoit.ru/linux/shell/item/43-linux-svobodnoe-mesto-na-diske.html

stat -c %o /dev/устройство - узнать размер блока файловой системы

Свободный и занятый объем диска в Linux

http://www.sbras.ru/win/docs/unix/awk/

http://linuxgeeks.ru/awk.htm

подстветка синтаксиса BASH в Nano Linux

У меня не работала подсветка синтаксиса BASH файлов. Оказалось не было  файла с описанием подсветки.

Это проверено на Ubuntu 12, но должно работать и на других сборках Linux

чтобы заработала подсветка синтаксиса необходимо в каталог /usr/share/nano/

скопировать файл файл подсветки синтаксиса BASH в Nano или этот bash.nanorc — файл подсветки синтаксиса BASH в Nano (зеркало)

вот его текст, взятый с https://github.com/serialhex/nano-highlight/blob/master/bash.nanorc

текст файла подсветки синтаксиса BASH в NANO

# Bash Syntax Highlighting
#
# Bram Schoenmakers <me@bramschoenmakers.nl>
#
# Version 1.1

syntax "bash" "\.sh$" "\.bash$"
header "^#!.*/(ba|k|pdk)?sh[-0-9_]*"

# Some Bash syntax first

# Control
color magenta "\<(if|else|for|function|case|esac|in|select|until|while|do|elif|then|set|\.|done|fi)\>"

# Brackets and redirects
color yellow "[(){}[;|<>]"
color yellow "\]"

# Builtins
color red "\<(source|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|suspend|test|times|trap|type|ulimit|umask|unalias|wait)\>"

# Unix Commands
color red "\<(arch|awk|bash|bunzip2|bzcat|bzcmp|bzdiff|bzegrep|bzfgrep|bzgrep|bzip2|bzip2recover|bzless|bzmore|cat|chattr|chgrp|chmod|chown|chvt|cp|date|dd|deallocvt|df|dir|dircolors|dmesg|dnsdomainname|domainname|du|dumpkeys|echo|ed|egrep|false|fgconsole|fgrep|fuser|gawk|getkeycodes|gocr|grep|groups|gunzip|gzexe|gzip|hostname|igawk|install|kbd_mode|kbdrate|killall|last|lastb|link|ln|loadkeys|loadunimap|login|ls|lsattr|lsmod|lsmod.old|mapscrn|mesg|mkdir|mkfifo|mknod|mktemp|more|mount|mv|nano|netstat|nisdomainname|openvt|pgawk|pidof|ping|ps|pstree|pwd|rbash|readlink|red|resizecons|rm|rmdir|run-parts|sash|sed|setfont|setkeycodes|setleds|setmetamode|setserial|sh|showkey|shred|sleep|ssed|stat|stty|su|sync|tar|tempfile|touch|true|umount|uname|unicode_start|unicode_stop|unlink|utmpdump|uuidgen|vdir|wall|wc|ypdomainname|zcat|zcmp|zdiff|zegrep|zfgrep|zforce|zgrep|zless|zmore|znew|zsh)\>"

# More Unix Commands
color red "\<(aclocal|aconnect|aplay|apm|apmsleep|apropos|ar|arecord|as|as86|autoconf|autoheader|automake|awk|basename|bc|bison|c\+\+|cal|cat|cc|cdda2wav|cdparanoia|cdrdao|cd-read|cdrecord|chfn|chgrp|chmod|chown|chroot|chsh|clear|cmp|co|col|comm|cp|cpio|cpp|cut|dc|dd|df|diff|diff3|dir|dircolors|directomatic|dirname|du|env|expr|fbset|file|find|flex|flex\+\+|fmt|free|ftp|funzip|fuser|g\+\+|gawk|gc|gcc|gdb|getent|getopt|gettext|gettextize|gimp|gimp-remote|gimptool|gmake|gs|head|hexdump|id|install|join|kill|killall|ld|ld86|ldd|less|lex|ln|locate|lockfile|logname|lp|lpr|ls|lynx|m4|make|man|mkdir|mknod|msgfmt|mv|namei|nasm|nawk|nice|nl|nm|nm86|nmap|nohup|nop|od|passwd|patch|pcregrep|pcretest|perl|perror|pidof|pr|printf|procmail|prune|ps2ascii|ps2epsi|ps2frag|ps2pdf|ps2ps|psbook|psmerge|psnup|psresize|psselect|pstops|rcs|rev|rm|scp|sed|seq|setterm|shred|size|size86|skill|slogin|snice|sort|sox|split|ssh|ssh-add|ssh-agent|ssh-keygen|ssh-keyscan|stat|strings|strip|sudo|suidperl|sum|tac|tail|tee|test|tr|uniq|unlink|unzip|updatedb|updmap|uptime|users|vmstat|w|wc|wget|whatis|whereis|which|who|whoami|write|xargs|yacc|yes|zip|zsoelim)\>"

# Strings
color blue "\"(\\.|[^\"])*\""
color blue "'(\\.|[^\'])*'"

# Variables, keep it below the strings, such that vars are highlighted inside strings.
color cyan start="[$@%]" end="([[:alnum:]]|_)*"

# Comments
color green "#.*$"

на CENTOS это почему-то не сработало. Тогда я использовал другое решение:

создал файл ~/.nanorc

в него добавил строку:

подсветка синтаксиса bash в CENTOS

include "/usr/share/nano/sh.nanorc"

обратите внимание перед include нет знака и файл подсветки синтаксиса называется sh.nanorc от включен в стандартную поставку ОС Centos Linux

как найти значение из одного файла (IP адрес) в другом файле (IP пробел имя пользователя)

BASH + AWK — поиск содержимого одного файла в другом и вывод значения рядом с ним

Это мне понадобилось, чтобы решить задачу смены пароля пользователя Samba через подключение Putty. При этом у меня есть файл содержащий соответствия IP адресов и логинов пользователей (у меня система такая: один компьютер — один пользователь).

<strong>cat '/home/tvs/scripting/15.txt' | while read LINE ; do awk "/^$LINE\ /{print \$2}" '/home/tvs/scripting/userip.txt'; done</strong>

разберем этот скрипт:

cat ‘/home/tvs/scripting/15.txt’ — вывести содержимое файла 15.txt

while read LINE ;    # в конвеере на вход команды BASH чтения строк из конвеера:

do # начало действий цикла BASH

awk «/^$LINE\ /{print \$2}» ‘/home/tvs/scripting/userip.txt’;

done # конец действий цикла BASH

/^ — ^ это спецсимвол, поэтому он экранируется с помощью символа /

$LINE — переменная куда была считана строка с помощью while read LINE (строка из файла /home/tvs/scripting/15.txt)

/{print \$2}» — вывод значения 2го столбца файла /home/tvs/scripting/userip.txt

/{ — экранирование спецсимвола {, чтобы сказать что это относится к AWK, а не BASH

\$2} — экранирование спецсимвола $2 (переменной AWK, содержащей значение 2го столбца (или другими словами 2е значение текущей в строке

например в файле с содержимым: 127.0.0.1     localhost

выведет localhost 

)

{} — в AWK действие, которое должно быть выполнено при нахождении нужного значения записывается в таких скобках, чтобы BASH не спутал их со своими вложенными запусками дочерних процессов в консоли эти скобки экранированны символами \

 

Таким образом этот файл выведет:

значение 2го столбца в файле /home/tvs/scripting/userip.txt, найденное в результате получения из файла /home/tvs/scripting/15.txt строки, содержащей IP адрес.

Причем, в файле /home/tvs/scripting/userip.txt будет найдена строка, совпадающая со значением IP адреса из  файла /home/tvs/scripting/15.txt

 

Детали по теме базовое обучение: awk синтаксис, Awk команды, Awk скрипты, BASH скрипты

\t — означает символ табуляции

[] — обозначение множества символов (в регулярных выражениях) AWK работает с регулярными выражениями в подстроках поиска [:digit:] — множество символов, написано, что является аналогом множества символов: [0-9]

^ — в регулярном выражении означает отрицание

Знак доллара — $ — в конце регулярного выражения соответствует концу строки.

«^$» соответствует пустой строке.

«[xyz]» — один из перечисленных символов x, y или z.

«[c-n]» один из символов в диапазоне от c до n, включительно.

«[B-Pk-y]» — один любойсимвол в диапазоне от B до P или в диапазоне от k до y, включительно.

«[a-z0-9]» — один из символов латиницы в нижнем регистре или цифра.

«[^b-d]» — любой символ, кроме символов из диапазона от b до d, включительно. В данном случае, метасимвол ^ означает отрицание.

Если объединить выражения в квадратных скобках в одну последовательность, можно задать необходимое для поиска выражение. Например, выражение «[Yy][Ee][Ss]» соответствует словам yes, Yes, YES, yEs и так далее. Выражение «[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]» определяет шаблон для поиска любого номера карточки социального страхования (для США).

 

 

Как сделать функцию в BASH

чтобы создать функцию в BASH нужно объявить ее, а затем использовать:

функции в BASH, Linux

function check_users_online()

{

# так начинается описание тела функции

echo «Есть юзеры»

} # так заканчивается описание тела функции

function check_users_online # указывается при вызове без скобок!

как сменить цвет текста в консоли Linux

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

как покрасить текст в консоли Linux

#Это комментарий.

#Ниже объявляются переменные консоли (BASH интерпретатор команд)

SETCOLOR_GREEN=»echo -en \\033[1;32m»

SETCOLOR_RED=»echo -en \\033[1;31m»

SETCOLOR_NORMAL=»echo -en \\033[0;39m»

#как использовать:

$SETCOLOR_GREEN

echo «Этот текст выводится зеленым цветом.»

$SETCOLOR_NORMAL

echo «Этот цвет будет выведен с обычной расцветкой»

Как очистить экран в консоли Linux

чтобы очистить экран в консоли linux наберите

Очистка экрана консоли Linux
clear

Bash Linux

http://www.k-max.name/linux/peremennye-intepretatora-bash/ — работа с переменными в Bash

unset my_var — удаление переменной в Bash

http://linuxgeeks.ru/bash-1.htm — Bash в примерах

http://habrahabr.ru/post/52871/ — циклы в Bash

http://eddnet.org/?p=1140 — запись в переменную результата работы скрипта и другие виды работ с переменными