Команда scp – это утилита, которая работает по протоколу SSH, а значит, все что вам нужно для передачи файла на компьютер, это чтобы на нем был запущен SSH сервер, а также вы должны знать логин и пароль для подключения к нему. С помощью команды scp вы можете не только перемещать файлы между локальной и удаленной системой, но и между двумя удаленными системами. Для этого тоже будет достаточно знать пароли от них. И в отличие от Rsync вам не нужно авторизоваться на одном из серверов. Читать
Руководство для начинающих по Git: что такое журнал изменений и как его создать
Когда дело доходит до систем контроля версий, очень немногие могут затмить GIT в актуальности, производительности и распространенности. GIT был разработан Линусом Торвальдсом в 2005 году, и сегодня, миллионы компаний используют его для эффективного управления кодом и контроля над версиями своих проектов. Программное обеспечение с открытым исходным кодом может быть загружено для различных платформ, таких как Linux, Windows, Solaris и Mac; больше информации об основах GIT можно получить здесь. В этом руководстве вы узнаете основные GIT команды.
Описание
Git является распределенной системой для управления версиями разрабатываемых файлов. Создана она была в 2005 году автором ОС Linux. Эта система осуществляет синхронизацию работы с сайтом, а также сохраняет и обновляет изменения в файлах. Это очень удобный подход в случае работы над проектом нескольких разработчиков. На сегодняшний день во многих известных проектах используется именно Git. Что такое использование дает? К примеру, разработкой операционной системы Android занимается большое число программистов. Было бы крайне неудобно, если бы один из них вносил изменения, а другие об этом не знали. Git же позволяет всем быть в курсе всех изменений, а в случае ошибок вернуться к предыдущим версиям файлов.
Основные команды
Следующие четыре команды предназначены для копирования файлов между рабочей директорией, сценой, также известной как «индекс», и историей, представленной в форме коммитов.
- git add файлы копирует файлы в их текущем состоянии на сцену.
- git commit сохраняет снимок сцены в виде коммита.
- git reset — файлы восстанавливает файлы на сцене, а именно копирует файлы из последнего коммита на сцену. Используйте эту команду для отмены изменений, внесённых командой git add файлы. Вы также можете выполнить git reset, чтобы восстановить все файлы на сцене.
- git checkout — файлы копирует файлы со сцены в рабочую директорию. Эту команду удобно использовать, чтобы сбросить нежелательные изменения в рабочей директории.
Вы можете использовать git reset -p, git checkout -p, и git add -p вместо имён файлов или вместе с ними, чтобы в интерактивном режиме выбирать, какие именно изменения будут скопированы.
Также можно перепрыгнуть через сцену и сразу же получить файлы из истории прямо в рабочую директорию или сделать коммит, минуя сцену.
- git commit -a аналогичен запуску двух команд: git add для всех файлов, которые существовали в предыдущем коммите, и git commit.
- git commit файлы создаёт новый коммит, в основе которого лежат уже существующие файлы, добавляя изменения только для указанных файлов. Одновременно, указанные файлы будут скопированы на сцену.
- git checkout HEAD — файлы копирует файлы из текущего коммита и на сцену, и в рабочую директорию.
Использование слепков, а не патчей
Главным отличием Git от других систем контроля версий является то, как она смотрит на данные. Большая часть программ хранит информацию в виде списка изменений, называемых патчами для файлов. Такие системы к хранимым данным относятся как к набору файлов, а также набору изменений, которые сделаны для каждого файла, относительно времени. Как хранит свои данные Git? Что такое есть в этой системе, что отличает ее от других? Вместо патчей, хранимые данные здесь считаются набором слепков маленькой файловой системы. Всякий раз, когда пользователь фиксирует новую версию проекта, система просто сохраняет слепок состояния файлов на текущий момент. Чтобы повысить эффективность в том случае, когда файл не изменялся, система не сохраняет его, а делает ссылку на ранее сохраненный экземпляр, в который были внесены последние изменения.
Это очень важное отличие от других систем контроля, которое присуще Git. Что такое отличие дает? Git становится похожей на маленькую файловую систему, обладающую очень мощными инструментами, которые работают поверх нее.
Преимущественно локальные операции
Для того чтобы совершать большинство операций в Git, нужны лишь локальные ресурсы и файлы. Это означает, что чаще всего нет необходимости в информации, находящейся на других компьютерах, входящих в сеть. Так как все изменения проекта находятся на диске, выполнение операций происходит с молниеносной скоростью. Например, для того чтобы просмотреть историю проекта, ее не нужно загружать с сервера. Она считывается из локального репозитория на компьютере. Если нужно увидеть изменения между версией файла, которая была сделана месяц назад, и текущей, можно сделать это очень быстро, не обращаясь к серверу.
Еще локальная работа означает то, что можно много чего сделать без подключения к сети. К примеру, разработчик может вносить изменения, находясь в транспорте. Во многих системах контроля такой возможности нет.
Наблюдение за целостностью данных
Перед тем как сохранить любой файл, ему присваивается индекс в виде контрольной суммы, вычисленной непосредственно Git. Что такое контрольная сумма? Это значение, которое рассчитывается при помощи специальных алгоритмов и используется для того, чтобы проверить целостность данных при их хранении и передаче. Здесь невозможно что-то изменить без ведома Git, и это важная составляющая философии системы.
Данные чаще всего добавляются
Почти все действия, совершаемые в Git, добавляют в базу данных. Удалить их очень трудно. Можно лишь потерять еще не сохраненную информацию, но при её фиксации потеря исключена. По этой причине многие выбирают именно Git, так как тут можно проводить эксперименты без рисков сделать что-то непоправимое.
Состояния файлов
Работа с Git для начинающих подразумевает запоминание того, что файл может находиться в одном из трех состояний:
- Зафиксированное, то есть файл сохранен в локальном хранилище.
- Измененное, когда правки были внесены, но сохранение еще не выполнено.
- Подготовленное – измененные файлы, которые отмечены для сохранения.
Так, в проектах, в которых используется Git, имеется три раздела для разных состояний файлов:
- Каталог Git, где хранятся метаданные, а также база данных объектов. Эта часть системы самая важная.
- Рабочий каталог, который является извлеченной из базы данных копией какой-то версии проекта.
- Файл, содержащий информацию о последующем сохранении.
Устанавливаем Git
Первое, что нужно сделать для того, чтобы использовать систему контроля версий – установить ее. Существует несколько способов для этого. Основными являются два варианта:
- Установка Git из исходников.
- Установка пакета для используемой платформы.
Установка Git из исходников
При наличии такой возможности лучше использовать данный вариант, так как будет получена самая свежая версия. Каждое обновление обычно содержит множество полезных улучшений, касающихся интерфейса пользователя. Именно поэтому, если установка из исходников не слишком для вас затруднительна, лучше предпочесть ее. Да и большинство дистрибутивов Linux включают в себя устаревшие пакеты.
Для установки понадобятся необходимые библиотеки: expat, curl, libiconv, openssl, zlib. После их инсталляции можно загрузить последнюю версию системы контроля версий, скомпилировать ее и установить.
Установка в операционной системе Windows
Если у пользователя нет Linux, а хочется использовать Git, Windows также поддерживает эту систему. И установить ее очень просто. Существует проект msysGit, процедура установки которого является одной из самых простых. Необходимо просто загрузить файл инсталлятора, который можно найти на странице проекта в GitHub, а затем запустить его. По окончании установки на компьютере будет две версии – графическая и консольная.
Первоначальная настройка Git
После того как система контроля установлена на компьютер, нужно выполнить кое-какие действия для настройки среды под пользователя. Делается это единожды. При обновлении все настройки сохраняются. Их можно будет поменять в любой момент.
Git включает в себя утилиту git config, позволяющую делать настройки и контролировать работу системы, а также внешний вид. Данные параметры могут сохраняться в трех местах:
- В файле, содержащем значения, которые являются общими для всех пользователей и репозиториев.
- В файле, содержащем настройки определенного пользователя.
- В конфигурационном файле, находящемся в текущем репозитории. Такие параметры действуют только для него.
Пользовательское имя
В первую очередь после установки необходимо указать имя пользователя, а также электронную почту. Это очень важно, так как каждый коммит (сохранение состояния) содержит эти данные. Они включаются во все передаваемые коммиты и не могут быть изменены впоследствии.
Если указать опцию –global, такие настройки нужно будет сделать один раз.
Выбор текстового редактора
После указания имени нужно выбрать редактор, который будет необходим при наборе сообщений в Git. По умолчанию будет использоваться стандартный редактор операционной системы. Если пользователь захочет использовать другой, нужно прописать это в настройках конфигурационного файла в строке core.editor.
Проверка параметров
Чтобы знать основы Git, необходимо уметь проверять используемые настройки. Для этого применяется команда git config –list. Она выводит все доступные параметры, которые сможет найти. Некоторые имена настроек могут присутствовать в списке несколько раз. Это происходит из-за того, что Git считывает один ключ из различных файлов. В такой ситуации для каждого ключа используется последнее значение. Есть возможность проверять значения определенных ключей, вписав в команду вместо «–list» – «{ключ}».
Строим репозитории
В первую очередь нужно понять что такое git-репозиторий? Ответ очень прост: это набор файлов. Папка `.git`. Важно понимать, что это только набор файлов и ничего больше. Раз 20 наблюдал проблему у коллег с авторизацией в github/gitlab. Думая, что это часть git-системы, они пытались искать проблему в конфигруации git, вызывать какие-то git-команды.
А если это просто файлы, то к ним нужно как-то получить доступ, иметь возможность оттуда читать и туда писать? Да! Я называю это «транспортом». Это может и некорректно, но мне так было удобно запомнить. Более правильный вариант: «Протокол передачи данных». Самые распространённые варианты:
- FILE — мы имеем прямой доступ к файлам репозитория.
- SSH — мы имеем доступ к файлам на сервере через ssh.
- HTTP(S) — используем http в качестве приёма/передачи.
Вариантов намного больше. Не важно какой транспорт будет использован, важно чтобы был доступ на чтение или чтение/запись к файлам.
Поэтому, если вы никак не можете клонировать репозиторий с github, и нет в логах никаких подсказок, возможно у вас проблема с транспортом.
В частности, при клонировании вот так:
git clone git@github.com:user/repo.git
урл «превращается» в
git clone ssh://git@github.com:user/repo.git
Т.е. используется SSH и проблемы нужно искать в нём. Как правило, это неправильно настроенный или не найденный ssh-ключ. Гуглить надо в сторону «SSH Auth Key git» или, если совсем по взрослому, проверить, что же происходит:
ssh -vvv git@github.com
Какие протоколы поддерживаются поможет справка (раздел GIT URLS):
git clone –help
Репозиторий можно клонировать, но для начала поиграемся со своими:
- Придумаем свой удалённый репозиторий
- Сделаем два клона с него, от имени разработчиков (dev1 и dev2)
Кроме самого репозитория есть ещё и workspace, где хранятся файлы с которыми вы работаете. Именно в этой папке лежит сам репозиторий (папка .git ). На серверах рабочие файлы не нужны, поэтому там хранятся только голые репозитории (bare-repo).
Сделаем себе один (будет нашим главным тестовым репозиторием):
$ mkdir git-habr #создадим папку, чтоб не мусорить $ cd git-habr $ git init –bare origin Initialized empty Git repository in /home/sirex/proj/git-habr/origin/
Теперь клонируем его от имени разработчиков. Тут есть только один нюанс, которого не будет при работе с сервером: git, понимая, что репозитории локальные и находятся на одном разделе, будет создавать ссылки, а не делать полную копию. А нам для изучения нужна полная копия. Для этого можно воспользоваться ключом –no-hardlinks или явно указать протокол:
$ git clone –no-hardlinks origin dev1 Cloning into ‘dev1’… warning: You appear to have cloned an empty repository. done. $ git clone –no-hardlinks origin dev2 Cloning into ‘dev2’… warning: You appear to have cloned an empty repository. done.
Итог: у нас есть 3 репозитория. Там ничего нет, зато они готовы к работе.
Создание в данном каталоге
Если пользователь решает начать использование Git для уже имеющегося проекта, он должен перейти в каталог и инициализировать систему. Для этого нужна команда git init. Она создает в каталоге подкаталог, где будут находиться все нужные файлы. На данном этапе еще не устанавливается версионный контроль над проектом. Для добавления файлов под контроль нужно их проиндексировать и сделать первую фиксацию изменений.
Клонирование репозитория
Для получения копии уже существующего репозитория нужна команда git clone. С ее помощью Git получит копию почти всех данных с сервера. Это касается всех версий каждого файла. Очень удобная возможность, так как в случае выхода из строя сервера программист сможет использовать клон на любом клиенте для возврата сервера в то состояние, в каком он был при клонировании. Это похоже на точку восстановления.
Удаленный доступ и его особенности
Командная работа над проектом невозможна без обучения управлению удаленными репозиториями. Каждая модификация проекта хранится в Сети или на сервере системы контроля версий, такой как Git. Вариантов проекта с небольшими отличиями может быть несколько, и все они доступны другим разработчикам. Некоторые репозитории можно только просматривать, в другие разрешено вносить изменения. Для каждого такого действия в системе Git существует несколько специальных команд, позволяющих управлять удаленными копиями проектов. Все они являются модификацией основной команды — git remote.
Управление удаленным репозиторием в Git
Ниже рассмотрен процесс работы с удаленными хранилищами в Git. Обычно пользователям системы приходится делиться рядом коммитов, а не одним набором изменений. Вместо того, чтобы отправлять набор изменений из рабочей копии в центральный репозиторий, Git позволяет разработчикам обмениваться целыми ветвями между отдельными хранилищами. У каждого пользователя может быть несколько репозиториев, каждый из которых обычно доступен только для чтения или чтения и записи. Сотрудничество с другими людьми предполагает управление этими удаленными репозиториями. Именно для этого нужна команда для удаленного доступа — git remote. Она является одной из частей более широкой системы, отвечающей за синхронизацию изменений.
Особенности удаленного доступа
Записи, зарегистрированные при помощи команды удаленного доступа, используются в сочетании с командами git remote push, fetch и pull. Как git fetch, так и git pull можно использовать для чтения из удаленного репозитория. Команда git remote позволяет создавать, просматривать и удалять подключения к другим репозиториям. Например, push используется для того, чтобы поместить данные в хранилище, а pull, наоборот, чтобы получить. Команда fetch нужна, чтобы извлечь всю информацию, отсутствующую на локальной копии, из удаленного репозитория. После ее выполнения создаются ссылки на все новые ветки, в которых находятся недостающие данные. То есть обновления не сливаются с текущим проектом, а располагаются отдельно.
Впоследствии данные нужно будет сливать вручную, если возникнет такая необходимость. Для автоматического извлечения и соединения репозиториев используется git remote pull. Удаленные подключения больше напоминают закладки, чем прямые ссылки в другие репозитории. Вместо предоставления доступа в режиме реального времени они служат удобными именами, которые могут использоваться для ссылки на не очень удобный URL-адрес.
Команда удаленного доступа по сути является интерфейсом для управления списком записей, которые находятся в файле ./.git/config. Она нужна для управления удаленными хранилищами, удаления несуществующих, отслеживания определенных веток и смены адресов удаленных репозиториев (git change remote).
Отображение удаленных хранилищ
По умолчанию Git удаляет список ранее сохраненных удаленных подключений к другим репозиториям. При этом создается строка, в которой будут указаны имена удаленных репозиториев. Вызов git remote с параметром -v покажет список имен закладок репозитория и, кроме того, соответствующие им URL-адреса. Опция -v означает verbose. Команда git remote add создаст новую запись соединения в удаленном репозитории. После того как удаленная запись была настроена при помощи команды удаленного доступа, ее имя может быть передано другим командам Git для связи с хранилищем.
Конфигурация команды удаленного доступа
Ниже рассмотрены варианты использования команды для управления репозиториями. Простая запись git remote выдает список удаленных подключений. Существует несколько ее конфигураций. Команда удобна для внесения изменений в файл ./.git/config. Также его можно редактировать и вручную при помощи текстового редактора. Команда для удаленного доступа Git является одной из тех, что принимает дополнительные “подкоманды”.
Варианты “подкоманд”:
- Команда “git remote add
” используется для создания нового подключения к удаленному репозиторию. После добавления удаленного управления появляется возможность использовать как удобный ярлык для в других командах. Эта подкоманда принимает параметр -f, который добавляет имя ветви сразу после создания удаленной записи. А также параметр –tags”, который немедленно извлекает <имя> и импортирует каждый тег из удаленного репозитория. - Еще одна команда git remote rm
позволяет удалить соединение с удаленным репозиторием. Она изменяет /.git/config и удаляет файл с именем . Если затем выполнить эту команду с префиксом remote_test, можно увидеть, что запись больше не существует. - Запись git remote rename
переименовывает удаленное соединение. При этом сначала указывается старое имя, а затем — новое. Чтобы изменить удаленный URL-адрес репозитория, необходимо обновить конфигурационный файл новым URL-адресом. В противном случае вы получите сообщение об ошибке. - Команда get-url
выводит URL-адреса для удаленного доступа. При добавлении параметра – all будут перечислены все URL-адреса доступных удаленных хранилищ.
Всякие полезности
Git позволяет настраивать aliasы для различных команд. Это бывает очень удобно и сокращает время набора команд. Приводить здесь примеры не буду, в Интернете их полно, просто поищите.
Перед тем, как отдавать свои изменения их можно перестроить на самих себя, чтобы привести историю в порядок.
Например, в логах может быть такое:
9982f7b Finally make test works b21f8a5 Fixed typo in Test 3eabaab Fixed typo in Test e514869 Added Test for Foo b4439a2 Implemented Method for Foo 250adb1 Added class Foo
Перестроим сами себя, но начиная с 6 коммитов назад:
dev2(dev)$ git rebase -i dev~6 # т.к. нам всё равно отдавать это в origin/dev мы можем перестроить прямо на него dev2(dev)$ git rebase -i origin/dev
Теперь в интерактивном режиме можно объединить (squash) первые два коммита в один и последние четыре. Тогда история будет выглядеть так:
0f019d0 Added Test for class Foo a3ae806 Implemented class Foo
Такое намного приятнее передавать в общим репозиторий.
Обязательно посмотрите, что умеет git config и git config –global. Перед тем, как начнёте работать с реальным проектом, неплохо было бы настроить свой username и email:
git config –global user.name sirex git config –global user.email jsirex@gmail.com
На одном проекте у нас велась параллельная разработка очень многих фич. Они все разрабатывались в отдельных ветках, но тестировать их нужно было вместе. При этом на момент выпуска билда для тестирования не было понятно, готовы фичи или нет: могли поменяться требования или найтись серьёзные баги. И стал вопрос: как продолжить работу над всеми фичами не объединяя их в принципе никогда, но объединяя всё перед релизом? Противоречие? Git красиво помогает решить эту проблему и вот как:
- для выпуска билда была создана отдельная ветка, куда все фичи мержились (git merge –no-ff)
- ветка отдавалась на тестирование
- разработка продолжалась в своих ветках
- новые изменения опять объединялись (git merge –no-ff)
- Если тестируемую временную ветку просто удалить, все связанные коммиты с ней исчезнут и история опять распадётся на много отдельных веток. А их потом можно снова пересобрать
- Когда какая-то фича абсолютна готова к релизу, только её одну можно перестроить на dev и протолкнуть в релиз.
- Операция с остальными, неготовыми ветками, повторяется
Удаление файла в Git
Удалить из системы любой файл можно, если исключить его из индекса, то есть из отслеживаемых файлов. Для этого нужна команда git rm. Она также убирает файл из рабочего каталога пользователя. Затем нужно выполнить коммит. После него файл попросту исчезнет и отслеживаться больше не будет. Если же он изменен и уже проиндексирован, то применяют принудительное удаление с параметром -f. Такой способ предотвратит удаление тех данных, которые еще не записались в снимок состояния и которые нет возможности восстановить из системы.
Отмена изменений
В любой момент может появиться необходимость в отмене какого-либо действия. Если пользователь выполнил коммит рано, забыв внести некоторые файлы, то можно перевыполнить его, используя опцию –amend. Такая команда использует для коммита индекса. Если после выполнения последнего сохранения не производилось никаких изменений, то проект будет в таком же состоянии, и появится редактор для комментариев, где пользователь сможет отредактировать все, что нужно. Нужно помнить, что не каждую операцию отмены можно будет отменить. Иногда можно безвозвратно удалить необходимые данные. Следует быть внимательными.
Переключение веток
Команда git checkout позволяет перемещаться между ветками, созданными командой git branch. При переключении ветки происходит обновление файлов в рабочем каталоге в соответствии с версией, хранящейся в этой ветке, а Git начинает записывать все новые коммиты в этой ветке. Рассматривайте эту команду как способ выбрать направление для развития в рамках своей разработки.
Наличие выделенной ветки для каждой новой функции сильно отличается от традиционного рабочего процесса в SVN. Это значительно облегчает проведение новых экспериментов без страха разрушить существующую функциональность и позволяет одновременно работать со множеством несвязанных функций. Кроме того, ветки облегчают ведение нескольких совместных рабочих процессов.
Иногда команду git checkout можно спутать с командой git clone. Разница между этими двумя командами заключается в том, что при клонировании (clone) выполняется извлечение кода из удаленного репозитория, тогда как при переключении (checkout) происходит переключение между версиями кода, который уже находится в локальной системе.
Использование: существующие ветки
Если предположить, что ваш рабочий репозиторий уже содержит существующие ветки, вы можете переключаться между этими ветками с помощью команды git checkout. Чтобы узнать, какие ветки доступны и как называется текущая ветка, выполните команду git branch.
$> git branch master another_branch feature_inprogress_branch $> git checkout feature_inprogress_branch
В вышеприведенном примере показано, как просмотреть список доступных веток с помощью команды git branch и переключиться на конкретную ветку (в данном случае — на ветку feature_inprogress_branch).
Новые ветки
Команда git checkout часто используется вместе с командой git branch . С помощью команды git branch можно создать новую ветку. Когда вы захотите начать работу над новой функцией, создайте новое ответвление от ветки master с помощью команды git branch new_branch. Затем переключитесь на новую ветку с помощью команды git checkout new_branch. Команда git checkout также принимает аргумент -b, который действует как вспомогательный метод, позволяя создать новую ветку и сразу переключиться на нее. Вы можете работать сразу с несколькими функциями в одном репозитории, переключаясь между ними с помощью git checkout.
git checkout -b
Переключение веток
Переключение веток — простая операция. При выполнении следующей команды указатель HEAD будет перенесен на последний коммит ветки
Git отслеживает историю операций переключения в журнале ссылок reflog. Чтобы просмотреть эту историю, выполните команду git reflog.
Переключение на удаленную ветку
При совместной работе команды нередко используют удаленные репозитории. Такие репозитории могут размещаться на сервере с предоставлением общего доступа либо это может быть локальная копия другого коллеги. Каждый удаленный репозиторий содержит собственный набор веток. Для переключения на удаленную ветку нужно сначала извлечь содержимое этой ветки.
git fetch –all
В современных версиях Git переключение на удаленную ветку не отличается от переключения на локальную ветку.
git checkout
В более старых версиях Git необходимо создать новую ветку на основе удаленной (remote).
git checkout
Кроме того, можно переключиться на новую локальную ветку и сбросить ее до последнего коммита удаленной ветки.
git checkout -b
Открепленные указатели HEAD
Теперь, когда мы рассмотрели три основных варианта использования команды git checkout на ветках, важно обсудить состояние detached HEAD, или состояние открепленного указателя HEAD. Помните, что HEAD — это указатель на текущий снимок в Git. Сама команда git checkout просто обновляет указатель HEAD, чтобы он ссылался на указанную ветку или коммит. Когда HEAD указывает на ветку, Git молчит, но при попытке переключиться на коммит он переходит в состояние detached HEAD (открепленный указатель HEAD).
Это сообщение предупреждает о том, что вся текущая работа «откреплена» от остальной части вашего проекта. Если вы начнете разрабатывать функцию, находясь в состоянии открепленного указателя HEAD, у вас не будет ветки, которая позволила бы вам вернуться к этой функции. Когда вы неизбежно переключитесь на другую ветку (например, чтобы слить код своей функции), вы уже никак не сможете сослаться на свою функцию:
Всегда ведите разработку на ветке, а не на открепленном указателе HEAD. Это гарантия того, что у вас всегда будет ссылка на ваши новые коммиты. Вместе с тем при просмотре предыдущего коммита состояние указателя HEAD не имеет значения, он может быть как откреплен, так и нет.
Добавление Git Remote
Удаленный репозиторий должен существовать до того, как вы добавите git remote в ваш локальный репозиторий. Вы можете создать репозиторий в службе хостинга Git, такой как GitHub, GitLab и BitBucket, или на своем частном сервере Git.
Чтобы добавить новый удаленный каталог, перейдите в каталог, в котором хранится ваш репозиторий, и используйте команду git remote add, за которой следует удаленное имя и удаленный URL:
git remote add
Например, чтобы добавить новый remote с именем staging указывающим на git@gitserver.com:user/repo_name.git, введите:
git remote add staging git@gitserver.com:user/repo_name.git
Чтобы убедиться, что новый пульт был успешно добавлен, используйте команду git remote для просмотра списка удаленных соединений:
git remote -v
Вывод будет выглядеть примерно так:
origin https://github.com/user/repo_name.git (fetch) origin https://github.com/user/repo_name.git (push) staging git@gitserver.com:user/repo_name.git (fetch) staging git@gitserver.com:user/repo_name.git (push)
На самом деле команда git remote add изменяет файл репозитория .git/config и новое соединение с удаленным репозиторием.
.git/config… [remote “staging”] url = git@gitserver.com:user/repo_name.git fetch = +refs/heads/*:refs/remotes/staging/*
Вы можете добавить новый remote, отредактировав файл .git/config с помощью текстового редактора, но использовать команду намного проще.
Вот и все. Вы успешно добавили Git remote.
Чтобы перенести ваш код на remote, вы должны использовать:
git push
Чтобы извлечь и извлечь из удаленного использования:
git fetch
15 команд Git, о которых вы, возможно, не знали
1. Изменение последнего коммита
git commit –amend
—amend позволяет добавлять подготовленные (staged) изменения к предыдущему коммиту (например, добавлять забытый файл). Если изменений нет, то —amend даст вам возможность переписать сообщение этого коммита (commit message). А если приписать —no-edit, то наоборот: можно будет внести изменения в сам коммит, не затрагивая commit message.
Узнать больше: git help commit
2. Интерактивное добавление отдельных частей файлов
git add -p
-p (или —patch) позволяет интерактивно выбирать для добавления в коммит части отслеживаемый файлов. Таким образом коммит будет содержать только нужные изменения.
Узнать больше: git help add
3. Интерактивное скрытие отдельных частей файлов
git stash -p
Опцию —patch можно добавлять не только к git-add. Добавленная к git stash, она позволяет интерактивно выбирать части отслеживаемых файлов, которые вы хотели бы скрыть.
Узнать больше: git help stash
4. Скрытие файлов, включая неотслеживаемые
По умолчанию при скрытии файлов неотслеживаемые файлы не учитываются. Чтобы изменить это поведение и включить в stash также и эти файлы, нужно использовать параметр -u. Есть также параметр -a (—all), который позволяет скрывать как неотслеживаемые, так и игнорируемые файлы, но это, вероятно, не то, что вам обычно нужно.
5. Интерактивный «сброс» выбранных частей файлов
git checkout -p
—patch можно также использовать для выборочного сброса частей отслеживаемых файлов. Я задал этой команде псевдоним git discard.
Узнать больше: git help checkout
6. Переключение в предыдущую ветку
git checkout –
Эта команда позволяет вам быстро переключиться на ранее просматриваемую ветку. Знак дефиса это псевдоним предыдущей ветки. Его можно использовать и с другими командами.
7. Сброс всех локальных изменений
git checkout .
Если вы уверены, что все ваши локальные изменения можно сбросить, то для одновременного сброса вы можете использовать символ точки. Тем не менее, хорошей практикой будет всегда использовать checkout —patch.
8. Показать изменения
git diff –staged
Эта команда показывает все подготовленные изменения (проиндексированные). Если вы введете просто git diff, будут показаны изменения только в рабочей директории.
Узнать больше: git help diff
9. Локальное переименование веток
git branch -m old-name new-name
Если вы хотите переименовать ветку, в которой находитесь на данный момент, можно сократить команду:
git branch -m new-name
Узнать больше: git help branch
10. Переименование веток удаленно
Чтобы переименовать ветку в удаленном репозитории после того как вы переименовали ее локально, вам нужно сначала удалить эту ветку в удаленном репозитории, а затем снова залить переименованную ветку.
git push origin :old-namegit push origin new-name
11. Открыть все файлы с конфликтами одновременно
Перемещение (rebasing) может приводить к конфликтам. Следующая команда откроет все файлы, где нужно разрешить эти конфликты.
git diff –name-only –diff-filter=U | uniq | xargs $EDITOR
12. Что изменилось?
git whatchanged –since=‘2 weeks ago’
Эта команда покажет лог изменений, представленных по каждому коммиту за последние две недели.
13. Удаление файла из последнего коммита
Скажем, вы сделали коммит файла по ошибке. Этот файл можно быстро удалить из последнего коммита путем комбинации команд rm и commit —amend:
git rm –cached
Шпаргалка программиста по работе с Git
28 декабря 2011
Некоторое время назад я открыл для себя Git. И знаете, я проникся. То есть, по-настоящему проникся. Теперь я использую Git не только на работе (где я с ним, собственно, познакомился), но и для своих проектиков, которые я стал хранить на BitBucket. Последний начал поддерживать Git относительно недавно. В отличие от GitHub, BitBucket позволяет совершенно бесплатно создавать как открытые, так и закрытые репозитории.
В чем состоит отличие Git от Subversion?
Главное отличие Git от Subversion заключается в том, что Git — распределенная система контроля версий. Звучит ужасающе, но на практике это означает очень простую вещь. Каждый разработчик держит у себя на диске отдельный репозиторий. Обратите внимание — не копию репозитория, не некоторые бранчи, а тупо отдельный и при этом абсолютно полноценный репозиторий.
Пока мы работаем в рамках своего репозитория, все происходит в точности, как в Subversion. Мы коммитим и откатываем изменения, создаем, мержим и удаляем бранчи, разрешаем конфликты и тд. Помимо этого, предусмотрены команды для работы с репозиториями на удаленных машинах. Например, «git push» означает мерж локальных изменений в удаленный репозиторий, а «git pull» — наоборот, мерж изменений из удаленного репозитория в локальный. Обмен данными по сети обычно происходит с использованием протокола SSH.
В результате имеем:
- Git присущи все те же преимущества от использования VCS, что мы получаем в Subversion.
- Git дает нам нормальное шифрование «из коробки», безо всяких танцев с бубнами, как в случае с Subversion.
- Если сервер с «главным» репозиторием, куда пушат свои изменения все разработчики (хотя формально в Git нет никакого «главного» репозитория), вдруг прилег — ничего страшного. Делаем коммиты в локальный репозиторий и ждем, когда сервер вернется.
- Даже если сервер доступен, все равно удобнее сделать пяток локальных коммитов, а затем отправить их на сервер одним пушем.
- Сервер вообще не нужен. Вы можете использовать Git только локально. И не обязательно для работы с исходниками. Например, можно использовать Git для того, чтобы иметь возможность откатиться к предыдущим версиям файлов (каких-нибудь электронных таблиц) или вернуть случайно удаленные.
- Git не раскидывает по каталогам служебную информацию (помните «.svn»?), вместо этого она хранится только в корне репозитория.
- Git нынче очень моден (хотя это далеко не единственная распределенная система контроля версий, например, есть Mercurial и Darcs), в связи с чем растет число разработчиков, использующих его. Как следствие, используя Git, легче получить помощь на каком-нибудь форуме или собрать команду разработчиков, знакомых с этой VCS.
- Существует множество полезных утилит для работы с Git — Qgit, gitk, gitweb и другие. «Из коробки» есть импорт и экспорт в/из Subversion/CVS.
- Git поддерживают многие хостинги репозиториев (GitHub, BitBucket, SourceForge, Google Code, …) — есть из чего выбрать.
- Большой популярностью пользуется GitHub. Используя Git, вы увеличиваете вероятность того, что кто-то захочет безвозмездно написать патч для вашего open source проекта.
Пример использования Git
Я использовал Git при написании программы из заметки Генерация почти осмысленных текстов на Haskell, сидя под своей любимой FreeBSD. Вот как примерно выглядела моя работа с Git.
В первую очередь необходимо поставить Git:
pkg_add -rgit
Затем создаем пару ssh ключей, если не создавали ее ранее:
ssh-keygen
cat ~/.ssh/id_rsa.pub
Заходим на БитБакет, создаем git-репозиторий под новый проект, а в свойствах аккаунта прописываем свой открытый ssh-ключ. Затем клонируем репозиторий:
cd ~/projects/haskell
git clonegit@bitbucket.org:afiskon/hs-textgen.git
cd hs-textgen
Делаем какие-то изменения:
echotest> TODO.TXT
Добавляем новый файл в репозиторий и делаем коммит:
git add TODO.TXT
git commit-a
Поскольку я не указал описание коммита, запускается редактор VIM, с помощью которого я и ввожу описание. Затем я отправляю все сделанные мною изменения на БитБакет:
git push origin
Допустим, теперь я хочу сделать некоторые изменения в проекте, но не уверен, выйдет ли из этого что-то хорошее. В таких случаях создается новая ветка:
git branch new_feature
git checkout new_feature
Работаем с этой веткой. Если ничего хорошего не вышло, возвращаемся к основной ветке (она же «trunk» или «ствол»):
git checkout master
Если вышло что-то хорошее, мержим ветку в master (о разрешении конфликтов рассказано в следующем параграфе):
git commit-a# делаем коммит всех изменений в new_feature
git checkout master # переключаемся на master
git merge new_feature # мержим ветку new_feature
Не забываем время от времени отправлять наш код на BitBucket:
git push origin
Если мы правим код с нескольких компьютеров, то перед началом работы не забываем «накатить» в локальный репозиторий последнюю версию кода:
git pull origin
Работа в команде мало чем отличается от описанного выше. Только каждый программист должен работать со своей веткой, чтобы не мешать другим программистам. Одна из классических ошибок при начале работы с Git заключается в push’евсех веток, а не только той, с которой вы работали. Вообще я бы советовал первое время перед выполнением каждого push делать паузу с тем, чтобы подумать, что и куда сейчас уйдет. Для большей безопасности советую при генерации ssh-ключей указать пароль. Тогда каждый запрос пароля со стороны Git будет для вас сигналом «Эй, ты делаешь что-то, что затронет других».
Fun fact! Нравится статья? Поддержи автора, чтобы он мог писать больше полезных статей!
Для работы с Git под Windows можно воспользоваться клиентом TortoiseGit. Если память не подводит, для работы ему нужен Git for Windows. Для генерации ключей можно воспользоваться утилитой PuTTyGen. Только не забудьте экспортировать открытый ключ в правильном формате, «Conversions → Export OpenSSH key».
Следует отметить, что мне лично TortoiseGit показался не слишком удобным. Возможно, это всего лишь дело привычки, но мне кажется намного удобнее работать с Git из консоли, чем с помощью контекстного меню в Проводнике.
Шпаргалка по командам
В этом параграфе приведена сухая шпаргалка по командам Git. Я далеко не спец в этой системе контроля версий, так что ошибки в терминологии или еще в чем-то вполне возможны. Если вы видите в этом разделе ошибку, отпишитесь, пожалуйста, в комментариях.
Создать новый репозиторий:
git init project-name
Если вы планируете клонировать его по ssh с удаленной машины, также скажите:
git config–bool core.bare true
… иначе при git push вы будете получать странные ошибки вроде:
Refusing to update checked out branch: refs/heads/master
By default, updating the current branch in a non-bare repository
is denied, because it will make the index and work tree inconsistent
with what you pushed, and will require ‘git reset –hard’ to match
the work tree to HEAD.
Клонировать репозиторий с удаленной машины:
git clonegit@bitbucket.org:afiskon/hs-textgen.git
Если хотим пушить один код в несколько репозиториев:
git remote add remotename git@gitlab.example.ru:repo.git
Добавить файл в репозиторий:
git add text.txt
Удалить файл:
git rm text.txt
Текущее состояние репозитория (изменения, неразрешенные конфликты и тп):
git status
Сделать коммит:
git commit-a-m”Commit description”
Сделать коммит, введя его описание с помощью $EDITOR:
git commit-a
Замержить все ветки локального репозитория на удаленный репозиторий (аналогично вместо origin можно указать и remotename, см выше):
git push origin
Аналогично предыдущему, но делается пуш только ветки master:
git push origin master
Запушить текущую ветку, не вводя целиком ее название:
git push origin HEAD
Замержить все ветки с удаленного репозитория:
git pull origin
Аналогично предыдущему, но накатывается только ветка master:
git pull origin master
Накатить текущую ветку, не вводя ее длинное имя:
git pull origin HEAD
Скачать все ветки с origin, но не мержить их в локальный репозиторий:
git fetch origin
Аналогично предыдущему, но только для одной заданной ветки:
git fetch origin master
Начать работать с веткой some_branch (уже существующей):
git checkout-b some_branch origin/some_branch
Создать новый бранч (ответвится от текущего):
git branch some_branch
Переключиться на другую ветку (из тех, с которыми уже работаем):
git checkout some_branch
Получаем список веток, с которыми работаем:
git branch# звездочкой отмечена текущая ветвь
Просмотреть все существующие ветви:
git branch-a# | grep something
Замержить some_branch в текущую ветку:
git merge some_branch
Удалить бранч (после мержа):
git branch-d some_branch
Просто удалить бранч (тупиковая ветвь):
git branch-D some_branch
История изменений:
git log
История изменений в обратном порядке:
git log–reverse
История конкретного файла:
git log file.txt
Аналогично предыдущему, но с просмотром сделанных изменений:
git log-p file.txt
История с именами файлов и псевдографическим изображением бранчей:
git log–stat–graph
Изменения, сделанные в заданном коммите:
git show d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
Посмотреть, кем в последний раз правилась каждая строка файла:
git blame file.txt
Удалить бранч из репозитория на сервере:
git push origin :branch-name
Откатиться к конкретному коммиту (хэш смотрим в «git log»):
git reset–hard d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
Аналогично предыдущему, но файлы на диске остаются без изменений:
git reset–soft d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
Попытаться обратить заданный commit:
git revert d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
Просмотр изменений (суммарных, а не всех по очереди, как в «git log»):
git diff# подробности см в “git diff –help”
Используем vimdiff в качестве программы для разрешения конфликтов (mergetool) по умолчанию:
git config–global merge.tool vimdiff
Отключаем диалог «какой mergetool вы хотели бы использовать»:
git config–global mergetool.prompt false
Отображаем табы как 4 пробела, например, в «git diff»:
git config–global core.pager ‘less -x4’
Создание глобального файла .gitignore:
git config–global core.excludesfile ~/.gitignore_global
Разрешение конфликтов (когда оные возникают в результате мержа):
git mergetool
Создание тэга:
git tag some_tag # за тэгом можно указать хэш коммита
Удаление untracked files:
git clean-f
«Упаковка» репозитория для увеличения скорости работы с ним:
git gc
Иногда требуется создать копию репозитория или перенести его с одной машины на другую. Это делается примерно так:
mkdir-p/tmp/git-copy
cd/tmp/git-copy
git clone–baregit@example.com:afiskon/cpp-opengl-tutorial1.git
cd cpp-opengl-tutorial1.git
git push–mirrorgit@example.com:afiskon/cpp-opengl-tutorial2.git
Следует отметить, что Git позволяет использовать короткую запись хэшей. Вместо «d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4» можно писать «d8578edf» или даже «d857».
Дополнение: Также в 6-м пункте Мини-заметок номер 9 приводится пример объединения коммитов с помощью git rebase, а в 10-м пункте Мини-заметок номер 11 вы найдете пример объединения двух репозиториев в один без потери истории.
Работа с сабмодулями
Более подробно сабмодули и зачем они нужны объясняется в заметке Простой кроссплатформенный OpenGL-проект на C++. Здесь упомянем самое главное.
Добавить сабмодуль:
git submodule add https://github.com/glfw/glfw glfw
Инициализация сабмодулей:
git submodule init
Обновление сабмодулей, например, если после git pull поменялся коммит, на который смотрит сабмодуль:
git submodule update
Удаление сабмодуля производится так:
- Скажите git rm–cached имя_сабмодуля;
- Удалите соответствующие строчки из файла .gitmodules;
- Также грохните соответствующую секцию в .git/config;
- Сделайте коммит;
- Удалите файлы сабмодуля;
- Удалите каталог .git/modules/имя_сабмодуля;
Что могу посоветовать
Если мы работаем в одиночку, то удаленный репозиторий нужен только для сохранения резевной копии. Скорее всего, мы будем в него только пушить.
Но при работе в команде имеет смысл подумать над такими вещами:
- пушить коммиты почаще, чтобы коллеги быстрее получали доступ к новым изменениям
- пулиться почаще – обратная ситуация, почаще получать свежие изменения
- всегда пультесь с флажком ребейза – git pull –rebase origin master
- не удивляйтесь, что при пуллах и пушах могут возникать подобные ситуации, как мы рассматривали выше
- не стесняйтесь спрашивать коллег, если увидели незнакомую ситуацию
- больше практикуйтесь. Посадите домашний проект на git и работайте с ним
Не переживайте, если иногда будете чувствовать себя, как друзья ниже. Это нормально, новый инструмент не осваивается за 5 минут. Немного практики, и мы будем понимать, почему иногда git ведет себя не так, как хочется, и главное, будем понимать, как это исправить.
В следующем уроке мы узнаем, что такое ветки и будем активно работать с ними. Там мы будем активно использовать git push и git pull, и это поможет закрепить уже пройденный материал.
Спасибо за внимание и до встречи!
[spoiler title=”Источники”]
- https://www.hostinger.ru/rukovodstva/osnovnie-git-komandy
- https://FB.ru/article/278293/git—chto-takoe-git-dlya-nachinayuschih-opisanie
- https://marklodato.github.io/visual-git-guide/index-ru.html
- https://habr.com/ru/post/174467/
- https://FB.ru/article/429161/git-remote-opisanie-poryadok-rabotyi-repozitsii
- https://www.atlassian.com/ru/git/tutorials/using-branches/git-checkout
- https://andreyex.ru/operacionnaya-sistema-linux/kak-dobavit-git-remote/
- https://techrocks.ru/2019/04/03/15-useful-git-commands/
- https://eax.me/git-commands/
- https://webdevkin.ru/courses/git/git-push-pull
[/spoiler]
Linux обзор для начинающих — основные моменты, история
Принцип работы операционной системы
ОС представляет собой набор программ, которые управляют работой компьютера. Основные функции ОС:
- Контролирует загрузку процессора
- Управляет ресурсами оперативной памяти, карт памяти или жестким диском
- Отвечает за распределение задач и процессов
- Обновляет, устанавливает и удаляет приложения и программы
Первой популярной операционной системой стала Windows 95. Ее главная особенность состояла в графическом интерфейсе. Благодаря этому пользователь мог управлять компьютером с помощью курсора мыши. До этого нужно было использовать специальные команды, что было трудно доступным для понимания большинства людей.
На сегодняшний день есть множество разновидностей операционных систем. Далеко не все пользуются большим спросом, но лишь некоторые из них. Для ПК мы рассмотрим основные ОС: Windows, Mac OS, Linux. Среди мобильных устройств – основные ОС: Android, IOS, Windows Mobile.
Почему стоит сменить Windows на Linux?
А так большинство людей вполне устраивают эти операционные системы, в них есть всё, что им нужно. Но на самом деле причины использовать именно операционную систему Linux есть, и не у меня одного. Какие они? Вот мои ЛИЧНЫЕ наблюдения.
Графический интерфейс пользователя Linux
Основными и популярными графическими оболочками в Linux являются:
- KDE (K Desktop Environment) – одна из самых крупных и популярных графических оболочек, имеет красивый, удобный и функциональный интерфейс, за счет этого достаточно требовательная к ресурсам компьютера;
- GNOME (GNU Network Object Model Environment) – еще одна среда рабочего стола, которая широко распространена и также является очень популярной и функциональной. Начиная с 3 версии, в GNOME стала применяться технология «GNOME Shell», что сделало эту среду абсолютно новой и значительно отличающейся от классического варианта. Именно этот факт и сподвиг к созданию новых оболочек, которые продолжали классическую среду GNOME, но уже с другим названием;
- MATE – имеет интуитивно понятный и, главное, удобный интерфейс пользователя, за счет этого она очень привлекательна. Данная среда является продолжением классического интерфейса GNOME;
- Cinnamon – еще одно продолжение классического GNOME с применением современных технологий. Очень удобная, функциональная и красивая среда рабочего стола;
- Xfce – простая, функциональная и в то же время очень быстрая и легкая графическая оболочка;
- LXDE (Lightweight X11 Desktop Environment) – одна из самых легких и быстрых, не требовательная к ресурсам компьютера среда рабочего стола, поэтому она имеет весьма консервативный интерфейс.
Особенность Linux и отличие от Windows
Основная особенность и отличие Linux от семейства операционных систем Windows состоит в том, что в Linux используется совершенно другой подход к организации файловой системы и применении совершенно других типов файловых систем.
В Windows Вы привыкли видеть логические диски C, D и так далее, в Linux таких дисков нет. Вместо этого в Linux есть корень (/) от которого все и произрастает. Все адреса файлов и каталогов начинаются именно с корня, все разделы монтируются в корень, включая физические диски (USB флешки и так далее).
Таким образом, абсолютно все физические диски и разделы объединены в единую файловую структуру, начинающуюся с корня (/).
В Linux, как уже было отмечено, используются другие файловые системы, не такие как, например, в Windows – NTFS или FAT, хотя Linux умеет работать с данными типами файловых систем.
В Linux активно используются следующие типы файловых систем:
- ext4 – современная журналируемая файловая система, которая является стандартной для Linux;
- btrfs – достаточно новая файловая система, основанная на структурах B-деревьев, в некоторых тестах она показывает даже лучшую производительность по сравнению с ext4;
- xfs – данную файловую систему отличает достаточно высокая производительность в части записи и чтения данных. Однако из-за особенностей данной файловой системы в случае серьезных сбоев существует риск потери данных.
В целом внутренняя работа систем Linux и Windows, конечно же, значительно отличается, но на сегодняшний день для рядового пользователя домашнего компьютера эти отличия практически не видны. Современный Linux – это очень удобная, уже ориентированная на обычного пользователя операционная система.
Но тем не менее Windows все равно остается самой популярной операционной системой, и как раз-таки за счет этого, самой уязвимой. Так как именно под Windows создается большинство вирусов, ежедневно «плохие» разработчики ищут уязвимости этой операционной системы с целью создать очередной вирус.
В Linux с вирусами дела обстоят намного лучше, т.е. под Linux вирусов создаётся гораздо меньше, и как результат Linux считается более безопасной и устойчивой к вирусам операционной системой.
Если говорить о программном обеспечении, то Linux настолько стал распространён, что под эту систему разрабатывается огромное количество приложений, включая самые популярные, которые есть в Windows. И, кстати, установка приложений в современном Linux стала гораздо проще, чем в Windows. Процесс установки напоминает что-то вроде установки приложений на смартфонах, т.е. все устанавливается из одной точки в один клик. То есть Вы запускаете компонент системы, который обращается к репозиториям и считывает список доступных пакетов (с описанием, с оценками, с комментариями других пользователей), а Вы просто кликаете на тот, который Вам нужен и все. Конечно, такой функционал есть не во всех дистрибутивах Linux, но в самых популярных установка происходит именно так.
Также главным отличием от Windows является то, что Linux — это абсолютно бесплатная операционная система с открытым исходным кодом. Любой разработчик может доработать ее и создать на ее основе свою собственную систему на абсолютно законных правах. Все программное обеспечение в Linux в основном также бесплатное. Linux можно свободно распространять и использовать. Поэтому и существует огромное количество дистрибутивов Linux, а что это такое, я сейчас расскажу.
Что такое дистрибутив Linux?
Дистрибутив Linux – это разновидность операционной системы Linux. Дистрибутивов Linux много, так как любой разработчик может использовать ядро Linux и создать свою собственную операционную систему. Таким образом, разработчики объединяются в сообщества и создают операционные системы на базе ядра линукс, которые и являются дистрибутивами. В дистрибутивы включают все необходимое программного обеспечение для работы, и зачастую в большинстве дистрибутивов есть все, что нужно для того чтобы начать пользоваться системой сразу после установки, в отличие от той же Windows, где нужно после установки системы еще доустановить необходимое для работы программное обеспечение.
Также дистрибутивы могут создавать и поддерживать различные компании, и такие дистрибутивы уже могут быть платными.
Дистрибутив Linux может быть основан на другом дистрибутиве, и, таким образом, рождается бесчисленное множество разновидностей дистрибутивов, которые основаны друг на друге и все они имеют одну базу, одну основу.
Практически у каждого дистрибутива есть свой репозиторий, в котором хранятся все совместимые и поддерживаемые дистрибутивом пакеты, соответственно, при установке приложений из стандартных репозиториев Вы всегда устанавливаете только проверенные версии программ.
Дистрибутивы Linux можно условно разделить на две очень крупные ветки развития, два направления. Здесь я имею в виду деление по способу организации и управления программным обеспечением, т.е. пакетами.
Существуют две популярные системы управления пакетами:
- DEB – формат файлов пакетов, использующихся в дистрибутиве Debian и во всех основанных на нем дистрибутивах;
- RPM – менеджер пакетов, использующийся в дистрибутиве Red Hat, а также во многих других популярных дистрибутивах.
Если Вы начинающий пользователь Linux, то Вам не нужно смотреть, на какой системе управления пакетами основан дистрибутив, Вам нужно смотреть на дистрибутив как на конечный продукт, т.е. для каких целей он разработан. Я привел это деление только для того, чтобы Вы знали, что оно существует, оно практически никак не скажется на Вашем знакомстве с операционной системой Linux. Единственное, когда Вы с этим столкнетесь — это тогда, когда будете устанавливать стороннее программное обеспечение, которого нет в стандартных репозиториях. Так как Вам нужно будет выбирать тот тип пакета для установки, который соответствует Вашей системе.
Перед тем как переходить на Linux, Вам нужно узнать, для чего создан и предназначен конкретный дистрибутив. Так как существуют, например, дистрибутивы, не имеющие графической оболочки, т.е. серверные системы, существуют дистрибутивы, которые управляются исключительно в командной строке, и созданы для продвинутых пользователей, но в то же время существуют максимально простые и ориентированные на пользователя дистрибутивы, которые не уступают Windows.
Подробней про дистрибутивы Linux мы поговорим в следующем материале.
Виды операционных систем
Чаще всего, при покупке компьютера, операционная система уже установлена. Большинство из вас даже не задувается о том какая она. А знать свою систему очень важно, хотя бы потому, что разные ОС по-разному работают, настраиваются, и даже рабочий стол у них разный.
Существуют три основные и самые популярные операционные системы:
-
Microsoft Windows (Microsoft – это фирма, выпускающая эту систему, а Windows (виндовс), в переводе с английского, означает – окна):
-
Apple Mac Os X (сокращенно ее называют Mac, а Apple – это фирма (в переводе с английского, означает — яблоко);
-
Linux.
Каждая операционная система имеет свой вид, так называемый графический интерфейс (от англ. – лицо).
Первые ОС, под названием MS-DOS, не имели графического интерфейса. Работа в них была только через командную строку при помощи клавиатуры. Никаких мышек тогда не было, да и не нужны они были. Необходимо было знать и запоминать много команд на английском языке. А на мониторе были только цифры и буквы, в лучшем случае графики. Простому пользователю все это было не понятно и не интересно.
В середине 1980-х годов компания Microsoft создала операционную систему Windows, и началась новая эра, благодаря которой, мы с вами теперь на компьютере писать письма, книги, работать с фотографиями, картинками, создавать свои фильмы, сайты, «гулять» по интернету и учиться новым наукам и ремеслам.
Вот список ОС Windows:
- Windows 1.0 (1985)
- Windows 2.0 (1987)
- Windows 3.0 (1990)
- Windows 3.1 (1992)
- Windows for Workgroups 1/3.11
Семейство Windows 9x, в которых уже могли работать такие, как мы с вами:
- Windows 95 (1995)
- Windows 98 (1998)
- Windows ME (2000)
Семейство Windows NT
- Windows NT 3.1 (1993)
- Windows NT 3.5 (1994)
- Windows NT 3.51 (1995)
- Windows NT 4.0 (1996)
- Windows 2000 — Windows NT 5.0 (2000)
- Windows XP — Windows NT 5.1 (2001)
- Windows XP 64-bit Edition — Windows NT 5.2 (2003)
- Windows Server 2003 — Windows NT 5.2 (2003)
- Windows XP Professional x64 Edition — Windows NT 5.2 (2005)
- Windows Vista — Windows NT 6.0 (2006)
- Windows Home Server — Windows NT 5.2 (2007)
- Windows Server 2008 — Windows NT 6.0 (2008)
- Windows Small Business Server — Windows NT 6.0 (2008)
- Windows 7 — Windows NT 6.1 (2009)
- Windows Server 2008 R2 — Windows NT 6.1 (2009)
- Windows Home Server 2011 — Windows NT 6.1 (2011)
- Windows 8 — Windows NT 6.2 (2012)
- Windows Server 2012 — Windows NT 6.2 (2012)
- Windows 8.1 — Windows NT 6.3 (2013)
- Windows Server 2012 R2 — Windows NT 6.3 (2013)
- Windows 10 — Windows NT 10.0 (2015)
Семейство ОС для смартфонов:
-
Windows CE
-
Windows Mobile
-
Windows Phone
-
Windows 10 Mobile
Это только семейство Windows, и то еще не все. Остальные вам никогда и не встретятся, т.к. они не предназначены для домашнего пользования.
Вам, скорее всего, знакомы только эти:
- Windows XP Professional
- Windows Vista
- Windows 7
- Windows 8
- Windows 8.1
- Windows 10
1. Debian и другие Deb системы
Эта группа включает дистрибутивы, основанные на Debian и другие, использующие систему управления пакетами Deb. Эта система пакетами была разработана для Debian и сейчас довольно часто используется популярных дистрибутивах, это сам Debian, Ubuntu, LinuxMint, AstraLinux, Elementary и множество других. Эти дистрибутивы используют оригинальное ядро Linux с несколькими исправлениями, которые только убирают ошибки.
2. Red Hat и другие Rpm системы
Пока сообщество разрабатывало систему управления пакетами Deb, компания Red Hat создала собственный менеджер пакетов – Rpm. Тогда все традиционные дистрибутивы Linux разделились на два лагеря – использующие deb и rpm. Сейчас обе системы управления пакетами хороши и нельзя сказать что она хуже другой. Вы можете почитать подробное сравнение Deb vs Rpm в статье по ссылке. Сейчас систему управления пакетами RPM используют такие дистрибутивы, как CentOS, Fedora, Red Hat, OpenSUSE и другие менее популярные.
3. Arch Linux и основанные на нем
Спустя некоторое время, появилось еще несколько дистрибутивов не использующие ни Deb ни Rpm. Один из таких дистрибутивов – ArchLinux. Тут применяется собственный пакетный менеджер pacman, который позволяет делать все то же самое что и deb, но в дополнение реализована простая система скользящих релизов. Благодаря ей в дистрибутиве всегда самое новое программное обеспечение. Arch быстро набрал популярность и на нем было основано несколько дистрибутивов – Manjaro, Antergos, Cinnarch и много других.
4. Gentoo
Многие пользователи хотели иметь возможность компилировать свою систему сами, чтобы выбрать какое программное обеспечение устанавливать, а также получить оптимизацию под свое оборудование. Поэтому был создан дистрибутив Gentoo на основе ядра Linux, в котором используется пакетный менеджер emerge. Тут вы тоже получаете скользящие релизы, а также возможность относительно просто скомпилировать вашу операционную систему на своем компьютере. Пакетный менеджер emerge уже содержит готовые сборочные скрипты, поэтому ничего дописывать самому не придется.
5. Linux From Scratch
Это не совсем дистрибутив, LFS – это набор инструментов, которые позволяют вам собрать собственный дистрибутив на основе ядра Linux. Вы просто берете ядро, берете исходники нужных программ, все программ начиная от системы инициализации и командной оболочки и заканчивая окружением рабочего стола, собираете все это, настраиваете и получаете свой дистрибутив.
6. ChromeOS
Еще позже Google выпустила свою операционную систему для нетбуков на ядре Linux. Фактически ChromeOS основана на Gentoo, но они настолько разные, что их невозможно объединить в один пункт. В этой системе Google реализовала такую идею, как облачная операционная система Linux. Ваше рабочее пространство – это браузер. Здесь вам все предстоит делать в браузере – редактировать документы, работать с видео и даже терминал Linux в браузере. Файлы преимущественно хранятся в облаке. Но это все еще Linux.
7. Android
Не все знают, но самая популярная операционная система для мобильных телефонов тоже использует ядро Linux. От Linux здесь осталось только ядро и еще несколько моментов, все остальное же Google заполонила своими различными фреймворками, Java и так далее. Возможности Linux ограничены, той же системой безопасности Bionic, которая запрещает загрузку динамических библиотек, но в терминале можно работать с пересобранными командами Linux, а в chroot окружении можно запустить полноценный Linux дистрибутив.
8. Slackware
Достаточно старый дистрибутив Linux, который в свое время считался самым Unix’овым. Раньше на нем было основано несколько дистрибутивов, таких, как Blacktrack, Slax, VectorLinux и другие. Но потом он медленно потерял свою популярность. Здесь используется собственный менеджер пакетов, который по возможностям не дотягивает до deb и rpm. Не поддерживается разрешение зависимостей, а команды для удаления и установки пакетов находятся в разных утилитах.
9. OpenWrt и основанные на нем
OpenWrt – это операционная система Linux 2017 для роутеров и маршрутизаторов на базе ядра Linux. Кроме самого ядра Linux, она поставляется урезанной версией библиотеки Си, стандартными утилитами Linux и BusyBox. Система занимает мало места и оптимизирована специально под маршрутизаторы. Большинство настроек выполняются в командной строке.
10. Tizen и другие IoT
Операционная система на базе ядра Linux, предназначенная для различных телевизоров, умных часов и других умных гаджетов. Система разрабатывается на основе ядра Linux компанией Samsung и уже сейчас достаточно часто используется. Существуют свои приложения и SDK для их разработки.
Какую выбрать ОС?
Для того, чтобы определиться с выбором «операционки» компьютера, нужно исходить из трех параметров:
- Простота
- Изучение
- Рабочий инструмент.
Для простоты использования, приятной картинки и удобства в установке программ лучше всех подойдет Windows. Linux станет отличным инструментом для любителей изучать все процессы работы компьютера. Для работы лучше не найти ОС, чем Mac OS. Многие программисты, видеомонтажеры, специалисты по звуку используют MacBook Pro на базе Mac OS.
Со смартфонами все проще. Если у вас на руках iPhone, в выборе ОС вы ограничены. Практически все современные телефоны выпускаются на Android. Windows Mobile – самый редкий представитель среди мобильных гаджетов.
Как определить свою операционную систему:
Посмотрите этот видеоролик, определите свою операционную систему, и напишите в комментарии, какая ОС стоит на вашем компьютере.
Чтобы запустить видео кликните левой кнопкой мыши по его картинке или на значок треугольника.
Предыдущие уроки:
- Урок 1. Как правильно включать и выключать компьютер
- Урок 2. Компьютер. Назначение и принцип работы
1. Операционная система Linux не имеет вирусов
Первое, что привлекает многих, и меня лично – это отсутствие вирусов. Тут некоторые говорят, что вирусов нет в Linux только потому, что она мало распространена и хакеры просто ленятся писать их. Не буду спорить, но не совсем согласен с этим.
Linux стоит практически на всех серверах и на компьютерах миллионов обычных пользователей. Если бы было всё так просто, то умников написать вирусы нашлось бы не мало.
Тем более взлом серверов – это первое любимое занятие хакеров. Да, есть руткиты, при помощи которых ломают Linux сервера, но для домашних компьютеров это не актуально.
Кто -то может со мной тут поспорить, но я могу делать такие выводы даже на основании того, что ни одна антивирусная компания не делает антивирус для КОНКРЕТНО Linux.
Нет, версии антивирусов для Linux есть у каждого антивируса, но они предназначены для поиска и обезвреживания виндозных вирусов.
2. Операционная система Linux бесплатна
Не стоит думать, что все “линуксоиды” жмоты, и именно поэтому они пользуются Linux. Но дело в том, что ПОЛНАЯ версия той же Windows 7 или 10 стоит ОЧЕНЬ хорошо. И по лицензии вы можете установить одну версию на один компьютер. А если у меня 3 компьютера?
Именно поэтому многие ноутбуки продают с предустановленной Linux, чаще всего UBUNTU.
К тому же вы должны покупать каждую НОВУЮ версию Windows, если хотите быть в теме новых технологий от Microsoft. А это тоже хорошие деньги.
Но даже это не проблема, можно было бы купить и забыть. Но Windows всего одна, а Linux дистрибутивов превеликое множество, и их можно скачивать, устанавливать и тестировать БЕСПЛАТНО. И тут мы переходим к третьему преимуществу операционной системы Linux.
3. Операционная система Linux многообразна
Существует несколько основных модификаций операционной системы Linux и множество их модификаций на любой вкус. Кроме этого для каждой версии можно установить одно из множеств рабочих окружений. Хочешь, поставь Gmone, хочешь KDE, хочешь LXDE и так далее, а можешь всё сразу вместе и выбирать при входе в систему.
В общем, для людей творческих есть просто ОГРОМНОЕ поле для экспериментов. Но и это ещё не всё. Все программы для Linux тоже бесплатны и при этом не содержат ЧУДО тулбаров, которые сегодня так модно встраивать в софт.
4. Операционная система Linux имеет репозиторий
Да, в Windows тоже много программ, и наверное даже больше, чем в Linux. Но мне нравится в Linux сам подход установки программ, которые можно установить из проверенного репозитория их менеджера программ. И не нужно ползать по варезным сайтам, которые кишат вирусами и непристойными баннерами.
Конечно, при переходе с Windows, может быть непривычно, что аналоги программ называются по другому, но со временем привыкаешь.
5. Операционная система Linux более удобна
А это моё личное мнение. Я работал и там и там, и могу сказать, что интерфейс того же Gnome, намного удобнее, чем Windows 7.
Например, при установке программ, в Linux каждая программа занимает в меню нужный раздел и её потом очень легко найти.
В Windows же всё валится в кучу, и если у вас много программ, то найти потом нужную очень сложно. И таких МЕЛОЧЕЙ очень много, но именно они в конечном счёте создают удобство при работе.
6. Операционная система Linux имеет все драйвера
Бывало наверное и у вас, что при подключении нового оборудования, Windows салютовала, что нужного драйвера нет и оборудование не работает.
В Linux все драйвера вшиты в ядро и как правило любое новое оборудование сразу начинает работу. Если сунуть Windows 7 новую для неё флешку, то ставить драйвера она будет пару минут, Linux же подключит её через 2 секунды.
А бывает ещё такая смешная ситуация. Вы ставить Windows первый раз, а она не находит драйвера для сетевой карты. Но чтобы скачать для неё драйвер, нужно подключиться к интернету. Замкнутый круг.
В Linux я с таким не сталкивался никогда, сетевая карта всегда работала из коробки.
7. Операционная система Linux шифрует диск
Я не параноик, но прекрасно понимаю, как важно хранить свои документы и пароли от чужих глаз. При установке Linux (в частности Ubuntu) , вам сразу предлагают зашифровать вашу домашнюю папку. И теперь если ваш ноутбук попадёт в чужие руки, ему не удастся извлечь с него файлы.
Да, в Windows тоже это можно сделать при помощи сторонних программ, но всё это сложнее и мало кто об этом задумывается, пока не будет уже поздно.
Наверное список можно было бы продолжить, но даже этого достаточно для того, чтобы вы поняли, почему операционная система Linux стоит на всех моих компьютерах.
Но с другой стороны я не хочу никого убеждать переходить на Linux, так как это как с религией, человек должен дойти до этого сам. И тогда это будет его решение, с которым он будет жить и трудиться.
Вопросы и ответы
Если вы не нашли в статье ответ на свой вопрос, задайте в сервисе “Вопросы и ответы”. Уведомление об ответе обязательно придет к вам на почту. Отвечают авторы и другие читатели!
×

операционные системы Windows 10

операционные системы РОСА

операционные системы FreeBSD

операционные системы Fedora

операционные системы Elementary OS

операционные системы Chrome OS

операционные системы OpenSuse

операционные системы Ubuntu

операционные системы MacOS

операционные системы Linux Mint
Альтернативные операционные системы для ПК
Кроме основных ОС существует множество других вариантов установки операционки. Каждая из них имеет свои отличия и назначение.
- FreeDOS
- FreeBSD
- eComStation
- ReactOS
- Oracle Solaris
- Syllable Desktop
- Haiku
- SkyOS
- TempleOS
- ChromeOS
Важно: мы представили только список ОС, с характеристиками и особенностями каждой из них вы можете ознакомиться самостоятельно.
Стоит отметить среди представленного списка ChromeOS, которая сейчас популярна в области образования. Она бесплатна, работает на слабых компьютерах, не требует особых ресурсов и знаний для ее настройки.
[spoiler title=”Источники”]
- https://geekon.media/vidy-operacionnyh-sistem-raznye-os-na-kompyuter-i-smartfon/
- https://prostolinux.ru/operatsionnaya-sistema-linux/
- https://info-comp.ru/drugieopersistemi/686-what-is-linux.html
- https://moydrygpk.ru/kompyuter-dlya-nachinayushih/vidy-operacionnyx-sistem.html
- https://losst.ru/operatsionnye-sistemy-linux
- https://SmartBobr.ru/programmy/operatsionnye-sistemy/
[/spoiler]
Команда ls является одной из наиболее важнейшим инструментов командной строки, вы должны научиться, чтобы ориентироваться в файловой системе
lsВыводит список файлов в директории.
Синтаксис
ls опциидиректория
директория — задает директорию, содержимое которой нужно вывести. Если вместо директории указать файл, то будет выведена информация о данном файле.
Если директория не указана, то выводится содержимое текущей директории.
Команда ls linux
Как обычно, в таких статьях сначала нам нужно понять синтаксис команды, чтобы вы знали как правильно ее использовать. На самом деле, синтаксис очень прост, вы набираете саму команду, а после нее путь к папке, содержимое которой хотите посмотреть. Если вы запустите команду без пути, то она выдаст содержимое текущего каталога:
$ lsопции/путь/к/папке
Опции команды указывают как именно и в каком виде нужно выводить информацию на экран, а путь, это та папка, которую нужно отобразить. Рассмотрим основные опции утилиты:
- -a – отображать все файлы, включая скрытые, это те, перед именем которых стоит точка;
- -A – не отображать ссылку на текущую папку и корневую папку . и ..;
- –author – выводить создателя файла в режиме подробного списка;
- -b – выводить Escape последовательности вместо непечатаемых символов;
- –block-size – выводить размер каталога или файла в определенной единице измерения, например, мегабайтах, гигабайтах или килобайтах;
- -B – не выводить резервные копии, их имена начинаются с ~;
- -c – сортировать файлы по времени модификации или создания, сначала будут выведены новые файлы;
- -C – выводить колонками;
- –color – включить цветной режим вывода, автоматически активирована во многих дистрибутивах;
- -d – выводить только директории, без их содержимого, полезно при рекурсивном выводе;
- -D – использовать режим вывода, совместимый с Emacs;
- -f – не сортировать;
- -F – показывать тип объекта, к каждому объекту будет добавлен один из специализированных символов */=>@|;
- –full-time – показывать подробную информацию, плюс вся информация о времени в формате ISO;
- -g – показывать подробную информацию, но кроме владельца файла;
- –group-directories-first – сначала отображать директории, а уже потом файлы;
- -G – не выводить имена групп;
- -h – выводить размеры папок в удобном для чтения формате;
- -H – открывать символические ссылки при рекурсивном использовании;
- –hide – не отображать файлы, которые начинаются с указанного символа;
- -i – отображать номер индекса inode, в которой хранится этот файл;
- -l – выводить подробный список, в котором будет отображаться владелец, группа, дата создания, размер и другие параметры;
- -L – для символических ссылок отображать информацию о файле, на который они ссылаются;
- -m – разделять элементы списка запятой;
- -n – выводить UID и GID вместо имени и группы пользователя;
- -N – выводить имена как есть, не обрабатывать контролирующие последовательности;
- -Q – брать имена папок и файлов в кавычки;
- -r – обратный порядок сортировки;
- -R – рекурсивно отображать содержимое поддиректорий;
- -s – выводить размер файла в блоках;
- -S – сортировать по размеру, сначала большие;
- -t – сортировать по времени последней модификации;
- -u – сортировать по времени последнего доступа;
- -U – не сортировать;
- -X – сортировать по алфавиту;
- -Z – отображать информацию о расширениях SELinux;
- -1 – отображать один файл на одну строку.
Это были все основные параметры команды ls, которые нам может когда-либо понадобиться использовать. Их очень много, но на деле будут нужны только некоторые из них, вы их быстро запомните, а все остальные сможете всегда найти в этой статье или на странице справки man ls. А теперь давайте рассмотрим несколько примеров использования команды ls linux.
Использование ls в Linux
Как вы уже поняли, ls – это сокращение от list, эта команда представляет из себя аналог команды dir для Linux. Самый простой способ использовать команду, запустить ее без параметров и посмотреть содержимое текущей папки:
ls
Чтобы посмотреть список файлов в папке linux для точно заданной папки, вам нужно указать путь к ней. Например, смотрим содержимое корневой папки:
ls /
Или папки /bin:
ls /bin/
По умолчанию включен цветной вывод, поэтому вы видите столько различных цветов. Например, исполняемые файлы обозначаются салатовым, а ссылки голубым. Теперь посмотрим содержимое домашней папки снова, только на этот раз в виде списка с максимальным количеством информации:
ls -l
Тут вывод уже разделен на отдельные колонки, в первой колонке указаны права доступа к файлу в формате владелец группа остальные. Следующая колонка – это тип файла или папки, дальше владелец и группа, затем размер, дата создания и последний параметр – имя. Если вы еще хотите знать кто создал файл, можно использовать опцию author:
ls -l –author
Колонка создателя будет добавлена после группы. Дальше размер. Он выводится в байтах, килобайтах или еще в чем-то и нам не совсем понятно что там происходит, поэтому добавьте опцию -h чтобы выводить размер в более удобном виде:
ls -lh
Для папок размер выводится не сумой всех размеров всех файлов, а всего лишь то место, которое занимает сама папка, поэтому давайте посмотрим пример с файлами:
ls -l Фото
ls -lh Фото
Если вы хотите видеть скрытые файлы, а в домашней папке их просто море, то используйте опцию -a:
ls -a
Или смотрим скрытые файлы без ссылок на текущую и родительскую папку:
ls -A
Теперь нас будет интересовать сортировка. Сначала отсортируем файлы по размеру:
ls -lSh Фото
Обратите внимание, что файлы расположены от большего к меньшему. Теперь мы можем включить обратный порядок:
ls -lShr
С помощью опции -r мы вывели файлы в обратном порядке. Теперь отсортируем по алфавиту:
ls -lX
Или сортируем по времени последней модификации:
ls -lt
Обратите внимание на колонку времени, действительно, самые новые файлы будут вверху списка. Если вы хотите посмотреть какие метки SELinux присвоены файлу, необходимо использовать опцию -Z:
ls -lZ
Но это возможно только в системах, где установлена надстройка SELinux. Если вы хотите рекурсивно вывести содержимое всех папок, используйте опцию -R:
ls -lR /usr/
Если же вам нужно список папок и файлов в директории через запятую, что можно использовать -m:
ls -m
Особенности утилиты LS Linux
Перед использованием такой команды необходимо тщательно изучить особенности синтаксиса. www.vseprolinux.ru/komanda-ls
Это дает возможность пользователю правильно применить команду при решении различных задач.
Синтаксис ls Линукс весьма простой. Первоначально требуется ввести сам у команду, а далее – указать путь к файлу или определенной папке, содержимое которой требует изучения.
Общий синтаксис выглядит так:
$ ls (опции)/(путь к папке)
Рубрика «опции» укажет, в каком именно виде должна быть выведена требуемая информация. Она в последующем отображается на экране вашего монитора. «Путь к папке» — это своеобразный адрес месторасположения данных, которые пользователь желает увидеть.
Опции, которыми можно воспользоваться с помощью команды LS Linux:
- «-а». После введения отображаются все файлы. Вам будут показаны даже скрытые данные, перед которыми система установила точку.
- «-А». Опция дает возможность не отображать ссылку на исследуемую папку, которая также корневой (. и ..).
- «—author». На экран выводится информация о создателе определенного файла. Режим – подробный список.
- «-b». Вместо напечатанных символов отображается Escape-последовательность.
- «—block-size». На экране монитора показан размер папки или файла. Единица измерения может быть различной – мегабайты, гигабайты или килобайты.
- «-В». Такая опция даёт возможность не выводить резервные копии. Стоит отметить, что их имена начинаются со знака «~».
- «-с». После введения появляется возможность сортировки файлов – по времени создания или модификации. Первоначально отображаются новые файлы.
- «-С». Информация будет выведена в виде колонок.
- «—color». Эта опция позволяет запустить цветной режим ввода. Стоит заметить, что в большинстве дистрибутивов она активирована в автоматическом режиме.
- «-d». На экран будут выведены только директории. Вы не увидите их содержимое. Опцию актуально использовать при необходимости рекурсивного вывода.
- «-D». Опция позволяет использовать режим, который совместим с Emacs.
- «-f». Здесь исключена вероятность сортировки файлов и папок.
- «-F». Будет показана разновидность исследуемого объекта. Они зачастую дополнены различными вспомогательными символами – *, /, =, >, @, | и иными.
- «—full-time». Такая опция позволяет отобразить подробную информацию о файле или директории. Данные о времени отображены в формате ISO.
- «-g». Показывается подробная информация об исследуемом объекте, но нет данных о владельце.
- «—group-directories-first». После введения первоначально отображаются директории, а фалы находятся внизу списка.
- «-G». Эта опция даёт возможность не показывать названия групп.
- «-h». Позволяет посмотреть размеры папок. Формат удобен для чтения.
Вышеописанный список опций неполный. Их большое количество, но зачастую на деле используются лишь некоторые. Более подробно изучить функционал утилиты LS Linux можно в категории «справка».
Особенности использования команды
Как понятно из вышесказанного, данная утилита имеет широкие возможности. Стоит рассмотреть некоторые примеры использования LS Linux:
- Запуск программы без введения параметров для просмотра содержимого текущей папки. Для этого потребуется ввести команду «$ ls».
- Просмотр списка файлов в определенной папке. Для этого потребуется указать путь к ней. Если нужно изучить содержимое корневой папки, стоит ввести «$ ls/». Когда требуется посмотреть содержимое определённой папки (к примеру, /ХХХ), стоит ввести команду «$ ls/ХХХ/».
- Просмотр прав доступа к определенному файлу. Для этих целей в командной строке нужно ввести «$ ls -l —autor».
- Просмотр размера файла в максимально удобном виде (в байтах, мегабайтах, килобайтах, гигабайтах). Необходимо ввести команду «$ ls –lh».
- Просмотр скрытых файлов. Нужно заметить, что практически в каждой папке их большое количество. Стоит в командной строке ввести команду «$ ls -a».
- Сортировка фалов по размеру. Для этого вводится команда «$ ls –lSh».
- Сортировка по алфавиту. Нужно ввести команду «$ ls –lX».
- Сортировка по последней модификации. Вводится команда «$ ls –lt».
- Просмотр отметок на файле, которые были присвоены SELinux. Для этого вводится команда «$ ls –lZ».
- Рекурсивный просмотр содержимого всех папок. Необходимо ввести команду «$ ls -lR /usr/».
- Просмотр файлов и папок в определённой директории через запятую. Для выполнения поставленной задачи нужно ввести «$ ls -m».
Утилита ls весьма сложная и местами непонятная, но функционал ее весьма редко используется полностью. С простыми задачами справится новичок без определенных навыков.
Список ключей для команды ls.
Для повседневной работы, одни из самых используемых ключей для команды ls:
- -l — вывод подробной информации о содержимом каталога в виде списка;
- -a (—all) — вывод информации о всех имеющихся объектах явных и скрытых;
- -A (—allmost-all) — вывод информации о всех имеющихся явных и скрытых объектах (за исключением объектов «.» и «..»);
- -d (—directory) — вывод информации о директории без вывода его содержимого;
- -F — к объектам являющимся каталогами добавит в конце символ слеш «/», к объектам являющимися исполняемыми файлами добавляется «*», к объектам являющимися символьными ссылками — «@»;
- -r (—reverse) — данные ключи меняют сортировку на обратную;
- -i — отображение номера индексных дескрипторов объектов;
- -S — сортировка объектов по размеру от большого к меньшему;
- -Sr — сортировка объектов по размеру от меньшего;
- -t — сортировка объектов по времени модификации файлов;
- -R (—recursive) — вывод информации об имеющихся объектах в том числе и объектах во вложенных каталогах.
Способы работы с командой ls и ее ключи, упоминаемые в статье это далеко не весь список. Если вы желаете использовать всю мощь этой на первый взгляд простой команды, то как уже упоминалось ранее, более подробную информацию можно получить при вызове встроенного мануала $ man ls .
Получение сведений о файлах и каталогах
Файловая система для каждого из своих базовых объектов (файлов и каталогов) хранит около четырёх десятков информационных полей. Подавляющее большинство из этих полей ФС использует для поддержания собственной работоспособности. По сути, когда пользователь работает с ФС, он просто использует любезно предоставленные самой же ФС возможности и информацию. При этом видит всё «как на ладони», всё как есть. Единственным скрытым (а точнее, «замаскированным») компонентом в представлении ФС является оборудование. Которое представлено теми же самыми файлами с соответствующими им свойствами и атрибутами.
Что представляет собой тот или иной файл, т. е. какой доступ к нему предоставлен, какими «связями» он обладает, когда был создан и/или изменён. А также многое другое, позволяет узнать команда ls с ключом -l. Когда нужно «навести справки» о каком-либо объекте ФС, использовать нужно именно её:
$ ls -l /bin/gzip -rwxr-xr-x 3 root root 101560 апр 28 2017 /bin/gzip
Нет необходимости подробно останавливаться на синтаксисе и перечисления всех доступных опций и их описании. Поскольку это простая справочная информация, доступная из соответствующего справочного руководства: man ls. А вот сам вывод команды из приведённого примера стоит рассмотреть более внимательно. Он разбит на секции, каждая из которых является отдельным атрибутом файла. В данном выводе в первой секции представлен режим доступа к файлу. Во второй — количество жёстких ссылок на данный файл. В третьей и четвертой — информация о владельце и группе. В данном случае root, к которым принадлежит файл. Следующая секция отображает размер файла в байтах. Далее следует дата последнего изменения файла — 28 апреля 2017 г., последняя секция — имя самого файла. Что касается каталогов, то для них всегда имеется как минимум две жесткие ссылки: первая — из родительского каталога, а вторая — это «псевдокаталог» «.» внутри самого этого каталога.
Как правильно интерпретировать вывод команды ls?
Первое, что может ввести в заблуждение при изучении вывода команды ls -l, так это первая секция данных. Состоящая из набора десяти символов и показывающая режимы доступа к файлу. Для вышеприведённого примера первый символ «-» указывает, что это файл. А в случае с каталогом вместо него выводится символ «d». Следующие девять символов представляют собой три группы, отражающих режимы доступа к файлу. Первая группа (первые три символа «rwx») показывают, какие права доступа выставлены на данный файл для его владельца. Следующая группа символов — «r-x» — показывает режим доступа для группы, к которой принадлежит файл. Ну а третья («r-x») — права доступа для всех остальных пользователей.
В полях, отображающих владельца и группу вместо символьных имён могут быть также и цифровые идентификаторы. Такое бывает, когда соответствующие записи были удалены из файлов /etc/passwd или /etc/group. Также это может быть признаком возникновения ошибки в базах данных LDAP или NIS. Конечно, если таковые используются.
Следует также понимать, что время последнего изменения файла на самом деле отражает не время редактирования его содержимого, например, а время изменения одного или нескольких из его атрибутов.
Особенности использования команды ls
Когда команда ls обрабатывает не «обычные» файлы, а специальные файлы устройств (хотя это тоже самые обычные файлы). То для них она выводит несколько иную информацию:
$ ls -l /dev/tty0 cr–w—- 1 root tty 4,0 фев 28 14:27 /dev/tty0
Вместо размера файла выводится старший и младший номера (4, 0) устройства tty0 – это первая виртуальная консоль, управляемая драйвером устройства 4, который является драйвером терминала.
Когда нужно узнать для определённого файла не только количество указывающих на него жестких ссылок, но и сами эти ссылки. То целесообразно использовать опцию -i, которая выводит номер индексного дескриптора для файла:
$ ls -li ‘Рабочий стол’ 3276880 ‘Рабочий стол’
Номер индексного дескриптора — это индекс той самой таблицы, в которой содержатся записи всех файловых систем. В свою очередь, на дескрипторы ссылаются файловые записи каталогов. Таким образом, у жёстких ссылок, ссылающихся на один и тот же файл, будут одинаковые номера. Зная номер индексного дескриптора определённого файла, можно найти в системе все ссылающиеся на него жесткие ссылки, используя команду find:
$ find точка_монтирования -xdev -inum индексный_дескриптор
Данный пример — лишь одно из важных практических применений команды ls. Следует также отметить некоторые особенно полезные опции команды ls:
-a – отображает все файлы и каталоги. Включая скрытые (имена которых начинаются с точки), а также «всевдокаталоги» с именами «.» и «. .»;
-t – отображает результаты в отсортированном (по времени изменения файлов) порядке. А опция -tr то же, но в обратном порядке;
-F – выделяет каталоги и исполняемые файлы в общем выводе;
-h – отображает размеры файлов и каталогов в «человекопонятных» единицах, к примеру 4k или 10M;
-R – рекурсивный вывод, выполнение которого прерывается нажатием сочетания клавиш .
Иногда возникает путаница в использовании опций -l и —d. Дело в том, что опция -d предназначена для дополнения работы опции -l (которая выводит подробную информацию об атрибутах). Когда необходимо получить атрибуты именно конкретного каталога:
$ ls -ld ~/htdocs drwxrwxr-x 12 john john 4096 фев 11 12:56 /home/john/htdocs
Еще полезные примеры ls
Вывод файлов по дате изменения, вверху будут самые новые файлы
ls -lat /home
Вывод файлов по дате изменения, вверху будут самые старые файлы
ls -latr /home
Отсортировать файлы по размеру
ls -alS /home
Вывести список только каталогов:
ls -d -1 /home
1. Вывод имен скрытых файлов/директорий
По умолчанию команда не отображает имена скрытых файлов и директорий. Однако, вы можете активировать механизм вывода информации об этих элементах файловой системы с помощью параметра -a. Таким образом, для вывода имен всех файлов/директорий из текущей директории (включая скрытые файлы и директории, имена которых начинаются с символа точки “.”) достаточно выполнить следующую команду:
ls -a
2. Удаление информации о текущей (.) и родительской (..) директориях из вывода
При использовании параметра -a, кроме всего прочего, осуществляется вывод информации о текущей и родительской директориях (элементы “.” и “..” соответственно). Если вам не нужна эта информация, вы можете использовать вместо упомянутого параметра параметр -A.
3. Вывод информации о файлах и директориях в обратном порядке
По умолчанию ls сортирует имена файлов и директорий в алфавитном порядке. Но если вам понадобится, вы можете организовать вывод имен элементов директории в обратном порядке. Для этого вам придется использовать параметр -r.
ls -r
А это пример вывода:
1. ls без параметров
ls без опций отображает список файлов и каталогов в чистом формате, где мы не сможем просматривать такие детали, как типы файлов, размер, дата и время изменения, разрешения и ссылки и т. д.
# ls 001.pcap Desktop Downloads index.html install.log.syslog Pictures Template anaconda-ks.cfg Documents fbcmd_update.php install.log Music Public Videos
2. ls с параметром -l
Здесь, ls -l (l — символ, а не единица) показывает файл или каталог вместе с его размером, а также дату и время изменения, права и владельца.
# ls -l total 176 -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap -rw——-. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads -rw-r–r–. 1 root root 21262 Aug 12 12:42 fbcmd_update.php -rw-r–r–. 1 root root 46701 Jul 31 09:58 index.html -rw-r–r–. 1 root root 48867 Jul 31 02:17 install.log -rw-r–r–. 1 root root 11439 Jul 31 02:13 install.log.syslog drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos
3. Просмотр скрытых файлов
Показ всех файлов, включая скрытые, которые начинаются с «.»
# ls -a . .bashrc Documents .gconfd install.log .nautilus .. .cache Downloads .gnome2 install.log.syslog .netstat.swp 0001.pcap .config .elinks .gnome2_private .kde .opera anaconda-ks.cfg .cshrc .esd_auth .gtk-bookmarks .libreoffice Pictures .bash_history .dbus .fbcmd .gvfs .local .pki .bash_logout Desktop fbcmd_update.php .ICEauthority .mozilla Public .bash_profile .digrc .gconf index.html Music .pulse
4. Перечисление файлов с удобным отображением размера
С опцией -lh, ls показывает размеры в удобном формате.
# ls -lh total 176K -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap -rw——-. 1 root root 1.6K Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Documents drwxr-xr-x. 4 root root 4.0K Aug 16 02:55 Downloads -rw-r–r–. 1 root root 21K Aug 12 12:42 fbcmd_update.php -rw-r–r–. 1 root root 46K Jul 31 09:58 index.html -rw-r–r–. 1 root root 48K Jul 31 02:17 install.log -rw-r–r–. 1 root root 12K Jul 31 02:13 install.log.syslog drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Music drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Public drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Videos
5. Перечисление файлов и директорий с символом «/» в конце
Использование опции -F с командой ls добавит символ «/» в конце каждого каталога.
# ls -F 0001.pcap Desktop/ Downloads/ index.html install.log.syslog Pictures/ anaconda-ks.cfg Documents/ fbcmd_update.php install.log Music/ Public/
6. Перечисление файлов в обратном порядке
Следующая команда ls с опцией -r выводит файлы и каталоги в обратном порядке.
# ls -r Videos Public Music install.log fbcmd_update.php Documents 0001.pcap Templates Pictures install.log.syslog index.html Downloads Desktop
7. Рекурсивный список подкаталогов
ls с опцией -R выведет очень длинный список деревьев каталогов. Смотрите пример вывода команды.
# ls -R total 1384 -rw——-. 1 root root 33408 Aug 8 17:25 anaconda.log -rw——-. 1 root root 30508 Aug 8 17:25 anaconda.program.log ./httpd: total 132 -rw-r–r– 1 root root 0 Aug 19 03:14 access_log -rw-r–r–. 1 root root 61916 Aug 10 17:55 access_log-20120812 ./lighttpd: total 68 -rw-r–r– 1 lighttpd lighttpd 7858 Aug 21 15:26 access.log -rw-r–r–. 1 lighttpd lighttpd 37531 Aug 17 18:21 access.log-20120819 ./nginx: total 12 -rw-r–r–. 1 root root 0 Aug 12 03:17 access.log -rw-r–r–. 1 root root 390 Aug 12 03:17 access.log-20120812.gz
8. Обратный порядок вывода
С помощью комбинации -ltr список будет сортироваться по дате последнего изменения от старых к новым.
# ls -ltr total 176 -rw-r–r–. 1 root root 11439 Jul 31 02:13 install.log.syslog -rw-r–r–. 1 root root 48867 Jul 31 02:17 install.log -rw——-. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents -rw-r–r–. 1 root root 46701 Jul 31 09:58 index.html -rw-r–r–. 1 root root 21262 Aug 12 12:42 fbcmd_update.php drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap
Показать скрытые файлы
По умолчанию команда ls не показывает скрытые файлы. Что их показать, используется опция -a:
ls -a
Понятный размер файлов
Вывести размер файлов в понятном формате (опция -h):
ls -lh
Обозначить директории
У команды ls есть очень полезная опция -F, про которую не все знают. Она добавляет к именам файлов дополнительные обозначения, по которым сразу понятно что это за файл. Например, для директорий она добавляет символ /, и в списке файлов сразу видно где директории а где обычные файлы.
ls -lF
Список файлов в одну колонку
Вывести список в одну колонку:
ls -1
Вывести только файлы с определенным расширением
Выведем файлы только с расширением .txt:
ls *.txt
Выведем файлы с определенными расширениями (.html, .php и .txt):
ls *.{html,php,txt}
Файлы, начинающиеся на определенную букву
Показать только файлы, имена которых начинаются на одну из букв указанного множества (a, d, u и x):
ls [adux]*
Список файлов с сортировкой по времени
Выведем список файлов с сортировкой по времени последнего изменения файла. Более свежие файлы располагаются сверху.
ls -lt
Сортировка по времени, но в обратном порядке:
ls -ltr
[spoiler title=”Источники”]
- https://pingvinus.ru/note/cmd-ls
- https://losst.ru/komanda-ls-linux
- http://linux-user.ru/komandy-v-linux/kak-polzovatsya-komandoj-ls-v-linukse/
- https://world-hello.ru/linux/bash/commands/ls.html
- https://ITProffi.ru/komanda-ls-prosmotr-atributov-fajlov/
- http://rus-linux.net/MyLDP/consol/linux-ls-command.html
- https://mordeniuss.ru/15-basic-ls-command-examples-in-linux/
[/spoiler]
Команда grep в операционных системах Linux позволяет производить поиск по содержимому файлов с применением различных аргументов для упрощения выполнения задачи
Рассмотрим синтаксис.
grep [параметры] шаблон [имя файла]
Или так:
Команда | grep шаблон
Здесь под параметрами понимаются аргументы, с помощью которых настраивается поиск и вывод на экран. Например нужно найти слово “линукс”, и не учитывать регистр при поиске. Тогда нужно использовать опцию “-i”.
Шаблон – это выражение или строка.
Имя файла – где искать.
Основные параметры:
–help. Вывести справочную информацию.
-i. Не учитывать регистр при поиске.
-V. Узнать текущую версию.
-v. Инвертированный поиск.
-s. Не выводить на экран сообщения об ошибкам. Например сообщение о несуществующих файлах.
-r. Поиск в каталогах, подкаталогах или рекурсивный grep.
-w. Искать как слово с пробелами.
-с. Опция считает количество вхождений (счетчик).
-e. Регулярные выражения.
Используем команду grep в Linux
Что касается различий между дистрибутивами Линукс, в этом случае они не играют никакой роли, поскольку интересующая вас команда grep по умолчанию доступна в большинстве сборок и применяется абсолютно одинаково. Сегодня мы бы хотели обсудить не только действие grep, но и разобрать основные аргументы, которые позволяют значительно упростить процедуру поиска.
Подготовительные работы
Все дальнейшие действия будут производиться через стандартную консоль, она же позволяет открывать файлы только путем указания полного пути к ним либо если «Терминал» запущен из необходимой директории. Узнать родительскую папку файла и перейти к ней в консоли можно так:
- Запустите файловый менеджер и переместитесь в нужную папку.
- Нажмите правой кнопкой мыши на требуемом файле и выберите пункт «Свойства».
- Во вкладке «Основные» ознакомьтесь со строкой «Родительская папка».
- Теперь запустите «Терминал» удобным методом, например, через меню или зажатием комбинации клавиш Ctrl + Alt + T.
- Здесь перейдите к директории через команду cd /home/user/folder, где user — имя пользователя, а folder — название папки.
Задействуйте команду cat + название файла, если хотите просмотреть полное содержимое. Детальные инструкции по работе с этой командой ищите в другой нашей статье по ссылке ниже.
Благодаря выполнению приведенных выше действий вы можете использовать grep, находясь в нужной директории, без указания полного пути к файлу.
Стандартный поиск по содержимому
Прежде чем переходить к рассмотрению всех доступных аргументов, важно отметить и обычный поиск по содержимому. Он будет полезен в тех моментах, когда необходимо найти простое совпадение по значению и вывести на экран все подходящие строки.
- В командной строке введите grep word testfile, где word — искомая информация, а testfile — название файла. Когда производите поиск, находясь за пределами папки, укажите полный путь по примеру /home/user/folder/filename. После ввода команды нажмите на клавишу Enter.
- Осталось только ознакомиться с доступными вариантами. На экране отобразятся полные строки, а ключевые значения будут выделены красным цветом.
- Важно учитывать и регистр букв, поскольку кодировка Linux не оптимизирована для поиска без учета больших или маленьких символов. Если вы хотите обойти определение регистра, впишите grep -i “word” testfile.
- Как видите, на следующем скриншоте результат изменился и добавилась еще одна новая строка.
1. Простой поиск в файле
Давайте рассмотрим пример в файле “/etc/passwd” для поиска строки в файле. Чтобы найти слово “system” при помощи команды grep, используйте команду:
[root@destroyer ~]# cat /etc/passwd|grep system
Пример вывода:
systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin
2. Подсчет появления слов.
В приведенном выше примере мы имеем в системе поиск слов в файл
е “/etc/passwd”. Если мы хотим знать количество или число появлений слова в файле, то используйте опцию ниже:
[root@destroyer ~]# cat /etc/passwd|grep -c system 2 [root@destroyer ~]#
Выше указанно, что слово появилось два раза в файле “/etc/passwd”.
3. Игнорировать регистрозависимые слова
Команда grep чувствительна к регистру, это означает, что он будет искать только данное слово в файле. Чтобы проверить эту функцию, создайте один файл с именем «test.txt» и с содержанием, как показано ниже:
[root@destroyer tmp]# cat test.txt AndreyEx andreyex ANDREYEX Andreyex [root@destroyer tmp]#
Теперь, если вы попытаетесь найти строку «andreyex», то команда не будет перечислять все слова «andreyex» с разными вариантами, как показано ниже:
[root@destroyer tmp]# grep andreyex test.txt andreyex [root@destroyer tmp]#
Этот результат подтверждает, что только один вариант будет показан, игнорируя остальную часть слова «andreyex» с разными вариантами. И если вы хотите игнорировать этот случай, вам нужно использовать параметр «-i» с grep, как показано ниже:
[root@destroyer tmp]# grep -i andreyex test.txt AndreyEx andreyex ANDREYEX Andreyex
4. Две разные строки внутри файла с командой grep
Теперь, если вы хотите найти два слова или строки с помощью команды grep, то вы должны задать расширенные. В следующей команде мы находим две строки «system» и «nobody» в файле /etc/passwd.
[root@destroyer ~]# grep ‘system|nobody’ /etc/passwd nobody:x:89:89:Nobody:/:/sbin/nologin systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin [root@destroyer ~]#
5. Рекурсивный поиск
Допустим, вы хотите найти слово или строку рекурсивно в любом месте каталога, тогда используйте опцию -r. Например, если вы хотите найти слово «check_oracle» рекурсивно в каталоге /etc, то используйте следующую команду:
[root@destroyer ~]# grep -r “check_oracle” /etc/ /etc/selinux/targeted/contexts/files/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /etc/selinux/targeted/modules/active/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /etc/selinux/targeted/modules/active/file_contexts.template:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]
В выводе выше мы можем иметь возможность видеть имя файла, в котором мы нашли строку, и если вы хотите убрать имя файла в конечном результате, то используйте опцию «-h», как показано ниже:
[root@destroyer ~]# grep -hr “check_oracle” /etc/ /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]#
6. Вывод команды grep.
Если вы хотите найти строку или слово в любом выводе команды, то вы должны использовать оператор «|», а затем <строка> в grep. Допустим, вы хотите найти в памяти, связанные слова вывода команды dmesg, то используйте следующую команду. [root@destroyer ~]# dmesg |grep memory [ 0.000000] Base memory trampoline at [ffff880000098000] 98000 size 19456 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] [ 0.000000] init_memory_mapping: [mem 0x3fe00000-0x4fffffff] [ 0.000000] init_memory_mapping: [mem 0x3c000000-0x4fdfffff] [ 0.000000] init_memory_mapping: [mem 0x00100000-0x4bffffff] [ 0.000000] kexec: crashkernel=auto resulted in zero bytes of reserved memory. [ 0.000000] Early memory node ranges [ 0.000000] PM: Registered nosave memory: [mem 0x0003e000-0x0003ffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff] [ 0.000000] please try ‘cgroup_disable=memory’ option if you don’t want memory cgroups [ 0.030181] Initializing cgroup subsys memory [ 0.862358] Freeing initrd memory: 23532k freed [ 1.064599] Non-volatile memory driver v1.3 [ 1.069351] crash memory driver: version 1.1 [ 1.186673] Freeing unused kernel memory: 1430k freed [ 5.567780] [TTM] Zone kernel: Available graphics memory: 480345 kiB [root@destroyer ~]#
8. Точное совпадение слова
В соответствии с примером, приведенным в пункте 7, если мы ищем Andreyex, то он будет печатать все вхождение Andreyex как «Andreyex12», «Andreyex454», «Andreyex34343», а также «Andreyex», как показано ниже:
[root@destroyer tmp]# grep Andreyex test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex [root@destroyer tmp]#
тогда, если мы хотим найти точное слово «Andreyex» вместо этого, чтобы перечислить весь вывод выше, то используйте опцию «-w», как показано ниже:
[root@destroyer tmp]# grep -w Andreyex test.txt Andreyex [root@destroyer tmp]#
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
7. Инвертирование с помощью команды grep в Linux
Допустим, если вы хотите отобразить все слова в файле, который не содержит какое-либо конкретное слово, то используйте опцию «-v». Это позволяет создать один файл с содержимым, как показано ниже:
[root@destroyer tmp]# cat test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex LinuxRoutes Linux [root@destroyer tmp]#
Если мы не хотим печатать строки, содержащие слово Linux, то используйте следующую команду.
[root@destroyer tmp]# grep -v Linux test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex
[spoiler title=”Источники”]
- https://www.vseprolinux.ru/grep
- https://lumpics.ru/linux-grep-command-examples/
- https://andreyex.ru/operacionnaya-sistema-linux/polnoe-rukovodstvo-komanda-grep-v-linux/
[/spoiler]
Как удалить файл в Linux
- Чтобы удалить один файл, используйте команду rm, за которой следует имя файла:rm filename
Если файл защищен от записи, вам будет предложено подтвердить ее, как показано ниже. Чтобы удалить файл введите y и нажмите Enter. В противном случае, если файл не защищен от записи, он будет удален без запроса.
rm: remove write-protected regular empty file ‘filename’?
- Чтобы удалить сразу несколько файлов, используйте команду rm, за которой следуют имена файлов, разделенные пробелом.rm filename1 filename2 filename3
Вы также можете использовать подстановочный знак ( *) и регулярные выражения для соответствия нескольким файлам. Например, чтобы удалить все файлы с расширением .pdf в текущем каталоге, используйте следующую команду:
rm *.pdf
Когда вы используете rm с wildcards ( *) и регулярными расширениями, рекомендуется перечислить файлы с помощью команды ls, чтобы вы могли видеть, какие файлы будут удалены перед запуском команды rm.
- Используйте опцию -i для подтверждения каждого файла перед удалением:rm -i filename(s)
- Чтобы удалить файлы без запроса, даже если файлы защищены от записи, используйте параметр -f(force):rm -f filename(s)
- Вы также можете комбинировать параметры rm. Например, чтобы удалить все файлы .txt в текущем каталоге без подсказки в подробном режиме, используйте следующую команду:rm -fv *.txt
Удаляем файлы в Linux: практика
В ОС Linux для удаления файлов есть стандартная утилита rm. Как это принято со стандартными утилитами, в названии rm есть определённая идея. В нашем случае речь идёт о сокращении от английского слова Remove — удалять.
Итак, чтобы выполнить удаления одного файла, используем команду rm, указывая за ней имя нашего файла:
rm filename
Если наш файл находится не в текущем рабочем каталоге, нужно указать путь к его местоположению:
rm /home/user/filename
Бывает, что файл защищён от записи. Тогда нам предложат подтвердить команду. Чтобы удалить файл в такой ситуации, просто вводим y и нажимаем Enter.
rm: remove write-protected regular empty file ‘filename’?
Если мы хотим удалить сразу несколько файлов в Linux, то это тоже не проблема: используем команду rm, за которой прописываем имена наших файлов через пробел:
rm filename1 filename2 filename3
Ещё вариант — использование подстановочного знака * и регулярных выражений для соответствия определённым файлам. К примеру, мы легко удалим все файлы в Linux, имеющие расширение .txt следующей командой:
rm *.txt
Для подтверждения каждого файла перед удалением используйте опцию -i:
rm -i filename(s)
Но когда файлов много, а вы твёрдо уверены в правильности своей команды и не хотите каждый раз отвечать на вопрос системы, используйте противоположную опцию -f. Будут удалены все файлы безоговорочно, т. е. без лишних вопросов:
rm -f filename(s)
Способ 1: Терминал
Работа с файлами в «Терминале» кардинально отличается от работы в файловом менеджере. Как минимум, в нем нет визуализации — все данные вы будете вводить и получать в окне, имеющем вид традиционной для Windows командной строки. Однако именно через этот элемент системы удастся отследить все ошибки, возникающие при выполнении той или иной операции.
Подготовительные мероприятия
Используя «Терминал» для создания или удаления файлов в системе, вам необходимо предварительно указать в нем директорию, в которой будут выполняться все последующие операции. В противном случае все созданные файлы будут находиться в корневом каталоге («/»).
Указать директорию в «Терминале» можно двумя способами: при помощи файлового менеджера и при помощи команды cd. Разберем каждый в отдельности.
Файловый менеджер
Итак, допустим, вы хотите создать или, наоборот, удалить файл из папки «Документы», что находиться по пути:
/home/Имя_Пользователя/Документы
Чтобы открыть эту директорию в «Терминале», вам необходимо сначала открыть ее в файловом менеджере, а затем, нажав ПКМ, выбрать в контекстном меню пункт «Открыть в терминале».
По итогу откроется «Терминал», в котором будет указана выбранная директория.
Команда cd
Если вы не хотите пользоваться предыдущим способом или не имеете доступа к файловому менеджеру, вы можете указать директорию, не выходя из «Терминала». Для этого используют команду cd. Все что нужно сделать, это написать данную команду, указав затем путь к директории. Разберем это так же на примере папки «Документы». Впишите команду:
cd /home/Имя_Пользователя/Документы
Вот пример выполняемой операции:
Как видно, необходимо изначально ввести путь к директории (1), а после нажатия клавиши Enter в «Терминале» должна отобразиться выбранная директория (2).
После того как вы узнали, как выбрать директорию, в которой будут проводиться работы с файлами, можно переходить непосредственно к самому процессу создания и удаления файлов.
Создание файлов через «Терминал»
Для начала откройте сам «Терминал», нажав сочетание клавиш CTRL + ALT + T. Теперь можно начинать создание файлов. Для этого есть возможность воспользоваться шестью разными способами, которые будут продемонстрированы ниже.
Утилита touch
Предназначение команды touch в Linux — изменение временной метки (время изменения и время использования). Но если введенного имени файла утилита не найдет, она автоматически создаст новый.
Итак, для создания файла вам необходимо в командной строке прописать:
touch «Имя_Файла» (обязательно в кавычках).
Вот пример такой команды:
Функция перенаправления процесса
Этот способ можно считать самым простым. Чтобы создать файл с его помощью, необходимо всего лишь указать знак перенаправления и ввести имя создаваемого файла:
> «Имя_Файла» (обязательно в кавычках)
Пример:
Команды echo и функция перенаправления процесса
Этот способ практически ничем не отличается от предыдущего, только в этом случае необходимо перед знаком перенаправления вписать команду echo:
echo > «Имя_Файла» (обязательно в кавычках)
Пример:
Утилита cp
Как и в случае с утилитой touch, главным предназначением команды cp не является создание новых файлов. Она необходима для копирования. Однако задав переменную «null», вы создадите новый документ:
cp /dev/null «Имя_Файла» (обязательно без кавычек)
Пример:
Команда cat и функции перенаправления процесса
cat — это команда, служащая для связки и просмотра файлов и их содержимого, но стоит ее использовать вместе с перенаправлением процесса, как она сразу создаст новый файл:
cat /dev/null > «Имя_Файла» (обязательно в кавычках)
Пример:
Текстовый редактор vim
Именно у утилиты vim главное предназначение — это работа с файлами. Однако у нее нет интерфейса — все действия выполняются через «Терминал».
К сожалению, vim предустановлена не на всех дистрибутивах, например, в Ubuntu 16.04.2 LTS ее нет. Но это не беда, ее запросто можно скачать из репозитория и установить на свой компьютер, не покидая «Терминал».
Примечание: если текстовый консольный редактор vim у вас уже установлен, то пропустите этот шаг и переходите сразу к созданию файла с его помощью
Для установки введите команду:
sudo apt install vim
После нажатия Enter потребуется ввести пароль. Вводите его и ждите окончания загрузки и установки. В процессе у вас могут потребовать подтверждение выполнения команды — введите букву «Д» и нажмите Enter.
О завершении установки программы можно судить по появившемуся логину и имени компьютера.
После установки текстового редактора vim можно приступить к созданию файлов в системе. Для этого нужно воспользоваться командой:
vim -c wq «Имя_Файла» (обязательно в кавычках)
Пример:
Выше были перечислены шесть способов, как можно создавать файлы в дистрибутивах Linux. Конечно, это не все возможные, а лишь часть, но с их помощью обязательно получится выполнить поставленную задачу.
Удаление файлов через «Терминал»
Удаление файлов в «Терминале» практически ничем не отличается от их создания. Главное — знать все необходимые команды.
Важно: удаляя файлы из системы через «Терминал», вы их стираете безвозвратно, то есть, в «Корзине» их отыскать потом не получится.
Команда rm
Именно команда rm служит в Linux для удаления файлов. Вам всего-навсего нужно указать директорию, ввести команду и вписать имя файла, который нужно удалить:
rm «Имя_Файла» (обязательно в кавычках)
Пример:
Как можно заметить, после выполнения данной команды в файловом менеджере пропал файл «Новый документ».
Если вы хотите очистить целую директорию от ненужных файлов, то будет довольно долго вписывать их наименования раз за разом. Проще воспользоваться специальной командой, которая вмиг безвозвратно удалит все файлы:
rm *
Пример:
Выполнив эту команду, вы можете видеть как в файловом менеджере удалились все ранее созданные файлы.
Способ 2: Файловый менеджер
Файловый менеджер любой операционной системы (ОС) хорош тем, что он дает возможность наглядно отследить все проводимые манипуляции, в отличие от «Терминала» с его командной строкой. Однако есть и минусы. Один из них: нет возможности детально проследить за процессами, которые выполняются при той или иной операции.
В любом случае пользователям, которые недавно установили дистрибутив Linux себе на компьютер, он отлично подойдет, так как сходство с Windows, как говорится, налицо.
Примечание: в статье в качестве примера будет использован файловый менеджер Nautilus, который является стандартным для большинства дистрибутивов Linux. Однако инструкция для других менеджеров схожа, могут отличаться лишь названия пунктов и расположение элементов интерфейса.
Создаем файл в файловом менеджере
Необходимо делать следующее, чтобы создать файл:
- Открыть файловый менеджер (в данном случае Nautilus), нажав по его иконке на панели задач или проведя поиск по системе.
- Перейти в необходимую директорию.
- Нажать правой кнопкой мыши (ПКМ) по пустому месту.
- В контекстном меню навести курсор на пункт «Создать документ» и выбрать необходимый вам формат (в данном случае формат один — «Пустой документ»).
После этого в директории появится пустой файл, которому остается лишь задать имя.
Как удалить файл в Linux с помощью настольного файлового менеджера
Любой, кто работает с Windows или macOS, найдет среду рабочего стола Linux очень знакомой. Обозреватель файлов в большинстве сред рабочего стола Linux, таких как Ubuntu GNOME или Mint’s Cinnamon, действительно облегчает управление файлами в Linux для среднего пользователя, который может быть не знаком с интерфейсами командной строки..
Как только вы попали в проводник и нашли файл или файлы, которые хотите удалить, у вас есть два пути. Во-первых, вы можете переместить его в корзину, которая представляет собой специальный контейнер в файловой системе, в котором хранятся файлы и каталоги, которые вам больше не нужны.
- Откройте для себя лучшие приложения Linux 2020 года
Вы можете сделать это, щелкнув левой кнопкой мыши по файлу и нажав клавишу «Удалить» на клавиатуре. Это работает для групп файлов, которые вы выбрали их с помощью поля выбора или CTRL / SHIFT + щелчок левой кнопкой мыши. Кроме того, вы можете щелкнуть правой кнопкой мыши файл или один из выбранных вами файлов и выбрать «Переместить в корзину» из контекстного меню..
Как только файлы окажутся в мусорном контейнере, вам нужно будет очистить его вручную, чтобы окончательно удалить файлы внутри него. Вы можете сделать это, щелкнув правой кнопкой мыши «Корзина» на боковой панели навигации большинства файлового обозревателя и выбрав «Очистить корзину».
Двойной щелчок по нему приведет вас внутрь контейнера, где у вас будет возможность восстановить файлы в их исходных местах или навсегда удалить их все.
(Изображение предоставлено: Будущее)
В некоторых средах рабочего стола, таких как Mint’s Cinnamon, также есть возможность постоянного удаления файла прямо из контекстного меню, полностью обходя контейнер Trash..
Это следует делать только в том случае, если вы уверены, что хотите избавиться от файла, поскольку, хотя вы можете восстановить «навсегда» удаленный файл с жесткого диска, это не является гарантией, и процесс может быть очень сложным и отнимает много времени — и, возможно, дорого.
(Изображение предоставлено: Будущее)
Всегда безопаснее переместить что-либо в корзину, чем удалить его навсегда. Оставив его в корзине, вы сохраняете возможность передумать, если обнаружите, что вам нужен файл.
- Это лучшие ноутбуки Linux на рынке прямо сейчас
- Узнайте, какие из лучших дистрибутивов Linux 2020 года
- Проверьте лучшие дистрибутивы Linux для конфиденциальности и безопасности в 2020 году
В большинстве случаев, когда вы приступите к очистке контейнера, вы уже поняли, что вам что-то нужно, и восстановили файл. Если вы не успели очистить корзину, скорее всего, она вам действительно не нужна.
(Изображение предоставлено: Будущее)
Удаляем папки и каталоги в Linux
Если хотите удалить пустой каталог, задействуйте опцию -d.
rm -d dirname
Если хотим удалить непустой каталог и все файлы, которые в нём находятся, поступаем следующим образом:
rm -r dirname
Опять же, в случае наличия защиты от записи, система Linux спросит пользователя, стоит ли выполнять удаление. Если мы хотим удалить файлы и непустые каталоги без лишних вопросов, делаем так:
rm -rf dirname
Когда хотим удалить сразу несколько каталогов, мы применяем команду rm, прописывая за ней имена каталогов через пробел:
rm -r dirname1 dirname2 dirname3
Кстати, здесь мы тоже можем использовать подстановочный знак ( *) и регулярные выражения, обеспечивающие соответствие нескольким каталогам.
Удаление через rm
Для удаления файла, необходимо ввести команду rm и название документа.
rm dokument
Данная команда удалит dokument, с некоторыми особенностями:
- Интерпретатор запросит подтверждение на операцию.
- В примере предполагается, что dokument находится в домашнем каталоге как и пользователь (/root/).
Удалим файл “newfile” из каталога /usr/games.
rm /usr/games/newfile
Удалить все файлы в папке.
rm -f /usr/games/*
Ключ “-f” даст возможность не выводить запрос на подтверждение операции. Однако, команда выше очистит только все файлы из каталога “games” не трогая директории.
Если нужно очистить систему от всех файлов, которые заканчиваются «.doc», следует приписать в самом конце команды символ «*», без пробела.
rm -f /usr/games/*.doc
Утилита Remove (rm) требует особой осторожности в работе. При халатном отношении к делу пользователь может навсегда стереть важные файлы.
Чтобы подобный казус не случился, рекомендуется совершать удаление файлов при помощи стандартной программы rm с добавлением опции -i. Она станет некой перестраховкой в данном вопросе – система начнет запрашивать подтверждение пользователя перед удалением файлов из каталога. Как это выглядит на практике:
rm -i /root/*.doc
Если пользователю не нужен запрос на подтверждение, и он на 100% уверен в правильности своих дальнейших действий, можно вписать в команду опцию с противоположным воздействием на процесс (-f).
rm -i /usr/games/*.doc
Удаление через find
Для реализации задуманного можно воспользоваться еще одной альтернативной программой find. Кроме того, она пригодится даже там, где rm не осилит поставленную задачу. Её синтаксис выглядит следующим образом:
$ find папка критерий действие
К примеру, пользователю нужно очистить текущий каталог от всех файлов с названием «file». Их можно найти и уничтожить следующим способом:
find . -type f -name «file» -delete
Чтобы удалить устаревшие логи (то есть, файлы старше конкретного срока), используйте специальную команду в виде:
$ find /path/to/files* -mtime +5 –exec rm {} ;
Исходя из заданной команды, можно понять, что Линукс удалит из текущего каталога все файлы, «возраст» которых превышает 5 дней. Вот видите, как легко управлять устройством посредством терминала!
Иногда в Linux наличествуют файлы, восстановление которых не имеет ни малейшей актуальности посте чистки ПК. То есть, от них нужно избавиться раз и навсегда. Если использовать ранее упомянутую программу rm, то ничего не получится, поскольку она удаляет лишь ссылку на файл, сохраняя при этом его содержимое в памяти устройства. Он все еще будет поддаваться восстановлению, ровно до того момента, пока Линукс не перезапишет его иной информацией.
Через shred
Чтобы очистить систему от документа без возможности его дальнейшего восстановления, нужно использовать специальную команду под названием «shred». Как только срабатывает команда, файл удаляется, и система неоднократно перезаписывает его место на диске. Как это выглядит на практике:
$ shred /root/file
Что происходит далее? Система перезаписывает место на диске 3 раза (по умолчанию), но это количество поддается коррективам. Используйте опцию -n, если нужно что-то поменять. Добавление опции -z также повлияет на итоговый результат. С ней система запишет место на диске нулями, чтобы никто не мог догадаться о том, что определенный файл был уничтожен пользователем.
Синтаксис и опции команды rm
Команда «rm» имеет множество опций, что позволяет очень тонко управлять процессом удаления файлов. Вы можете изучить все доступные опции если введете в терминал Linux команду «man rm». Здесь же мы будем рассматривать самые простые и часто используемые опции.
Синтаксис команды «rm» выглядит следующим образом:
rm [опции] файлы
Разберем основные опции команды rm:
-f, –force Игнорировать несуществующие файлы и не требовать подтверждения перед удалением. -i Требовать подтверждения перед каждым удалением. -I Запрашивать подтверждение один раз перед удалением более трех файлов или при рекурсивном удалении. -r, -R, –recursive Рекурсивное удаление каталогов и их содержимого. -v, –verbose Вывод подробной информации о процессе. –help Вывод справочной информации о команде.
Теперь разберем некоторые опции, которые часто используются при удалении файлов в Linux через терминал. Например, очень часто возникает необходимость удалить папку вместе с всем содержимым. Для этого нужно использовать опцию «-r», которая включает рекурсивный обход папок. Например, для того чтобы удалить папку «folder1» и все ее содержимое нужно выполнить:
rm -r folder1/
Если права доступа к файлу разрешают только чтение, то в терминале Linux появится запрос подтверждения, и чтобы продолжить вам нужно будет ввести букву «y» (от англ. «yes»).
Чтобы избежать такой ситуации и удалять все файлы без предупреждения нужно использовать опцию «-f». Например:
rm -f file.txt
Не редко возникает необходимость удалить папку вместе со всеми файлами и без запросов на подтверждение. В этом случае нужно комбинировать опции «-r» и «-f». В результате команда выглядит вот так:
rm -rf folder1/
Если вы, наоборот, хотите каждый раз получать запрос подтверждения, то команду «rm» нужно выполнять с опцией «-i». Например, для того чтобы удалить все файлы в текущем каталоге с запросом подтверждения нужно выполнить:
rm -i *
Также бывает полезной опция «-v». При ее использовании в терминале будет появляться подробная информация о выполняемых действиях. Например, для того чтобы удалить все файлы в текущем каталоге и вывести информацию в терминал нужно выполнить:
rm -v *
Также вывод информации можно перенаправить в файл. Для этого после команды нужно использовать оператор перенаправления вывода (>) и указать название файла. Например:
rm -v * > delete.log
Естественно все эти опции можно комбинировать, в зависимости от ваших задач.
Как удалить каталоги (папки)
- Для удаления пустого каталога используйте эту опцию -d.rm -d dirname
- Чтобы удалить непустые каталоги и все файлы внутри них, используйте параметр r (рекурсивный).rm -r dirname
Если каталог или файл в каталоге защищены от записи, вам будет предложено подтвердить удаление.
- Чтобы удалить непустые каталоги и все файлы без запроса, используйте r (рекурсивные) и параметр -f.rm -rf dirname
- Чтобы удалить сразу несколько каталогов, используйте команду rm, за которой следуют имена каталогов, разделенные пробелом.rm -r dirname1 dirname2 dirname3
То же, что и в файлах, вы также можете использовать подстановочный знак ( *) и регулярные выражения для соответствия нескольким каталогам.
Выводы
Вот и все. Теперь вы знаете как удалить файл в Ubuntu, как видите, делать это не так уж сложно. Если у вас остались вопросы, пишите в комментариях!
[spoiler title=”Источники”]
- https://andreyex.ru/operacionnaya-sistema-linux/kak-udalyat-fajly-i-katalogi-s-pomoshhyu-komandnoj-stroki-linux/
- https://otus.ru/nest/post/981/
- https://lumpics.ru/how-create-or-delete-file-in-linux/
- https://ru.ditching.eu/kak-udalit-fajl-v-linux/
- https://www.vseprolinux.ru/udalit-fajl-linux
- https://comp-security.net/%D0%BA%D0%B0%D0%BA-%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C-%D1%84%D0%B0%D0%B9%D0%BB-%D0%B2-linux-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB/
- https://losst.ru/kak-udalit-fajl-cherez-terminal-linux
[/spoiler]