Это 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