aboutsummaryrefslogtreecommitdiff
path: root/content/weblog/2018-11-05_intro-to-linux-and-bash/index.ru.md
blob: 08fc0f856e092ab9154fbb0c2042494c939551c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
+++
title = "Введение в Linux и Bash"
date = 2018-11-05T23:53:00Z
+++

Недавно я решил познакомить друга с великолепным миром Линукса, и как например,
человек переезжает в совсем новый город, его нужно познакомить с городом, как
передвигаться по городу, где все нужные заведения и т.д. В принципе и также
когда человек переходит на новую ОС, ему нужно привыкнуть к новой среде,
создавать новые привычки, особенно когда это касается мира линукса. Собственно
этот туториал я пишу для моего друга и любого другого человека который
заинтересован Линуксом, но хотят научится использовать его более эффективно,
т.е. высше уровня рядового пользователя.

<!-- more -->

Скорее всего вам уже известно, но Линукс на самом деле сам по себе не ОС, а ядро
которое используется совместно с набором комонентов и программ GNU (вставьте
здесь шутки и мемы про GNU/Linux (или GNU+Linux)), и есть несколько вариантов,
или точнее - дистрибутивов, так называемого GNU/Linux.

Если только собираетесь установить Линукс и еще не решились какой дистрибутив
выбрать, здесь маленткий, который может помочь вам выбрать:

* Manjaro - Лично я пользуюсь этим дистрибутивом. У него есть несколько вариации
  с разными рабочими средами, например KDE или GNOME. Это дистрибутив "rolling
  release", что означает то, что у него будет более новые пакеты чем у
  классических дистро, в замен меньшей стабильности системы. Его довольно легко
  установить и использовать (если выбрать что-то вроде KDE или GNOME).
* Ubuntu - Самый известный дистрибутив. Является один из самых легких в
  использовании. Более стабильный чем Manjaro (хоть и не всегда). Если вы просто
  хотите установить ОС в которой уже все настроена и не хотите выбирать рабочую
  среду (или вы не знаете что такое рабочая среда), скорее всего этот дистро для
  вас.
* Debian - Один из самых стабильных дистро. Его не так легко установить как
  Ubuntu или Manjaro, но все же не сложно. Собственно Ubuntu разработан на
  основе Debian'а. Его скорее всего придется настроить под себя (лично меня не
  нравятся дефолтные настройки GNOME'а), но если вы хотите стабильный,
  провереный дистрибутив, то он для вас. Один минус для некоторых - поумолчанию
  не подключены репозитории с "несвободным" софтом, придется подключить самому
  если нуждаетесь в проприетарном софте.
* Fedora - По стабильностью и сложности установки/пользования похож на Ubuntu
  (то есть довольный просто). У него такой же минус как и у Debian - отсуствия
  "несвобоного" софта в главном репозиторий.

Если при чтения списка вам словосочетание "рабочая среда" оказалась незнакомой,
то грубо говоря, это набор программ которые предоставляют вам графический
интерфейс для взаимодейстмия с системой. Как выглядит ОС не так сильно зависит
от дистро, в основном оно зависит от рабочей среды.

Установили Линукс? Отлично, можем начать.

## Файловая структура

Если вы привыкли работать с Windows, то есть некоторые моменты, то первое что вы
заметите это то, что файловая структура выглядит немного иначе. Windows, из-за
наследства MS-DOS, использует буквы для обозначения дисков, томов и файловых
систем. В Линукс, как и в других Unix-подобных системах (например macOS, BSD)
это немного иначе.

В Линуксе всё являтся файлом, в том числе и устройства подключенных к вашему
компьютеру. От клавиатуры до накопителя. Папки (или директории) тоже файлы.

Разные диски или накопители монтируются в определеной папке, и в этой папке
будут размещатся файлы данного накопителя. Монтировать и демонтировать диски,
флэшки и тд можно самому, но нечего боятся, если вы установили какой-нибудь из
самых популярных дистро, то система сделать это для вас автоматический, и
создаст ярлык в браузере файлов или на рабочем столе.

В Линуксе есть корневая папка

```
/
```

Внутри нее все файлы и поддиректории вашей системы.

В Линуксе, у каждого пользователя есть своя "домашняя папка". В вашей домашней
папки будут размещаться ваши файлы, документы. Домашняя папка пользователя
"user", например, будет распологатся здесь

```
/home/user
```

Но вы можете перейти к этой папке используя символ ~. Например, если в консоле
вы введете

```sh
$ cd ~
```

То это комманда вас переместит в вашую домашнюю папку (например, /home/user).

## Терминал - Bash

Самая полезная программа в линуксе, это скорее всего терминал. Да, рядовой
пользователь может и без нее жить, но это довольно гибкий и полезный инструмент.
Очень часто задачу на самом деле проще и быстрее реализовать в текстовой среде
чем в графической. Очевидно быстрее научится пользоватся графической средой, но
после того как вы научитесь пользоватся текстовой средой (терминал), вы сможете
работать более эффективно.

Пример того как может выглядить ваша коммандная строка

```sh
user@host:~$
```

Первая часть - пользователь через которого вы зашли в систему. Вторая после
символа "@" - hostname, или название вашего устройства в сети.

Вслед за ":" - директория в котором вы находитесь в данный момент. В этом случае
символ "~" указывает что мы находемся в домашнем каталоге нашего пользователя.
Чтобы посмотреть абсолютный путь, мы можем ввести комманду "pwd".

```sh
user@host:~$ pwd
/home/user
user@host:~$
```

