[перевод] руководство по bash

задняя часть Командная строка Shell SSH
[перевод] руководство по bash

bash logo

содержание

  1. Основная операция
    1.1. файловые операции
    1.2. манипулирование текстом
    1.3. Операции с каталогами
    1.4. SSH, системная информация и сетевые операции
    1.5. Операция мониторинга процесса
  2. Базовое программирование оболочки
    2.1. Переменная
    2.2 множество
    2.3. замена строки
    2.4. функция
    2.5. Условные операторы
    2.6. оператор цикла
  3. Советы
  4. отладка

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

способствовать

  • сообщить о проблемеHow to
  • Отправить улучшенный мерж-реквестHow to
  • помогите распространить

Translation

License

License: CC BY 4.0