diff options
author | Yaroslav <contact@yaroslavps.com> | 2020-04-12 03:44:50 +0300 |
---|---|---|
committer | Yaroslav <contact@yaroslavps.com> | 2020-04-12 03:44:50 +0300 |
commit | 65dfb21ce4bfd6c9b3d1628adeee0acfc423b2b5 (patch) | |
tree | 07481d37b744709dd16bb7ebbf6f5f310b7c983c /content/weblog/2018-12-31_intro-to-linux-and-bash-pt2 | |
parent | ae3927e0f12101bb8a788b4564657e1632f7e29d (diff) | |
download | yaroslavps.com-65dfb21ce4bfd6c9b3d1628adeee0acfc423b2b5.tar.gz yaroslavps.com-65dfb21ce4bfd6c9b3d1628adeee0acfc423b2b5.zip |
migrated all posts from 2018
Diffstat (limited to 'content/weblog/2018-12-31_intro-to-linux-and-bash-pt2')
-rw-r--r-- | content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.md | 398 | ||||
-rw-r--r-- | content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.ru.md | 404 |
2 files changed, 802 insertions, 0 deletions
diff --git a/content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.md b/content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.md new file mode 100644 index 0000000..5739e06 --- /dev/null +++ b/content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.md @@ -0,0 +1,398 @@ ++++ +title = "Intro to Linux and the Bash command line, pt II" +date = 2018-12-31T09:20:00Z ++++ + +So the year is coming to an end, and I didn't follow up on the first part of +these mini tutorial/guide/introduction. Might as well end the year on a good +note and write at least one post this last month. + +<!-- more --> + +In this part I will be writing about some more aspects of Linux and Unix-like +systems and tools that will come in handy when using the terminal. All or most +of these tools are a standard part of Linux and Unix/Unix-like systems. + +## File manipulation + +I didn't get into detail in the previous part of this guide on the file +manipulation side of things. However it is a crucial part of any computer +system, after all they wouldn't be as useful as they are if you couldn't create, +edit and delete files. + +### Create files + +Usually, the way you would go about creating and editing files is by using the +corresponding programs. Like for example, vim to create and edit text files. +However, there's also a utility to create blank files called touch. + +You can make a blank file by writing touch followed by the path of the file you +wish to create, like this + +```sh +user@host:~$ touch example.txt +``` + +Now we have an empty file at "/home/user/example.txt". Although I kind of lied +when I said that this command is for making blank files. In reality, what it +does is check if such file exists, if it does, it modifies the date and time of +access and modification, otherwise it makes a new empty file, like in our case. +Most of the time you won't really need this command, since you would actually be +creating files through programs or means, though it does come in handy +sometimes. + +### Create directories + +Now on to something more interesting, making directories. This one is quite +simple, and the command for that is mkdir. For example + +```sh +user@host:~$ mkdir foo +``` + +In this case we have created a new folder called "foo" in "/home/user/". But +remember that we are passing paths here, which can be relative or absolute (if +you don't know or remember what this means, check the first part of this guide). +In our case we were using a relative path, with just the name of the directory +to create. + +If we were to indicate an absolute path like "/home/user/foo" we would need to +make sure that directories "home" and "user" already exist. However, there's a +useful argument we can pass to mkdir to make parent directories if needed, -p + +```sh +user@host:~$ mkdir -p /tmp/foo/bar +``` + +In this case, if directory "foo" doesn't exist, mkdir will make it for us along +with "bar" inside it. + +### Moving and renaming + +This one is pretty simple, and both actions are handled by the same command, mv, +which is short for move. + +If you want to rename a file or directory, simply "move" it to the same +destination directory with a new/different name, for example + +```sh +user@host:~$ mv untitled titled +``` + +If you want to move it to a different location, just indicate that path as the +second argument. Remember that we are using paths here, and we use either +absolute or relative paths + +```sh +user@host:~$ mv titled Documents/titled +``` + +### Copying + +Copying files is similar to moving them, except that the command is different, +cp + +```sh +user@host:~$ cp titled Documents/titled2 +``` + +However, copying directories is different. To copy directories you have to use a +special flag, the -r flag. This flag means that the operation ought to be +recursive, that is to copy every file and subdirectory in that directory along +with the directory (and files in those subdirectories and files the +subdirectories of the subdirectories and... yeah recursion, you get it) to the +destination path. So we would do something like this + +```sh +user@host:~$ cp -r dir dir-copy +``` + +### Removing + +Removing files is pretty simple, just use rm followed by the path of the file, +for example + +```sh +user@host:~$ rm title +``` + +However, removing directories is a little bit trickier. One option would be to +use the command rmdir, however, the directory has to be empty before you can +remove it. + +The second option, is to use the same command as we used with files, but passing +it the -r flag so that it removes files recursively, similar to what we did with +the copy (cp) command. Do watch out, as it will remove the directory along with +everything that is in it. + +So to remove a directory and everything in it, we input something like this + +```sh +user@host:~$ rm -r dir +``` + +This command also has another flag to forcefully remove files without prompting, +the -f flag. This might be useful when you are removing files recursively and +there might be some special files, like hidden files (the ones with a dot as the +first character) and you don't want to be prompted for each and everyone of +them. + +Thread REALLY carefully when using this command though, especially if you are +issuing it as root. You don't wanna issue a "sudo rm -rf /" and end up with a +borked system and lost files. Unless you are some kind of sadist or something. + +An example of when it might be useful, is when you need to delete a git +repository from your computer, since it contains a lot of special hidden files +which git uses to keep track of your commits and other stuff. So to remove it, +we do + +```sh +user@host:~$ rm -rf somerepo +``` + +### Permissions + +The Unix or Unix-like user and permissions systems, is a robust system for +managing what particular users can do with certain files and directories. This +allows to create a secure environment, especially when there are multiple users +using one computer. + +Every file has three types of permissions which dictate what can be done with +it. Each permission is represented by a single letter + +* r - read: the user can read/view the file. +* w - write: the user can write/modify (this includes deleting) the file. +* x - execute: the file can be run or executed by the user, if it is a program + or script. + +There are as well three different sets of people the permissions and ownership +might apply to. These are + +* u - user/owner: the one user that owns the file. Usually it is the user that + created the file, but ownership can be modified. +* g - group: every file has a group it belongs to. The group can be a one user + group (every user has their own one-user group), or a common group with + multiple users. +* o - others: everybody else who is not either in the group or the owner. + +If you read the first part of this guide you might remember that I mentioned +using the command "ls -l" to list the contents of the directory with details +about the files, including permissions + +```sh +user@host:~/Documents$ ls -l +drwxr-xr-x 2 user user 4.0K Jul 18 04:20 Books +-rwxr-xr-- 1 user group 350 Jul 18 04:20 run.py +-rw-r--r-- 1 user user 1.2M Jul 18 04:20 picture.png +``` + +As mentioned in the first part, the first ten characters of a row of the output +is what tells us about the permissions of the given file in that row. + +The first character in that sequence tells us if it is a normal file, or a +directory. If it has a d, it is a directory (duh), if it has a dash, it is a +normal file. It can be another letter, like an l for a symbolic link (a topic +for another day). + +The next 9 characters are divided in subsequences of three letters, each for a +set of people. The first three characters after the file type one are the +permissions for the owner, the next three are for the group, and the last three +for others. + +In each of this subset of three characters, the permissions are in the order of +read, write, and execute. So a letter means that that said set of users have +said permission, and its absence means the lack of that permission. + +Let's take for example the "run.py" file. By the information there we can see +that it is a normal file (no d (that's what she said)), its owner (user) can +read, write and even execute it; the group users (in group group) can read and +execute it, but not write to it; and the others can just take a look at its +contents. + +You might have noticed that directories tend to have the "x" part of the +permissions, however, this means something a little bit different on directories +than on files. It doesn't mean that you can execute but rather that you can +"search it", or in other words, access files inside of it. Because having the +"read" permission on a directory only means that you can take a look at what +files are inside of it, and write that you can put files inside the directory. + +### Changing permissions + +There is a really useful command that allows us to change permissions on files, +chmod. It is short for change file mode bits. + +To change the permissions on the file you input chmod followed by the +permissions and the path of the file. There are two ways of setting the +permissions, the easy and long one using letters, and the short but not as easy +way with octal "permission bits". We'll take a look at the easy one first. + +The easier way is made up of three parts + +* Who - user/owner, group, others or all (u, g, o, or a) +* Revoke or grant, "+" to grant, "-" to revoke +* The permission we are setting - read, write or execute (r, w, or x) + +So let's suppose we have a script we want to set the execute permission for so +that any user in the computer can execute it. + +```shh +user@host:~/Documents/stuff$ ls -l +-rw-r--r-- 1 user group 420 April 20 6:59 script.sh +user@host:~/Documents/stuff$ chmod a+x script.sh +-rwxr-xr-x 1 user group 420 April 20 6:59 script.sh +``` + +As we can see, after executing the command, every user on the computer now has +execute permission on the script. Now let's say that we want to revoke read +permissions for everybody except for the owner (user), we could execute o-r and +then g-r, but we can also combine them, like so + +```sh +user@host:~/Documents/stuff$ chmod go-r script.sh +-rwx--x--x 1 user group 420 April 20 6:59 script.sh +``` + +Now onto the short way. This one's a bit harder to remember as you have to have +some understanding of binary. Basically the way it works is that you set the +permissions by passing three octal numbers (i.e., 0-7) that each represent the +permission bits for each set of people (user/owner, group, others). + +As it is we have three possible permissions (read, write and execute) and 2^3 +just so happens to be 8 (possible combinations), that's why it is in octal. +Here's a table to help you out + + +<table> + <tbody> + <tr> + <td>Octal</td> + <td>Binary</td> + </tr> + <tr> + <td>0</td> + <td>001</td> + </tr> + <tr> + <td>1</td> + <td>001</td> + </tr> + <tr> + <td>2</td> + <td>010</td> + </tr> + <tr> + <td>3</td> + <td>011</td> + </tr> + <tr> + <td>4</td> + <td>100</td> + </tr> + <tr> + <td>5</td> + <td>101</td> + </tr> + <tr> + <td>6</td> + <td>110</td> + </tr> + <tr> + <td>7</td> + <td>111</td> + </tr> + </tbody> +</table> + +Basically what this means, is that when we have a 1, said permission is granted, +when it is 0, it is not. So for example, 6 means that read and write have been +granted, but not execute, because 6 => 110 => rw-. + +So let's say for example that we want to set the permissions of file so that the +owner can read, write, and execute, the group can read and execute, and others +can only execute. It would look something like this + +```sh +user@host:~/Documents/stuff$ chmod 751 script.sh +user@host:~/Documents/stuff$ ls -l +-rwxr-x--x 1 user group 420 April 20 6:59 script.sh +``` + +If you are changing the permissions of a directory, the permissions will apply +only to the directory itself and not to the files and subdirectories inside of +it, unless you use the recursive flag -R (note that in the case of chmod and +chown it is a capital R). + +### Changing ownership + +Changing the owner of a file is easier than changing permissions, since less +variables are involved. To change owner we use the chown command, for example, +change the user that owns a file + +```sh +user@host:~/.logs$ ls -l +-rw-r--r-- 1 root root 69 April 20 6:59 some.log +user@host:~/.logs$ sudo chown user some.log +user@host:~/.logs$ ls -l +-rw-r--r-- 1 user root 69 April 20 6:59 some.log +``` + +As the file doesn't belong to the same user initially, we need to use sudo +elevate our permissions to "super user". Note that in order to be able to use +sudo or "elevate your permissions" your user needs to be either in the sudoers +file or in other distros in the "wheel" group, or both. I won't go into details +on how to do that, since most probably your user is already in the sudoers file, +and a quick search on the internet will give you the information needed. + +Now let's say that you wanted to change both the user and group that file +belongs to, we would do like this + +```sh +user@host:~/.logs$ ls -l +-rw-r--r-- 1 root root 69 April 20 6:59 some.log +user@host:~/.logs$ sudo chown user:group some.log +user@host:~/.logs$ ls -l +-rw-r--r-- 1 user group 69 April 20 6:59 some.log +``` + +Just as with chmod, if you want to change ownership recursively in a directory, +you need to use the -R flag. + +## Epilogue/Some tips + +I forgot to mention in the previous part how to write paths with spaces. You +cannot write paths with spaces just like that, since spaces are treated as the +separator between arguments. + +There are two ways of writings paths and filenames (and other arguments) with +spaces. One is to put the argument between quotation marks, like for example + +```sh +user@host:~/Documents$ rm "Shopping List.txt" +``` + +Another is to use an escape character, i.e. just put a backslash (\) before the +space, like this + +```sh +user@host:~/Documents$ rm Shopping\ List.txt +``` + +One more thing that I wanted to mention is the man(ual) pages. Basically all +Linux distros come with man pages. + +You don't always have to resort to the internet if you don't remember how to use +a command, like what flags a command accepts, what are the order of the +arguments, etc. You might not have internet one day, and you might to resort to +good ol' offline resources, and the man pages are a good one. + +Besides, it is sometimes faster and easier to not have to leave the terminal to +look up the information. + +To read the man(ual) pages of a command, input "man" followed by the name of the +command, e.g. "chmod", and it will provide you with almost all the information +that you need. + +You can use vim keys (hjkl), or the arrow keys to scroll. Type /<word> to search +for that word, and afterwards press n to find the next found item. + +This is all for this part. Happy 2019! diff --git a/content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.ru.md b/content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.ru.md new file mode 100644 index 0000000..34ad9d9 --- /dev/null +++ b/content/weblog/2018-12-31_intro-to-linux-and-bash-pt2/index.ru.md @@ -0,0 +1,404 @@ ++++ +title = "Intro to Linux and the Bash command line, pt II" +date = 2018-12-31T09:20:00Z ++++ + +И так, год подходит к концу, и я так еще не написал вторую часть туториала про +Bash и Linux. Надо бы написать хотя бы один пост в этом, последнем месяце года. + +<!-- more --> + +В этой части, я расскажу чуть больше про инструменты и команды в Linux и +Unix-подобных системах, которые вам пригодятся при работе в терминале. Все или +большинство из этих программ являются частью основного набора программ и утилит +большинства бистрибутивов Linux и Unix/Unix-подобных систем. + +## Работа с файлами + +В предыдущей части я стал объяснять подробно как работать с файлами. Однако, +возможность манипулировать файлы является очень полезным и важным функционалом +компьютерных систем. + +### Создать файл + +Обычно, если хотим создать файл, мы используем определенную программу специально +предназначена для создания и редактирования определенного вида файлов. Например, +vim для редактирования и записи текстовых файлов. Однако есть утилита которая +позволяет создавать пустые файлы - touch. + +Вы можете создать пустой файл введя touch и последовательно название или путь +файла который вы хотите создать, например + +```sh +user@host:~$ touch example.txt +``` + +А теперь у нас пустой файл в "/home/user/example.txt". Но, я немного соврал, +когда сказал что данная команда для того чтобы создавать пустые файлы. На самом +деле, она сначала проверяет наличия файла, затем, если он существует, она +редактировает его даты и время доступа и редактирования, иначе он создает пустой +файл, как в данном случае. Очень редко когда данная команда на самом деле +понадобится, поскольку в большинство случаях сами программы для редактирования +файлов могут также их создавать. Тем не менее бывают случаи когда она может +пригодится. + +### Создать директорий + +Сейчас у нас будет что-то поинтереснее, как создать директорий. Создавать +директории довольно просто, команда - mkdir. Например + +```sh +user@host:~$ mkdir foo +``` + +Мы только что создали директорий "foo" в "/home/user/". Не забудьте что мы +всегда передаем путь файла, будь они относительными или абсолютными (если вы не +помните что это значит, прочитайте первую часть). В данном случае, мы используем +относительный путь содержающий только название директория. + +Если бы мы использовали абсолютный путь, он выглядел бы таким образом - +"/home/user/foo". Нам бы пришлось убедиться в том что директории "home" и "user" +существуют. Однако, существует очень подезный флажок, которые мы можем передать +команде, чтобы она создавала родительские директории при необходимости - -p + +```sh +user@host:~$ mkdir -p /tmp/foo/bar +``` + +Если директории "tmp" и/или "foo" не существуют, он их автоматический сделает, +вместе с "bar" внутри их. + +### Перемещение и переименования + +Это довольно просто, и обе действия можно выполнить одной командой - mv, что +происходит с английского move. + +Если вам необходимо переименовать файл или директорий, переместите его в тот же +самый директорий, с новым/другим названием, например + +```sh +user@host:~$ mv untitled titled +``` + +А вот если потребуется переместить в другую локацию, просто укажите путь новой +локации в качестве второго аргумента. Не забудьте что оба аргумента являются +путями, либо относительными либо абсолютными + +```sh +user@host:~$ mv titled Documents/titled +``` + +### Копировать + +Копирование похоже на перемещения, отличие просто в названии команды - cp. + +```sh +user@host:~$ cp titled Documents/titled2 +``` + +Однако, копирование директории отличается немного от копирования файлов. Чтобы +копировать директории, нужно использовать флаг -r. Он указывает что операция +должна быть рекурсивной, то есть, нужно скопировать каждый файл и поддиректорию +внутри директории (и файлы внутри этих поддиректории и в поддиректории +поддиректории и... ну то есть, рекурсия) в указанный путь. То есть что-то похоже +на это + +```sh +user@host:~$ cp -r dir dir-copy +``` + +### Удалить + +Удалять файлы довольно просто, достаточно ввести rm а затем путь файла + +```sh +user@host:~$ rm title +``` + +Однако, чтобы удалять директории не так просто. Один способ - использовать +команду rmdir, но она только работает на пустых директориях. + +Второй вариант, использовать ту же команду что и для файлов, но используя флаг +-r чтобы удалить файлы рекурсивно, также как и с командой cp. Будьте +внимательные при использовании этой команды, ибо она удаляет все файлы внутри +директории, вместе с директорией. + +Итак, чтобы удалить директорию и все содержимое, нам понадобиться ввести +следующую команду + +```sh +user@host:~$ rm -r dir +``` + +У этой команды есть еще один флаг, чтобы принудительно удалить файлы без +вопросов - флаг -f. Этот аргумент может пригодится, например, когда нужно +удалить сразу несколько файлов, и среди них есть специльные файлы, как скрытые +файлы (те, у которых точка перед названием) и вам не хочется подтвердить +действие перед каждым файлом. + +Следует быть ОЧЕНЬ осторожным перед тем как использовать этот флаг, особенно +если вы собираетесь ввести команду под root пользователем. Поверьте, вам будет +очень неприятно если вы введете например "sudo rm -rf /" и у вас полетят +полностью система и файлы. Если вы не садист, конечно. + +Пример ситуации когда данное сочетание флагов с командой rm может пригодится +это, когда вам необходимо удалить репозиторий git, поскольку в них содержатся +множество специальных скрытых файлов, которые git использует затем чтобы следить +за коммитами и прочее. Пример использования команды + +```sh +user@host:~$ rm -rf somerepo +``` + +### Контроль доступа + +В Unix и Unix-подобных системах существует довольно прочная система для контроля +прав доступа. Она позволяет определять полномочия определеных пользователей или +групп пользователей над определенными файлам, создавая безопасную среду для +компьютеров с множество пользователями. + +У каждого файла три вида прав доступа, которые определяют что можно с ними +делать. Каждое право обозначается одной буквой английского алфавита + +* r - чтение: пользователь имеет право читать данный файл. +* w - запись: пользователь может писать/редактровать данный файл (включая + возможность его удалять). +* x - выполнение: файл может быть выполнен пользователем, если он является + программой или скриптом. + +Так же существует три разных наборов человек к которым могут относится права +доступа + +* u - пользователь/владелец: пользователь, которому принадлежит файл. Обычно это + тот же самый пользователь, который создал файл, но владелца можно поменять. +* g - группа: каждый принадлежит определенной группе пользователей. Это может + быть группа одного пользователя (у каждого пользователя есть своя + однопользовательская группа), или общая группа. +* o - другие: Все остальные кто не являются владелцем или ну состоит в группе. + +Если вы читали первую часть туториала, вы наверное помните что я рассказывал про +команду "ls -l" чтобы посмотреть дополнительную информацию о файлах, включая +права доступа + +```sh +user@host:~/Documents$ ls -l +drwxr-xr-x 2 user user 4.0K Jul 18 04:20 Books +-rwxr-xr-- 1 user group 350 Jul 18 04:20 run.py +-rw-r--r-- 1 user user 1.2M Jul 18 04:20 picture.png +``` + +Первые десять символов в каждой строке - права доступа для файла в данной +строке. + +Первый символ в данном сочетаний символов определяет является ли файл обычным +файлом или другим видом. Если первым символом является буква d, то это +директория, если там просто черточка (тире/дефис), то это обычный файл. Там +также может быть другая буква, как например l для ссылок, но это уже не входит в +рамках данного поста. + +Следующие 9 символов разделяются в свое время в сочетание из трех символов, +каждое для определенного набора пользователей. Первые три символа после символа +вида файла это права для владелца, следующие три для группы, и последние три для +отсальных. + +В каждом из этих сочетании из трех букв, права доступа в порядке чтение, запись, +выполнение. Наличие буквы означает что у данного набора пользвателей данно это +право, отсуствие значит нет такого права для данного набора пользоваетелей. + +Возьмем в качестве примера файл "run.py". Исходя из информации на экране мы +можем определить что это обычный файл (нет буквы d), владелец (user) имеет право +читать, записывать и выполнять его; группа пользователей (в группе group) имеет +право на чтение и выполнения, но не записи; и остальные только могут его читать. + +Наверное вы заметили что почти всегда у директории присуствует право на +выполнение (буква x), однако это означает что-то немножко иное в отличие от +файлов. Буква "x" у директориях означает что есть право на вход в директорию и +есть доступ к файлам внутри директории. Право на чтения директории всего лишь +означает что можно смотреть на то какие файлы содержатся в директории, и право +на запись означает что есть то чтобы записывать файла внутри директории. + +### Изменить права + +Существует очень полезная команда которая позволяет менять права на доступ +файлов - chmod. + +Чтобы изменить права на файле, необходимо ввести chmod и затем права и путь +файла. Есть два способа чтобы менять права, легкий но более долгий способ +используя буквы, и более быстрый но не совсем легкий используя восмеричный код. +Начнем с более легкого. + +Более легкий способ состоит из трех частей + +* Кто - пользователь/владелец, группа, остальные или все (u, g, o, или a) +* Дать или отменить право, "+" чтобы дать, "-" чтобы отменить +* Право которое мы меняем - чтение, запись или испольнение (r, w, или x) + +Допустим у нас есть скрипт для которого мы хотим дать право на запуск для всех +пользователей. + +```sh +user@host:~/Documents/stuff$ ls -l +-rw-r--r-- 1 user group 420 April 20 6:59 script.sh +user@host:~/Documents/stuff$ chmod a+x script.sh +-rwxr-xr-x 1 user group 420 April 20 6:59 script.sh +``` + +Как можно заметить, после запуска команды все пользователи компьютера имеют +право на выполнения скрипта. А теперь допустим что мы передумали и хотим +отменить право выполнения для всех пользователей кроме владелца, мы могли бы +ввести o-r и затем g-r, но мы можем также совмещать следующим образом + +```sh +user@host:~/Documents/stuff$ chmod go-r script.sh +-rwx--x--x 1 user group 420 April 20 6:59 script.sh +``` + +А теперь пора выучить быстрый способ. Его сложнее запомнить, поскольку еще +нужны базовые понимания двоичной системы счисления. Грубо говоря, оно работает +подовая три цифры в восьмеричной системе счисления (то есть 0-7) каждая из +которых обозначает бит права для каждого набора пользователей +(пользователь/владелец, группа, другие). + +Получается у нас три возможные права (чтение, запись и выполнение) и 2^3 нам +дает 8 возможных сочетании прав, и вот почему у нас восьмеричная система. +Следующая таблица поможет определить отношение нужной цифры для определенного +сочетания прав + +<table> + <tbody> + <tr> + <td>Восьмеричная система</td> + <td>Двоичная система</td> + </tr> + <tr> + <td>0</td> + <td>001</td> + </tr> + <tr> + <td>1</td> + <td>001</td> + </tr> + <tr> + <td>2</td> + <td>010</td> + </tr> + <tr> + <td>3</td> + <td>011</td> + </tr> + <tr> + <td>4</td> + <td>100</td> + </tr> + <tr> + <td>5</td> + <td>101</td> + </tr> + <tr> + <td>6</td> + <td>110</td> + </tr> + <tr> + <td>7</td> + <td>111</td> + </tr> + </tbody> +</table> + +Зная как переводятся цифры в двоичную становится намного проще знать к какой +комбинации прав она относится, ибо каждая цифра в сочетании трех бинарных цифр +относится к одному виду прав в выше указанному порядке (r, w, x). Если у нас +единица (1) это означает что есть данное право, а ноль (0) означает его +отсуствие. И так, например, 6 означает что у нас есть право на чтение и запись, +поскольку 6 = 110 = rw-. + +Допустим что мы хотим поменять права доступа к файлу таким образом чтобы +владелец мог читать, записывать и выполнять; группа имела право на чтения и +выполнения; и остальные могли только выполнять. Для этого мы ввели что-то +подобное + +```sh +user@host:~/Documents/stuff$ chmod 751 script.sh +user@host:~/Documents/stuff$ ls -l +-rwxr-x--x 1 user group 420 April 20 6:59 script.sh +``` + +Если вы меняете права доступа директория, новые права будут изменены только для +самой директории, не включая файлы и поддиректории внутри. Чтобы также изменить +права для всех файлов внутри директории, необходимо использовать флаг рекурсии - +-R (обратите внимания на то что, в chmod флаг рекурсии обозначается большой +буквой R в отличие от cp или rm). + +### Поменять владелца + +Менять владельца файла проще чем менять права. Чтобы поменять владельца необходимо +использовать команду chown. Например, допустим мы хотим поменять пользователя, +которого владеет файлом + +```sh +user@host:~/.logs$ ls -l +-rw-r--r-- 1 root root 69 April 20 6:59 some.log +user@host:~/.logs$ sudo chown user some.log +user@host:~/.logs$ ls -l +-rw-r--r-- 1 user root 69 April 20 6:59 some.log +``` + +Поскольку файл не принадлежал тому же самому владельцу с которого мы выполняем +команды, нам необходимо выполнить команду через sudo чтобы повысить наши +права. Чтобы иметь возможность повышать права вашего пользователя, необходимо +чтобы ваш пользователь состоял в файле "sudoers" и/или в группе "wheel" зависимо +от дистрибутива/ОС. В большинство случаев (если вы пользуетесь +"домашним/дестктопным" дистро) у вас уже будут права на sudo, в любом случае +быстрый поиск в интернете поможет вам найти информацию о том как поменять +настройки прав в вашем дистрибутиве/ОС. + +А теперь допустим что вы хотели поменять и пользователя и группу которому +принадлежит файл, в таком случае мы бы ввели следующее + +```sh +user@host:~/.logs$ ls -l +-rw-r--r-- 1 root root 69 April 20 6:59 some.log +user@host:~/.logs$ sudo chown user:group some.log +user@host:~/.logs$ ls -l +-rw-r--r-- 1 user group 69 April 20 6:59 some.log +``` + +Также как и с chmod, если вам необходимо поменять владелца рекурсивной в +директории, вам нужно использовать флаг -R. + +## Эпилог/Советы + +В предыдущей части я забыл написать о том как ввести пути с пробедами. Нельзя +просто так печатать пути с пробелами, ибо пробел означает переход к следующему +аргументу. + +Есть два способа печатать пути, названия файлов и другие аргументы с пробелами. +Первый способ - кавычки. Например + +```sh +user@host:~/Documents$ rm "Shopping List.txt" +``` + +Второй - экранирования символа с помощью символа "\" перед пробелом. Например + +```sh +user@host:~/Documents$ rm Shopping\ List.txt +``` + +Еще одно о чем я хотел рассказать - мануалы (man). Почти (если не все) +дистрибутивы Линукса имеют мануалы. + +Не всегда необходимо обращаться к интернету если вы забыли как пользоваться +определнной командой. Если вы однажды оказались без интернета и вы хотите +узнать побольше об одной команде, man отличный оффлайн ресурс. + +Не говоря уже о том что проще и быстрее делать все сразу с терминала не +переключаясь к браузеру чтобы искать нужную информацию. + +Чтобы прочитать мануал определенной команды, введите man и затем название +команды. Например "man chmod". + +Вы можете пользоваться клавишами vim (hjkl) для перемещения. Введите /<термин> +чтобы искать этот термин, а затем нажмите на n чтобы найти следующее совпадение. + +Это все на данный момент. С новым 2019-м годом! |