содержание
-
Основная операция
1.1. файловые операции
1.2. манипулирование текстом
1.3. Операции с каталогами
1.4. SSH, системная информация и сетевые операции
1.5. Операция мониторинга процесса -
Базовое программирование оболочки
2.1. Переменная
2.2 множество
2.3. замена строки
2.4. функция
2.5. Условные операторы
2.6. оператор цикла - Советы
- отладка
a.
export
Вывести все переменные окружения. Если вы хотите увидеть значение определенной переменной, используйтеecho $VARIABLE_NAME
export
Example:
$ export
AWS_HOME=/Users/adnanadnan/.aws
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LESS=-R
$ echo $AWS_HOME
/Users/adnanadnan/.aws
b.
whatis
whatis Отображает документацию, описывающую пользовательскую команду, системный вызов или библиотечную функцию, или другую документацию, существующую в руководстве.
whatis something
Example:
$ whatis bash
bash (1) - GNU Bourne-Again SHell
c.
whereis
гдеис находит расположение исполняемых файлов, исходных файлов или документации, используя автоматически созданную базу данных.
whereis name
Example:
$ whereis php
/usr/bin/php
d.
which
который ищет расположение исполняемого файла во всех папках, указанных в переменной среды PATH. Он распечатает абсолютный путь к исполняемому файлу.
which program_name
Example:
$ which php
/c/xampp/php/php
e. clear
Очистите содержимое окна.
1.1. File Operations
cat | chmod | chown | cp | diff | file | find | gunzip | gzcat | gzip | head |
lpq | lpr | lprm | ls | more | mv | rm | tail | touch |
a.
cat
В UNIX и Linux он используется следующим образом.
- вывести текстовый файл на экран
- скопировать текстовый файл
- Объединить текстовые файлы
- Создать новый текстовый файл
cat filename
cat file1 file2
cat file1 file2 > newcombinedfile
cat < file1 > file2 #copy file1 to file2
b.
chmod
chmod
даchange mod
означает, что он используется для изменения прав на чтение, запись и выполнение файла или папки. Подробнее см.эта ссылка
chmod -options filename
c.
chown
chown
даchange owner
Означает, что он используется для смены владельца файла или папки, владельцем может быть пользователь или группа пользователей.
chown -options user:group filename
d.
cp
Скопируйте файл из одного места в другое
cp filename1 filename2
вышеfilename1
расположение исходного файла,filename2
является целевым местоположением (точное имя файла).
e.
diff
Сравните два файла и выведите их различия.
diff filename1 filename2
f.
file
Определить тип файла
file filename
Example:
$ file index.html
index.html: HTML document, ASCII text
g.
find
Найти файлы в папке с определенными правилами
find directory options pattern
Example:
$ find . -name README.md
$ find /home/user1 -name '*.png'
h.
gunzip
Распаковать файлы, сжатые методом gzip
gunzip filename
i.
gzcat
Просмотр сжатых файлов без распаковки
gzcat filename
j.
gzip
Сжатый файл
gzip filename
k.
head
Первые 10 строк выходного файла
head filename
l.
lpq
список выходных принтеров
lpq
Example:
$ lpq
Rank Owner Job File(s) Total Size
active adnanad 59 demo 399360 bytes
1st adnanad 60 (stdin) 0 bytes
m.
lpr
распечатать файл
lpr filename
n.
lprm
Удаление задания из очереди заданий принтера
lprm jobnumber
o.
ls
Список всех файлов в текущей папке.ls
Есть много вариантов:-l
Список файлов в подробном формате с подробными сведениями, включая фактический размер файла, владельца файла, который может его просматривать, и время последнего изменения.-a
Список всех файлов, включая скрытые файлы. Для получения дополнительной информации см.эта ссылка
ls option
Example:
$ ls -la
rwxr-xr-x 33 adnan staff 1122 Mar 27 18:44 .
drwxrwxrwx 60 adnan staff 2040 Mar 21 15:06 ..
-rw-r--r--@ 1 adnan staff 14340 Mar 23 15:05 .DS_Store
-rw-r--r-- 1 adnan staff 157 Mar 25 18:08 .bumpversion.cfg
-rw-r--r-- 1 adnan staff 6515 Mar 25 18:08 .config.ini
-rw-r--r-- 1 adnan staff 5805 Mar 27 18:44 .config.override.ini
drwxr-xr-x 17 adnan staff 578 Mar 27 23:36 .git
-rwxr-xr-x 1 adnan staff 2702 Mar 25 18:08 .gitignore
p.
more
Вывести первую часть файла (перемещение с пробелами, нажмите q для выхода)
more filename
q.
mv
переместить файл из одного места в другое
mv filename1 filename2
вышеfilename1
это путь к исходному файлу,filename2
является целевым путем. (все с точностью до имени файла)
Его также можно использовать для переименования файлов.
mv old_name new_name
r.
rm
удалить файлrm: directory: is a directory
Если вы хотите удалить папку, вам нужно добавитьr
параметр, это рекурсивно удалит все содержимое в папке. можно использоватьf
Параметр принудительно удаляется, а ссылка подтверждения пропускается.
rm filename
s.
tail
Последние 10 строк выходного файла. Добавить к-f
Недавно добавленный текст файла может быть выведен динамически.
tail filename
t.
touch
Обновите временные метки доступа и изменения файла. Если файл не существует, он будет создан.
touch filename
Example:
$ touch trick.md
1.2. манипулирование текстом
awk | cut | echo | egrep | fgrep | fmt | grep | nl | sed | sort |
tr | uniq | wc |
a.
awk
awk — самая полезная команда для работы с текстом. Он обрабатывает весь файл построчно и по умолчанию разделяет каждую строку на множество полей с пробелами. Наиболее распространенный синтаксис:
awk '/search_pattern/ { action_to_take_if_pattern_matches; }' file_to_parse
от/etc/passwd
Например, файл содержит следующие данные:
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
скопировать код
Мы хотим отфильтровать часть имени пользователя каждой строки из этого файла.-F
Параметр используется для указания разделителя, используемого для разделения встроенного содержимого. В этом примере мы используем:
разделять.{ print $1 }
Означает первое соответствующее поле в строке вывода.
awk -F':' '{ print $1 }' /etc/passwd
После выполнения вышеуказанной команды вы получите следующий вывод.
root
daemon
bin
sys
sync
скопировать код
Подробнее см.эта ссылка
b.
cut
Извлечь текст из файла построчно и вывести
example.txt
red riding hood went to the park to play
Разделите каждую строку пробелом и выведите столбцы 2, 7, 9.
cut -d " " -f2,7,9 example.txt
riding park play
c.
echo
выводить текст после команды на стандартный вывод или в файл
вывод "Привет мир"
echo Hello World
Hello World
Вывод «Hello World» с новой строкой между словами
echo -ne "Hello\nWorld\n"
Hello
World
d.
egrep
Строки в выходном файле, соответствующие указанному шаблону, являются расширенными шаблонами команды grep, поддерживающими больше регулярных выражений (эквивалентноgrep -E
).
example.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
Выходные строки, содержащие Lorem или dolor
egrep '(Lorem|dolor)' example.txt
or
grep -E '(Lorem|dolor)' example.txt
Lorem ipsum
dolor sit amet,
et dolore magna
duo dolores et ea
sanctus est Lorem
ipsum dolor sit
e.
fgrep
Строки в выходном файле, содержащие заданную строку, заданный шаблон, будут считаться не обычной, а строкой. (эквивалентно:grep -F
)
example.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
foo (Lorem|dolor)
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
- Вывод содержит строку в example.txt
(Lorem|dolor)
все строки *
fgrep '(Lorem|dolor)' example.txt
or
grep -F '(Lorem|dolor)' example.txt
foo (Lorem|dolor)
f.
fmt
Простой инструмент форматирования текста
пример: example.txt (1 строка)
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Отформатируйте example.txt шириной 20 символов.
cat example.txt | fmt -w 20
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
g.
grep
Найти текст в файле. Вы можете использовать grep для поиска строк текста, соответствующих одному или нескольким регулярным выражениям, и распечатать эти строки.
grep pattern filename
Example:
$ grep admin /etc/passwd
_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false
_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false
_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/false
Вы также можете пройти-i
Аргументы вынуждают игнорировать регистр. параметр-r
используется для рекурсивного поиска всех файлов в указанной папке, например:
$ grep -r admin /etc/
параметр-w
Указывает, что нужно искать только слова. оgrep
Для получения дополнительной информации см.эта ссылка
h.
nl
Добавить номера строк в файл и вывести
example.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
Добавьте номера строк к содержимому в example.txt и выведите
nl -s". " example.txt
1. Lorem ipsum
2. dolor sit amet,
3. consetetur
4. sadipscing elitr,
5. sed diam nonumy
6. eirmod tempor
7. invidunt ut labore
8. et dolore magna
9. aliquyam erat, sed
10. diam voluptua. At
11. vero eos et
12. accusam et justo
13. duo dolores et ea
14. rebum. Stet clita
15. kasd gubergren,
16. no sea takimata
17. sanctus est Lorem
18. ipsum dolor sit
19. amet.
i.
sed
Команды потокового редактирования для фильтрации и замены текста
example.txt
Hello This is a Test 1 2 3 4
Замените все пробелы в example.txt дефисами и выведите
sed 's/ /-/g' example.txt
Hello-This-is-a-Test-1-2-3-4
заменить все цифры на "д"
sed 's/[0-9]/d/g' example.txt
Hello This is a Test d d d d
j.
sort
Сортировка строк в файле
example.txt
f
b
c
g
a
e
d
Сортировка строк в example.txt
sort example.txt
a
b
c
d
e
f
g
Случайным образом перемешать уже отсортированный файл example.txt(проблема с тестом) // todo
sort example.txt | sort -R
b
f
a
c
d
g
e
k.
tr
Преобразование или удаление символов
example.txt
Hello World Foo Bar Baz!
Преобразование всех строчных букв в прописные
cat example.txt | tr 'a-z' 'A-Z'
HELLO WORLD FOO BAR BAZ!
Преобразовать все пробелы в новые строки
cat example.txt | tr ' ' '\n'
Hello
World
Foo
Bar
Baz!
l.
uniq
Подсчитайте или обрежьте повторяющиеся строки
example.txt
a
a
b
a
b
c
d
c
Выведите все уникальные строки в example.txt (нужно сначала отсортировать, иначе строки в середине одной строки будут проигнорированы)
sort example.txt | uniq
a
b
c
d
Вывести все строки после дедупликации и отобразить количество повторений каждой строки в исходном файле в уникальной строке
sort example.txt | uniq -c
3 a
2 b
2 c
1 d
m.
wc
Количество строк, слов и символов в выходном файле.
wc filename
Example:
$ wc demo.txt
7459 15915 398400 demo.txt
demo.txt имеет7459
Ряд,15915
слова и398400
символы.
1.3. Directory Operations
cd | mkdir | pwd |
a.
cd
Введите каталог файлов и выполните:
$ cd
войдетhome
содержание. Эта команда принимает необязательный параметр имени каталога, указывающий каталог для входа.
cd dirname
b.
mkdir
Создать новую папку
mkdir dirname
c.
pwd
Отображает каталог файлов (абсолютный путь), в котором находится в данный момент
pwd
1.4. SSH, System Info & Network Operations
bg | cal | date | df | dig | du | fg | finger | jobs | last |
man | passwd | ping | ps | quota | scp | ssh | top | uname | uptime |
w | wget | whoami | whois |
a.
bg
Список всех остановленных или фоновых задач или фоновый режим остановленной задачи.
b.
cal
Вывод календаря текущего месяца
c.
date
вывести текущую дату и время
d.
df
выводить статистику использования диска
e.
dig
Вывод информации DNS для доменного имени
dig domain
f.
du
Вывод использования жесткого диска определенными файлами или каталогами. Подробнее см.эта ссылка
du [option] [filename|directory]
Options:
-
-h
(Человекочитаемый) Выведите результат в КБ, МБ, ГБ. -
-s
(Сводка по сжатию) Выводит общее использование дискового пространства каталогом и резюмирует вывод отчета о подкаталоге.
Example:
du -sh pictures
1.4M pictures
g.
fg
Вывод последних запущенных задач на передний план
h.
finger
вывод информации о пользователе
finger username
i.
jobs
Список задач, работающих в фоновом режиме, с указанием номера задачи
j.
last
Список записей входа для определенного пользователя
last yourUsername
k.
man
Вывести руководство для конкретной команды
man command
l.
passwd
Разрешить вошедшему в систему пользователю изменить свой пароль
m.
ping
пинговать хост и выводить результат
ping host
n.
ps
Список всех процессов пользователя
ps -u yourusername
o.
quota
Отображение использования диска и квот
quota -v
p.
scp
Передача файлов между локальным хостом и удаленным хостом или между двумя удаленными хостами
Скопируйте файлы с локального хоста на удаленный хост
scp source_file user@host:directory/target_file
Скопируйте файлы с удаленного хоста на локальный хост
scp user@host:directory/source_file target_file
scp -r user@host:directory/source_folder target_folder
Эта команда также принимает аргумент-P
, используется для подключения к указанному порту
scp -P port user@host:directory/source_file target_file
q.
ssh
ssh (клиент SSH) — это программа, используемая для входа на удаленный хост и выполнения команд.
ssh user@host
This command also accepts an option -p
that can be used to connect to specific port.
ssh -p port user@host
r.
top
Динамически отображать все активные процессы
s.
uname
вывод информации о ядре
uname -a
t.
uptime
Выведите, как долго работает сервер и сколько пользователей вошли в систему.
u.
w
Система вывода онлайн пользователей
v.
wget
Загрузка файла
wget file
w.
whoami
Распечатать имя пользователя, вошедшего в систему в данный момент
x.
whois
Получить whois информацию о доменном имени
whois domain
1.5. Process Monitoring Operations
kill | killall | & | nohup |
a.
kill
Завершает процесс, представленный указанным PID
kill PID
b.
killall
завершить все процессы, представленные именем
killall processname
c. &
сделать&
Предыдущая команда выполнялась в подоболочке как фоновый процесс.
command &
d.
nohup
представитель nohupNo Hang Up
, то есть не виснет. Эта команда позволяет другим командам, процессам или сценариям оболочки продолжать работу в фоновом режиме после выхода из оболочки.
nohup command
положить его и&
Может использоваться в комбинации для создания фоновых процессов
nohup command &
2. Basic Shell Programming
Первая строка в файле сценария bash называетсяshebang
. Эта строка определяет, что скрипт может выполняться как отдельный исполняемый файл, не вводя его перед терминалом.sh
,bash
,python
,php
Ждать.
#!/bin/bash
2.1. Variables
Создание переменных в bash аналогично другим языкам. Без типов переменных переменные в bash могут содержать число, символ, строку и т. д. В то же время нет необходимости объявлять переменную заранее, а присвоение значения переменной создаст переменную напрямую.
Example:
str="hello world"
Строка выше создает переменнуюstr
Затем назначьте ему «hello world». добавив перед именем переменной$
Symbol, вы можете получить значение, хранящееся в переменной.
Example:
echo $str # hello world
2.2. Array
Как и в других языках, в bash есть типы массивов. Массив в bash — это переменная, содержащая множество значений, длина массива не ограничена, индекс начинается с 0. Есть несколько способов создать массив в bash, как показано ниже.
Examples:
array[0] = val
array[1] = val
array[2] = val
array=([2]=val [0]=val [1]=val)
array=(val val val)
Используйте следующий синтаксис, чтобы получить значение в определенной позиции в массиве:
${array[i]} # i是数组下标
Если индекс массива не указан, по умолчанию возвращается первый элемент. Чтобы узнать, сколько элементов в массиве, используйте следующий синтаксис:
${#array[@]}
Bash также поддерживает тернарный оператор, как показано в следующем примере:
${varname:-word} # 如果 varname 存在而且不为 null,返回它的值,否则返回 word
${varname:=word} # 如果 varname 存在而且不为 null,返回它的值,否则把word赋值给它并且返回 word
${varname:+word} # 如果 varname 存在而且不为 null,返回 word,否则返回 null
${varname:offset:length} # 它返回 $varname 的子字符串,从 offset 处开始,长度为 length
2.3 String Substitution
Используйте следующий синтаксис, чтобы изучить операции, связанные со строками
${variable#pattern} # 如果 pattern 匹配变量值的起始部分,删除匹配 pattern 的最短的部分,然后返回剩余的
${variable##pattern} # 如果 pattern 匹配变量值的起始部分,删除匹配 pattern 的最长的部分,然后返回剩余的
${variable%pattern} # 如果 pattern 匹配变量值的结束部分,删除匹配 pattern 的最短的部分,然后返回剩余的
${variable%%pattern} # 如果 pattern 匹配变量值的结束部分,删除匹配 pattern 的最长的部分,然后返回剩余的
${variable/pattern/string} # 把变量值中匹配 pattern 的最长的部分替换为 string,只替换第一个匹配的部分
${variable//pattern/string} # 把变量值中匹配 pattern 的最长的部分替换为 string,全局进行替换
${#varname} # 返回变量值作为一个字符串的长度
2.4. Functions
Как и почти в любом языке программирования, вы можете использовать функции для более логического группирования фрагментов кода или практиковать божественное искусство рекурсии.Объявление функции — это просто вопрос написания.Вызов функции
это то же самое, что и вызов другой программы, вы просто пишете ее имя.Как и в других языках программирования, вы можете использовать функции для агрегирования кода более логичным способом или для реализации священного искусства рекурсии. Чтобы объявить функцию, просто напишитеfunction my_func { my_code }
, вызов функции аналогичен вызову другой программы с использованием имени метода.
function name() {
shell commands
}
Example:
#!/bin/bash
function hello {
echo world!
}
hello
function say {
echo $1
}
say "hello world!"
Когда вы запускаете метод hello в приведенном выше примере, он выводит «world!». Два метода вышеhello
иsay
точно так же,say
С некоторыми отличиями этот метод выводит первый полученный аргумент. Параметры в методе обрабатываются так же, как и в языке сценариев.
2.5. Conditionals
Условные операторы в bash аналогичны другим языкам программирования. Условные операторы бывают разных форм, например, самая распространенная базовая форма:if
выражениеthen
оператор, который представляет оператор, который выполняет ответ, если выражение истинно.
if [expression]; then
will execute only if expression is true
else
will execute if expression is false
fi
Иногда, если условный оператор становится слишком сложным, вы можете использоватьcase statements
выполнить ту же функцию условного суждения.
case expression in
pattern1 )
statements ;;
pattern2 )
statements ;;
...
esac
Expression Examples:
statement1 && statement2 # 两个语句都为真
statement1 || statement2 # 至少一个语句为真
str1=str2 # str1 匹配 str2
str1!=str2 # str1 不匹配 str2
str1<str2 # str1 小于 str2
str1>str2 # str1 大于 str2
-n str1 # str1 不是 null (长度大于 0)
-z str1 # str1 是 null (长度为 0)
-a file # 文件存在
-d file # 文件存在而且是目录
-e file # 文件存在,跟 -a 一样
-f file # 文件存在,而且是常规文件(不是目录或者其他特殊类型的文件)
-r file # 你有读权限
-s file # 文件存在而且不为空
-w file # 你有写权限
-x file # 你对文件有执行权限,如果 file 是目录的话,你对它有搜索权限
-N file # 从上次读之后文件被修改过
-O file # 你是文件所有者
-G file # 文件的 group ID 跟你的 group ID (或之一,如果你在很多分组里)相同
file1 -nt file2 # file1 比 file2 更新
file1 -ot file2 # file1 比 file2 更老
-lt # 小于
-le # 小于等于
-eq # 等于
-ge # 大于等于
-gt # 大于
-ne # 不等于
2.6. Loops
В bash есть три типа циклов.for
, while
иuntil
.
разныеfor
грамматика:
for x := 1 to 10 do
begin
statements
end
for name [in list]
do
statements that can use $name
done
for (( initialisation ; ending condition ; update ))
do
statements...
done
while
грамматика:
while condition; do
statements
done
until
грамматика:
until condition; do
statements
done
3. Tricks
установить псевдоним
воплощать в жизньnano ~/.bash_profile
открытьbash_profile
.
alias dockerlogin='ssh www-data@adnan.local-p2222' # установить псевдоним в .bash_profile
Быстрый доступ к каталогу
nano ~/.bashrc
export hotellogs="/workspace/hotel-api/storage/logs"
source ~/.bashrc
cd $hotellogs
из ловушки
Сделайте ваши сценарии более надежными, выполнив операторы очистки.
function finish {
# 在这里执行清理语句,例如,杀掉所有 fork 的进程。
jobs -p | xargs kill
}
trap finish EXIT
сохранить переменные окружения
когда вы выполняете в оболочкеexport FOO = BAR
, Переменная среды существует только в текущей оболочке и ее подоболочках.Если вы хотите постоянно использовать эту переменную среды в будущем, вам нужно только~/.bash_profile
Просто добавьте команду для выполнения после файла.
echo export FOO=BAR >> ~/.bash_profile
получить доступ к вашему сценарию
Вы можете легко получить доступ к своим сценариям, создав папку bin в своем домашнем каталоге,mkdir ~/bin
После этого все скрипты в каталоге bin могут быть доступны в любом другом каталоге.
Если он по-прежнему недоступен, добавьте следующий код в~/.bash_profile
файл, затем выполнитьsource ~/.bash_profile
.
# 如果用户的私有 bin 目录存在的话,把它添加到 PATH 变量中
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
4. отладка
Вы можете легко передавать различные параметры вbash
команда для отладки скрипта. Например,-n
Будет только проверять скрипт на наличие синтаксических ошибок, но не выполнять скрипт.-v
выведет их до того, как команда будет выполнена.-x
Выведет команду после обработки командной строки.
bash -n scriptname
bash -v scriptname
bash -x scriptname