Символ "$" указывает на то что мы сейчас работаем через обычного пользователя. В
Линуксе и во всех *nix системах, есть такая вещь как "супер пользователь", или
root пользователь. У обычных пользователей нет полный доступ к важным файлам
системы, или к файлам других пользователей. У root, доступ есть на всю систему.
Когда вы авторизованные через root, символ "$" меняется на "#".

Но о правах и о root пользователе, попозже поговорим.

Чтобы открыть терминал, достаточно зайти в меню программ/приложений и нажать на
его иконку или названия. Не могу объяснить подробнее где располагается ярлык
терминала, поскольку оно будет отличатся в зависимо от дистрибутива.

Для того, чтобы начать работать в терминале, необходимо познакомится с основными
коммандами, начиная с коммандами для навигации.

### Навигация в терминале

Еще один момент, который стоит учесть при работе с Линуксом и *nix системами,
это то, что реестр учитывается. Если в Windows'е файл README.TXT и readme.txt
один и то же самый, то в Линуксе и Unix-подобных системах это разные файлы.

Для перемещения по директориям, мы пришем в коммандой строке "cd <путь>". Путь
может быть относительным или абсолютным.

Относительный путь, это, например, название папки которая находится внутри той
директории где мы находимся. Или иными словами, путь относительно того где мы
находимся.

Абсолютный путь, это путь относительно корневой директории (или root на английском).

Например, если мы хотим переместится в каталог "Documents" внутри /home/user/, и
мы уже в /home/user/, то мы можем просто ввести

```sh
user@host:~$ cd Documents
user@host:~/Documents$
```

А если бы нам надо было перейти на эту же папку с совершено другого каталога, то
нам бы пришлось ввести

```sh
user@host:/var$ cd /home/user/Documents
user@host:~/Documents$
```

Чтобы перейти на корневого каталога данной директории мы используем две точки
"..". Например

```sh
user@host:~/Documents$ cd ..
user@host:~$
```

".." означает корневой каталог данной директории. А также есть "." который
означает данная директория.

Есть еще одна комманда, которая поможет вам при навигации в коммандой строке -
ls. Это комманда позволяет увидет содержимое данной директорий

```sh
user@host:~/Documents$ ls
Books       todo.txt    picture.png
```

Она также принимает параметры и аргументы, например, чтобы увидеть скрытые
файлы, добавьте параметр "-a"

```sh
user@host:~/Documents$ ls -a
Books    .secret    todo.txt    picture.png
```

Скрытые файлы и каталоги в Линуксе начинаются с точкой (например, скрытый
каталог ".secret").

Также есть параметр "-l" который показывает содержимое в списке с
допольнительной информация, такой как разрещения (больше о них в следующей
части), количество файлов в каталоге, владелец файла (пользователь и группа),
размер, дата создания/модификации, и название самого файла. Например

```sh
user@host:~/Documents$ ls -l
drwxr-xr-x  2 user user 4.0K Jul  18 04:20 Books
-rw-r--r--  1 user user 350  Jul  18 04:20 todo.txt
-rw-r--r--  1 user user 1.2M Jul  18 04:20 picture.png
```

Также параметры можно совмещать

```sh
user@host:~/Documents$ ls -al
drwxr-xr-x  2 user user 4.0K Jul  18 04:20 Books
drwxr-xr-x  5 user user 4.0K Jul  18 04:20 .secret
-rw-r--r--  1 user user 350  Jul  18 04:20 todo.txt
-rw-r--r--  1 user user 1.2M Jul  18 04:20 picture.png
```

Можно смотреть содержимое другого каталога не переходя на него, передавая его
название/путь в качестве последнего аргумента, например

```sh
user@host:~/Documents$ ls -l Books
drwxr-xr-x 12 user user 4.0K Jul  18 04:20 Lessons
-rw-r--r--  1 user user 2.3M Jul  18 04:20 Crime and Punishment.pdf
```

### Шорткаты

Перед тем как завершить первую часть этого туториала, хотелось бы написать про
несколько "шорткатов" при работе в bash'е.

Первое это перемещение по истории коммандов. Каждый раз когда вы вводите
комманду в терминале, она сохраняется в истории. Вы можете перемещаться по
истории комманд терминала используя стрелки вверх и вниз. Чтобы последнюю
комманду повторить, вы можете один раз нажать на стрелку вверх, а затем можно ее
дописать или переписать и нажать клавишу ввода. Чтобы повторить более старые
комманды, вы можете несколько раз нажать на стрелку вверх до нужной комманды, а
стрелку вниз если пропустили нужную комманду.

Еще есть очень полезная штука в баше - автозполнение. При нажатии на клавишу
"Таб" баш попытается заполнить для вас комманду.

Например, допустим вы находитесь в корневом каталоге, и вы хотите перейти в путь
"/home/user/". Вы можете начать печатать "cd h" нажать на "Таб" и у вас
получится "cd home/" затем дописать букву "u" и снова нажать на клавишу "Таб" и
в итоге у вас получится "cd home/user/".

Если будут несколько возможных вариантов автодополнения, то при одном нажатии
ничего не получится. Это значит, что либо нет такого каталога, либо есть
несколько возможных вариантов для автозаполнение. Во втором случае можно два
раза подряд нажать на клавишу "Таб" и баш вам покажет все возможные варианты,
например

```sh
user@host:~$ cd Do
Documents/ Downloads/
user@host:~$ cd Do
```

В таком случае мы, например, можем допечатать "cd Doc" и снова нажать на "Таб" и
у нас получится "cd Documents/". Однако, если при двойном нажатие ничего не
выводится, значит что вариантов для автозаполнения.

В начале может показаться немного не понятно как система автозаполнения
работает, поэтому следует самому попробовать воспользоватся ей на практике
самому.

На этом пока все, в следующей части расскажу побольше о работе в терминале.