Это 10-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления
Введение
Shell это программа, написанная на языке C, которую использует пользовательLinux мост.Shell Это одновременно командный язык и язык программирования.Shell Относится к приложению, предоставляющему интерфейс, через который пользователи получают доступ к службам ядра операционной системы. в то же время,Bash также большинствоLinux системные установки по умолчаниюShell.
Основное использование
Способ исполнения исполняемого файла, обратите внимание на начало файла#!/bin/bash
перенаправление вывода
| символ | инструкция |
|---|---|
| Команда> файл | Сохраните правильный вывод команды в файле, перезаписав |
| команда >> файл | Добавить правильный вывод команды в файл |
| Команда 2> файл | Сохраните сообщение об ошибке, выводимое командой, в файл, перезаписав |
| Команда 2>> файл | Сохраните информацию об ошибке, выводимую командой, в файл в порядке добавления |
| команда &> файл | Сохраните всю информацию в одном файле, перезаписав |
| команда &>> файл | Добавить всю информацию в один файл |
| Команда > Файл 2>&1 | Сохраните всю информацию в одном файле, перезаписав |
| команда >> файл 2>&1 | Добавить всю информацию в один файл |
| команда >> файл1 2 >> файл2 | Добавить правильную информацию в файл 1 и информацию об ошибках в файл 2 |
ll > file 把ll命令正确的输出结果保存在file文件中
ll >> file 把ll命令正确的输出结果追加在file文件的最后
ll &>> file 把ll命令执行的所有结果追加在file文件的最后
ll &>> /dev/null 把ll命令的结果都舍弃 /dev/null相当于一个黑洞
перенаправление ввода
Подсчитайте количество символов в файле, то есть количество строк, слов и байтов.
wc < file
Выполнять несколько команд последовательно
| Формат | инструкция |
|---|---|
| команда 1 команда 2 | Несколько команд выполняются последовательно, и между командами нет корреляции |
| Команда1 && Команда2 | Команда 1 выполнена правильно, команда 2 будет выполнена |
| Command1 || Command2. | Команда 1 выполнена неправильно, команда 2 будет выполнена |
| Команда 1 | Команда 2 | Корректное выполнение команды 1 как объекта операции команды 2 |
cd / ; ll #进入根路径再执行ll
make && make install #只有make正确执行,才会执行make install
cd /test || echo 'not find'
ll | grep test
Общие символы
| подстановочный знак | инструкция |
|---|---|
| ? | соответствует произвольному символу |
| * | соответствовать чему угодно |
| [] | Соответствует любому символу в скобках Например: [a, b], соответствует одному из символов a или b |
| [-] | Совпадение с символом в диапазоне Например: [a-z], совпадение с одним из символов от a до z |
| [^] | Совпадение с символом без квадратных скобок Например: [^0-9], совпадение с символом, отличным от 0 до 9 |
rm -rf /* 删除所有文件 跑路必备
find -name *.rc?
| символ | инструкция |
|---|---|
| ' ' | Специальные символы в одинарных кавычках в одинарных кавычках особого значения не имеют |
| " " | Двойные кавычки Специальные символы в двойных кавычках имеют особое значение |
| `` | Обратные кавычки используются для выполнения системных команд. |
| $() | Также используется для выполнения системных команд |
| $ | переменная вызова |
| # | Примечания |
| \ | escape-символ |
x=1
echo '$x' 没有特殊意义
#$x
echo "$x" 拥有特殊意义
#1
time = `date` 执行系统命令
time = $(date) 同样是执行系统命令
echo time 输出对应时间
Чтение считывает значение, введенное с клавиатуры.
commad Command Считывает значение переменной с клавиатуры, а затем сохраняется в указанной переменной, часто используется в сценариях оболочки для взаимодействия с пользователем по случаю.
| опции | инструкция |
|---|---|
| -p | Задает текст подсказки при чтении значения |
| -t | Указывает время (в секундах) ожидания при чтении значения |
| -n | Установите количество символов для ввода |
| -s | Скрытая входная информация |
#!/bin/bash
read -p "输入密码:" -s pwd
echo $pwd
Числовые операции
можно использовать$(())или$[]выполнять числовые операции
sum=$(($1+$2))
sum=$[$1+$2]
замена переменной
| замена переменной | переменная у не задана | Переменная Y пустая | переменная y заданное значение |
|---|---|---|---|
| x=${y-новое значение} | х = новое значение | х пуст | x=$y |
| х=${у:-новое значение} | х = новое значение | х = новое значение | x=$y |
| х=${у+новое значение} | х пуст | х = новое значение | х = новое значение |
| х=${у:+новое значение} | х пуст | х пуст | х = новое значение |
| х=${у=новое значение} | х = новое значение | х пуст | x=$y |
| у = новое значение | у значение не меняется | Значение у не меняется | |
| х = $ {у: = новое значение} | х = новое значение | Х= новое значение | x=$y |
| у = новое значение | у = новое значение | Значение у не меняется | |
| х=${у? новое значение} | Новое значение выводится в stderr (экран) | х пуст | x=$y |
| х=${у:?новое значение} | Новое значение выводится в stderr | Новое значение выводится в stderr | x=$y |
Переменная
переменная по умолчанию
| Переменная | значение |
|---|---|
| $0 | текущее имя скрипта |
| $1 | Первый параметр, полученный скриптом |
| $2 | Второй параметр, полученный скриптом |
| $# | Количество всех параметров, полученных скриптом |
| $@ | Все параметры, полученные скриптом |
| $* | Все параметры скрипта получили все переменные целиком |
| $? | Статус выполнения предыдущей командной строки |
| $$ | Отображает идентификатор текущего процесса |
| $! | Отображение последнего номера процесса в фоновом режиме |
bash test.sh a b c d #bash执行文件
$0 ==> default_var.sh
$1 ==> a
$2 ==> b
$# ==> 4
$@ ==> a b c d
$* ==> a b c d
$? ==> 0 #0代表正常执行
локальная переменная
Локальные переменные определяются в сценариях или командах и действуют только в текущем экземпляре оболочки.Программы, запущенные другими оболочками, не могут получить доступ к локальным переменным. Переменная вызова должна быть добавлена с символом $.Обратите внимание, что вокруг знака равенства не может быть пробелов.
x=1
readonly x 定义只读变量
echo $x #1
set 查看所有变量
unset 删除变量
переменная среды
все программы, включаяshellЗапущенные программы могут обращаться к переменным среды, а некоторым программам требуются переменные среды для обеспечения их нормальной работы. когда необходимоshellСценарии также могут определять переменные среды. Как правило, переменные окружения пишутся с заглавной буквы, чтобы их было легко различить. переменные среды, такие какPATH,HOMEЖдать. обычно в/etc/profile, вам нужно использовать его после установкиsource /etc/profileПеременные среды, которые должны вступить в силу
export NAME=test 定义环境变量
env 查看环境变量
echo $PATH 查看环境变量
echo $HOME
declare объявляет тип переменной
| опции | инструкция |
|---|---|
| - | Свойства, которые можно использовать для указания переменных |
| + | Отменить свойство, заданное переменной |
| -i | установить переменную в целое число |
| -x | Указанная переменная станет переменной среды и может использоваться программами, отличными от оболочки. |
| -p | Отображает объявленный тип указанной переменной |
declare - i sum=$1+$2
Базовая грамматика
эхо-вывод на печать
echo test 直接打印出test
echo test > file 将打印内容写入文件
печать в формате printf
| суррогат формата | инструкция |
|---|---|
| %ns | N выходная строка |
| %ni | вывести n чисел |
| %m.nf | Выходное число с плавающей запятой Указывает количество целых цифр и десятичных цифр вывода.Например, %8.2f означает, что всего выводится 8 цифр, из которых 2 цифры являются десятичными и 6 цифр являются целыми числами. |
| последовательность | инструкция |
|---|---|
| \a | подать предупреждающий сигнал |
| \b | назад |
| \f | подача страницы |
| \n | новая линия |
| \r | Возврат каретки |
| \t | горизонтальная вкладка |
| \v | вертикальная вкладка |
printf %s abcdef
#abcdef
printf "%s %s %s\n" a b c d e f g h i j
#a b c
#d e f
Отрежьте колонну извлечения
| опции | инструкция |
|---|---|
| -f | Обрезать указанный столбец |
| -d | -d: указывает разделитель полей, разделитель полей по умолчанию — «TAB»; |
cut -d ':' -f 1 /etc/passwd #以:为分隔截取第一列
оценка условий испытаний
| опции | инструкция |
|---|---|
| -e | Проверьте, существует ли файл |
| -d | Если файл является каталогом, правда |
| -f | true, если файл является обычным файлом |
| -L | Определить, существует ли файл и должен ли он быть связанным файлом |
| -z | Проверить, пуста ли переменная |
| -a | множественные суждения |
| -r | Проверить, есть ли у файла разрешение на чтение |
| -w | Судействуя, имеет ли файл разрешение на запись |
| -x | Определить, есть ли у файла разрешение на выполнение |
test -f file #判断文件是否为普通文件
[ -f file ] #另一种写法
echo $? #查看上一条命令执行状态,0为正常执行
[ -f file ] && echo "文件存在" || echo "文件不存在"
[ -z "$name" ] && echo "变量为空" || echo "变量不为空"
[ "$x" == "$y"] && echo "两个变量相等" || echo "两个变量不相等"
[ -f file -a -w file ] #判断是否为普通文件并且是否具有写权限
Контроль процесса
если суждение
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
exit 1 #设置程序出口,停止执行下面语句
fi
#另一种写法
if [ $a == $b ]; then
fi
случай множественный выбор решение
read -p "请输入数字" Num
case $Num in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
для петли
遍历数字
for num in 1 2 3
do
echo "The value is: $num"
done
遍历字符串
for str in 'This is a string'
do
echo $str
done
打印根目录所有文件
ls / > /root/file.log
for i in $(cat file.log)
do
echo $i
done
常规for循环
for ((i=0;i<10;i=i+1))
do
echo $i
done
пока цикл
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
до цикла
until Выполняйте серию команд до тех пор, пока не будет выполнено условие.true останавливаться.
untilпетля сwhileЦиклы обрабатываются прямо противоположным образом.
int=1
until(( $int>=5 ))
do
echo $int
let "int++"
done
Рекомендуемое чтение
Linux sudo и sudoers подробно!
Настройка и настройка параметров ядра Linux TCP (подробно)!
Эксплуатация и обслуживание должны знать Linux RAID Detailed!
Управление службами Linux (подробно)!
Платформа проникновения Metasploit, которую должен знать каждый специалист по сетевой безопасности!
Основы проникновения — использование общих модулей Metasploit