{"id":13711994,"url":"https://github.com/cyberspacedk/BASH-Commands","last_synced_at":"2025-05-06T21:32:52.694Z","repository":{"id":119509677,"uuid":"158014889","full_name":"cyberspacedk/BASH-Commands","owner":"cyberspacedk","description":"Шпаргалка основных команд Git Bash, терминала OSX, терминала linux.","archived":false,"fork":false,"pushed_at":"2022-03-16T11:27:29.000Z","size":26,"stargazers_count":178,"open_issues_count":0,"forks_count":82,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-22T11:00:47.352Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cyberspacedk.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-17T18:52:43.000Z","updated_at":"2025-01-22T09:57:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"3dfbe4b3-ab60-4e87-ba6e-ffa44619e086","html_url":"https://github.com/cyberspacedk/BASH-Commands","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacedk%2FBASH-Commands","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacedk%2FBASH-Commands/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacedk%2FBASH-Commands/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacedk%2FBASH-Commands/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cyberspacedk","download_url":"https://codeload.github.com/cyberspacedk/BASH-Commands/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252772245,"owners_count":21801886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T23:01:13.806Z","updated_at":"2025-05-06T21:32:52.424Z","avatar_url":"https://github.com/cyberspacedk.png","language":"Shell","funding_links":[],"categories":["Programming and Scripting"],"sub_categories":["Bash"],"readme":"# Шпаргалка по bash \n\n### Добавляйте свои команды и остальные полезности через `Pull request`.\n\nШпаргалка основных команд Git Bash, терминала OSX, терминала linux. \n\n## Суть\n\nКонсоль — удобный и быстрый инструмент управления компьютером. Вводим команду текстом, получаем результат или сообщение об ошибке с указанием в чём ошибка.\n\nРаботая с консолью, мы всегда «находимся» в какой-то папке (это указано в строке над курсором). Если там написано `~`, то мы в папке пользователя (зависит от настроек Windows, чаще всего это `C:/Users/ВАШЕИМЯПОЛЬЗОВАТЕЛЯ/`), если там `/d/projects`, мы в папке `D:/projects`.\n\n## Файловая система\n\n### Просмотр содержимого папки\n\n```bash\npwd                     # выводит текущи путь (сокращение от PRINT WORK DIRECTORY)\nls                      # показать содержимое папки\nls -l                   # отображает расширенную информацию о файлах и папках\nls -a                   # то же, но показывать и скрытые файлы и папки\nls -a -1                # то же, но в один столбец\nls -hF -1 --sort=extension # показать содержимое папки «красиво, в один столбец»\nls build/css            # показать содержимое папки ТЕКУЩАЯ_ПАПКА/build/css\nls /d/projects          # показать содержимое папки D:/projects\n```\n\n### Перемещение по файловой системе \n\nПользователь всегда находится в какой-то папке, она (или полный путь) всегда показана до области ввода команд. \n\n```bash\n\ncd projects             # переход в папку projects, которая есть текущей папке\ncd /d/projects          # windows: переход в папку projects, расположенную по адресу D:/projects \ncd /c/Program\\ Files    # windows: переход в C/:Program Files \ncd .                    # текущая директория\ncd ..                   # переход к родительской папке \ncd ~                    # домашняя директория\ncd -                    # переход к последней рабочей папке\n```\n\nЧтобы не набирать имя папки целиком, наберите первые пару символов и нажмите \u003ckbd\u003eTab\u003c/kbd\u003e — произойдет автодополнение (если нет двух папок, начинающихся с введенных символов, иначе будут показаны сами эти папки). Справедливо для любой команды.\n\n### Создание папок и файлов\n\n```bash\nmkdir project                        # создать папку с именем «project»\nmkdir project project/css project/js # создать несколько папок\nmkdir -p project/{css,js}            # то же, что выше\n\ntouch index.html                     # создать файл\ntouch index.html css/style.css js/script.js # создать файлы (папки css/ и js/ должны уже существовать)\n```\n\n### Копирование файлов\n\n```bash\ncp index.html catalog.html # копирование файла index.html в тот же каталог с переименованием в catalog.html\ncp index.html old/         # копирование файла index.html в папку old/ (все произойдет в текущей папке)\ncp temp/ temp2/ -r         # дублирование каталога\n```\n\n\n### Переименование или перемещение файлов\n\n```bash\nmv index.html old              # перемещение файла в папку\nmv index.html old/new_name.txt # перемещение файла в папку с переименованием файла\nmv order.txt orderNew.txt      # переименовать файл\n```\n\n\n### Удаление папок и файлов\n\n```bash\nrm ghost.png             # удалить файл\nrm -rf old               # удалить папку и всё из нее\n```\n\n\n## Алиасы\n\nДля команд можно создавать алиасы (синонимы). \nДля этого в папке пользователя (OSX и linux) или в C:/Users/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.bashrc (Windows) нужно вписать строки, наподобие alias pro='cd /d/projects' (одна строка в файле — один алиас)..  \n\n```bash\nalias                 # отобразит алиасы, которые уже заданы в системе   \nalias c='clear'       # создаст алиас который будет очищать консоль\nunalias c             # удалит алиас \" c \"\nunalias -a            # удалит все записанные алиасы\n```\n\n\n## Разное\n\nПодборка команд, показывающих бОльшую скорость работы с консолью, чем с GUI или просто удобных команд. Многие из них могут быть реализованы различными путями с GUI, что ничуть не умаляет удобства консоли.\n\n```bash\nclear                 # очистить консоль\ndf -h                 # показать статистику использования пространства на дисках\ngrep -i -n --color 'carousel' index.html css/style.css # найти слово carousel в двух указанных файлах (с игнором регистра), вывести строки с этим словом и номера строк (искомое слово подсветить)\ngrep word -r project  # найти слово word во всех файлах в папке project\nfind . -iname '*ind*' # найти в текущей папке (и подпапках) все файлы, имена которых содержат ind и показать списком\nls -a \u003e\u003e file.txt     # записать в file.txt результат вывода команды ls -a\nls src/less/mixins    # показать содержимое папки с указанным путем без перехода в неё\necho  \"Some text\"     # вывод текста в консоль \nchmod +x ./fileName   # сделать файл исполняемым \nwhoami                # выводит имя пользователя \n```\n\n## Использование переменных  \nПеременные позволяют хранить в файле сценария информацию, например — результаты работы команд для использования их другими командами.\n\nСуществуют два типа переменных, которые можно использовать в bash-скриптах:\n\n1. Переменные среды  - переменные установленые в среде \n```bash\necho $HOME\necho \"Env variable $HOME\"\n\n```\n2. Пользовательские переменные  - хранят значение до тех пор, пока не завершится выполнение сценария.\n\n```bash\n#!/bin/zsh\n\ngrade=5 \nperson=\"Adam\"\necho \"$person is a good boy, he is in grade $grade\"\n```\n## Подстановка команд в переменные  \n\nОдна из самых полезных возможностей bash-скриптов — это **возможность извлекать информацию из вывода команд и назначать её переменным**, что позволяет использовать эту информацию где угодно в файле сценария.\n\nСделать это можно двумя способами.\n\n1. С помощью значка обратного апострофа «`»\n```bash\nmydir=`pwd`\n```\n2. С помощью конструкции $()\n```bash\nmydir=$(pwd)\n```\n\nА скрипт, в итоге, может выглядеть так:  \n```bash\n#!/bin/bash\n\nmydir=$(pwd)\necho $mydir\n```  \nВ ходе его работы вывод команды pwdбудет сохранён в переменной mydir, содержимое которой, с помощью команды echo, попадёт в консоль.  \n\n## Математические операции  \n\nДля выполнения математических операций в файле скрипта можно использовать конструкцию вида `$((a+b))`  \n\n```bash\n#!/bin/bash\n\nvar1=$(( 5 + 5 ))\necho $var1\n\nvar2=$(( $var1 * 2 ))\necho $var2\n```  \n\n## Управляющая конструкция if-then  \n\nВ некоторых сценариях требуется управлять потоком исполнения команд. Например, если некое значение больше пяти, нужно выполнить одно действие, в противном случае — другое. Подобное применимо в очень многих ситуациях, и здесь нам поможет управляющая конструкция if-then. В наиболее простом виде она выглядит так  \n\n```bash\nif команда\nthen\nкоманды\nfi \n\n#!/bin/bash\nif pwd\nthen\necho \"It works\" \nfi\n```\n\nПример: надо найти некоего пользователя в `/etc/passwd`, и если найти его удалось, сообщить о том, что он существует.  \n\n```bash\n#!/bin/bash\n\nuser=likegeeks\nif grep $user /etc/passwd\nthen\necho \"The user $user Exists\"\nfi\n```  \n\n## Управляющая конструкция if-then-else  \n\nДля того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией `if-then-else`. Вот как она устроена:  \n\n```bash\nif команда\nthen\nкоманды\nelse\nкоманды\nfi\n```  \nЕсли первая команда возвратит ноль, что означает её успешное выполнение, условие окажется истинным и выполнение не пойдёт по ветке else. В противном случае, если будет возвращено что-то, отличающееся от нуля, что будет означать неудачу, или ложный результат, будут выполнены команды, расположенные после else.\n\n```bash\n#!/bin/bash\n\nuser=anotherUser\nif grep $user /etc/passwd\nthen\necho \"The user $user Exists\"\nelse\necho \"The user $user doesn’t exist\"\nfi\n```\n\n## Конструкция CASE  \nЕсли вы столкнулись с парой различных возможных действий, то использование оператора case может быть более полезным, чем вложенные операторы if. Для более сложных условий используйте пример, как показано ниже\n```bash\ncase \"$extension\" in\n  \"jpg\"|\"jpeg\") echo \"It's image with jpeg extension.\" ;;\n  \"png\")        echo \"It's image with png extension.\"  ;;\n  \"gif\")        echo \"Oh, it's a giphy!\"               ;;\n  *)            echo \"Woops! It's not image!\"          ;;\nesac\n```\n\n## Циклы  \n\nВ Bash есть четыре типа циклов: for, while, until и select.  \n\n- FOR \n```bash\n# 1\nfor arg in elem1 elem2 ... elemN\ndo\n  # statements\ndone\n\n# 2\nfor i in {1..5}; do echo $i; done\n\n# 3\nfor (( i = 0; i \u003c 10; i++ )); do\n  echo $i\ndone\n\n# 4\nfor FILE in $HOME/*.bash; do\n  mv \"$FILE\" \"${HOME}/scripts\"\n  chmod +x \"${HOME}/scripts/${FILE}\"\ndone\n```  \n\n- WHILE  - Цикл while проверяет условие и перебирает последовательность команд, пока это условие истинно. Условие - это не что иное, как первичное значение, используемое в условиях if..then. \n```bash\nwhile [[ condition ]]\ndo\n  # statements\ndone\n\n# Squares of numbers from 0 through 9\nx=0\nwhile [[ $x -lt 10 ]]; do # value of x is less than 10\n  echo $(( x * x ))\n  x=$(( x + 1 )) # increase x\ndone\n```  \n\n- UNTIL  - Цикл until - полная противоположность цикла while. Какое-то время он проверяет условие теста, но продолжает цикл, пока это условие ложно\n```bash\nuntil [[ condition ]]; do\n  #statements\ndone\n```\n- SELECT - Цикл выбора помогает нам организовать пользовательское меню. Он имеет почти тот же синтаксис, что и цикл for  \n```bash\nselect answer in elem1 elem2 ... elemN\ndo\n  # statements\ndone\n```\nВ этом примере пользователю задается вопрос, какой диспетчер пакетов он хотел бы использовать. Затем он спросит, какой пакет мы хотим установить, и, наконец, приступит к его установке.  \n\n```sh\nPS3=\"Choose the package manager: \"\nselect ITEM in bower npm gem pip\ndo\n  echo -n \"Enter the package name: \" \u0026\u0026 read PACKAGE\n  case $ITEM in\n    bower) bower install $PACKAGE ;;\n    npm)   npm   install $PACKAGE ;;\n    gem)   gem   install $PACKAGE ;;\n    pip)   pip   install $PACKAGE ;;\n  esac\n  break # avoid infinite loop\ndone\n```\n\n- LOOP CONTROL  - Бывают ситуации, когда нам нужно остановить цикл до его нормального завершения или перешагнуть через итерацию. В этих случаях мы можем использовать встроенные в оболочку операторы break и continue.  \n\nОператор `break` используется для выхода из текущего цикла до его завершения\nОператор `continue` проходит одну итерацию  \n```sh\nfor (( i = 0; i \u003c 10; i++ )); do\n  if [[ $(( i % 2 )) -eq 0 ]]; then continue; fi\n  echo $i\ndone\n```\n\n## Сравнение чисел  \n\nВ скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.  \n\nСравнения пишем в [ ] обязательно пробелы в скобках \n \n```bash\n# eq - equal  \n# ge - greater equal   \n# gt - greater than     \n# le - less equal  \n# lt - less than  \n# ne - not equal  \n\nn1 -eq n2 # Возвращает истинное значение, если n1 равно n2.\nn1 -ge n2 # Возвращает истинное значение, если n1 больше или равно n2.\nn1 -gt n2 # Возвращает истинное значение, если n1 больше n2.\nn1 -le n2 # Возвращает истинное значение, если n1 меньше или равно n2.\nn1 -lt n2 # Возвращает истинное значение, если n1 меньше n2.\nn1 -ne n2 # Возвращает истинное значение, если n1 не равно n2.\n\nval1=6\nif [ $val1 -gt 5 ]\nthen\necho \"The test value $val1 is greater than 5\"\nelse\necho \"The test value $val1 is not greater than 5\"\nfi\n```  \n\n## Сравнение строк  \n\nВ сценариях можно сравнивать и строковые значения.  \nОператоры сравнения выглядят довольно просто, однако у операций сравнения строк есть определённые особенности, которых мы коснёмся ниже. Вот список операторов.  \n\n```bash\nstr1 = str2   # Проверяет строки на равенство, возвращает истину, если строки идентичны.\nstr1 != str2  # Возвращает истину, если строки не идентичны.\n\n# операторы «\u003e» и «\u003c» необходимо экранировать с помощью обратной косой черты,\nstr1 \\\u003c str2   # Возвращает истину, если str1 меньше, чем str2.\nstr1 \\\u003e str2   # Возвращает истину, если str1 больше, чем str2.\n\n-n str1       # Возвращает истину, если длина str1 больше нуля.\n-z str1       # Возвращает истину, если длина str1 равна нулю.  \n\n#!/bin/bash\n\nuser =\"likegeeks\"\nif [ $user = $USER ]\nthen\necho \"The user $user  is the current logged in user\"\nfi\n```  \n\n## Проверки файлов  \n\nKоманды позволяют проверять различные условия, касающиеся файлов  \n\n```bash\n-d file         # Проверяет, существует ли файл, и является ли он директорией.\n-e file         # Проверяет, существует ли файл.\n-f file         # Проверяет, существует ли файл, и является ли он файлом.\n-r file         # Проверяет, существует ли файл, и доступен ли он для чтения.\n-s file         # Проверяет, существует ли файл, и не является ли он пустым.\n-w file         # Проверяет, существует ли файл, и доступен ли он для записи.\n-x file         # Проверяет, существует ли файл, и является ли он исполняемым.\nfile1 -nt file2 # Проверяет, новее ли file1, чем file2.\nfile1 -ot file2 # Проверяет, старше ли file1, чем file2.\n-O file         # Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.\n-G file         # Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.\n\n#!/bin/bash\n\nmydir=/home/likegeeks\n\nif [ -d $mydir ]                    # если файл сущетсвует и он является директорией\nthen\necho \"The $mydir directory exists\"  # выводим сообщение\ncd $mydir                          # переходим в него \nls                                  # отображаем содержимое\nelse                                # ИНАЧЕ\necho \"The $mydir directory does not exist\"\nfi\n```  \n\n## Операторы  \n\nПайпы **|**  - передает результат выполненной инструкции следующему пайпу \n```bash \n# command1 | command2 | command3  \nls -l | grep .md$ | less\n```\n\nТочка с запятой **;** - выполняет команды последовательно  \n```bash\n# command2 will be executed after command1\ncommand1 ; command2\n```  \nАмперсанд **\u0026** - оболочка выполняет команду асинхронно в подоболочке. Другими словами, эта команда будет выполняться в фоновом режиме\n\nДвойной амперсанд (И) **\u0026\u0026** - вторая команды будет выполнена только в случае УСПЕШНОГО заверения первой команды\n```bash\n# command2 will be executed if, and only if, command1 finishes successfully (returns 0 exit status)\ncommand1 \u0026\u0026 command2\n```\n\nДвойной пайп (ИЛИ) - вторая команды будет выполнена только в случае НЕУДАЧНОГО заверения первой команды\n```bash\n# command2 will be executed if, and only if, command1 finishes unsuccessfully (returns code of error)\ncommand1 || command2\n```  \n\nТестовые **[ ]** - Эти выражения помогают нам указать результаты условного выражения. Используются обычно в блоках if \n```bash\n# Single-line\nif [[ 1 -eq 1 ]]; then echo \"true\"; fi\n\n# Multi-line\nif [[ 1 -eq 1 ]]; then\n  echo \"true\"\nfi\n\n# Single-line\nif [[ 2 -ne 1 ]]; then echo \"true\"; else echo \"false\"; fi\n\n# Multi-line\nif [[ 2 -ne 1 ]]; then\n  echo \"true\"\nelse\n  echo \"false\"\nfi\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberspacedk%2FBASH-Commands","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyberspacedk%2FBASH-Commands","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberspacedk%2FBASH-Commands/lists"}