Как удалить gcc linux

Обновлено: 06.07.2024

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

В основном вы должны снова установить во временную директорию и перечислить все файлы, созданные в указанном каталоге, а затем удалить их из основной системы через скрипт.

Ниже приведен пример сценария для удаления GCC таким образом:

Запустите его из исходного каталога gcc с правами root.

Чтобы ответить на второй вопрос, вы можете установить последнюю версию gcc в репозитории ubuntu с помощью:

Overlay repos может иметь более новые версии, я видел предложение о новой версии в ubuntu-toolchain-r / test (install via):

Но я не уверен, добавили ли они еще 4.9. Если нет, вам действительно нужно будет установить из источника.

Похоже, что @roelofs нашел лучшее руководство для установки репо в своем ответе, так что идите туда и не забудьте дать ему преимущество, если это поможет :)

В GCC 5.1.0, хотя нет uninstall целевого уровня верхнего уровня , некоторые каталоги имеют его, в частности gcc , чтобы вы могли:

Это не удаляет все , что было установлено, но она удаляет основные исполняемые файлы , как gcc , g++ , cpp . , содержащиеся в этой папке, так что может быть достаточно.

Vality имеет отличный старт

Избавьтесь от каталогов, которые это оставляет пустым .

добавьте к Vality и Ben. Если вы сделаете это из своей собственной оболочки входа:

Необходимый -f флаг или сценарий может не работать, если есть некоторые проблемы с разрешением.

Самая высокая доступная версия GCC в хранилищах 12.04 составляет 4.6. Вы можете использовать диспетчер пакетов для установки более новой версии, но вам придется добавить PPA. Эта ссылка должна помочь, хотя это для немного более старой версии GCC (но может использоваться для самой новой версии).

Как отметил комментатор, если ваша собственная версия GCC была скомпилирована с --prefix параметром, вся установка должна находиться в этом каталоге под /usr/local или где вы его установили и может быть удалена.

Большинство программ в Linux написаны на C или С++, и если вы хотите собирать их из исходников, то вам обязательно понадобиться компилятор, также он понадобиться, если захотите начать писать свои программы на одном из этих языков.

Существует два основных компилятора в Linux - это GCC и Clang, они похожи по своим возможностям, но так сложилось, что первый считается стандартом для Ubuntu. GCC расшифровывается как GNU Compiler Collection. В этой статье мы рассмотрим, как выполняется установка GCC в Ubuntu, а также рассмотрим базовые приемы работы с этим набором программ в терминале.

Набор компиляторов GCC

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

В базовую поставку компилятора входят такие программы:

  • libc6-dev - заголовочные файлы стандартной библиотеки Си;
  • libstdc++6-dev - заголовочные файлы стандартной библиотеки С++;
  • gcc - компилятор языка программирования Си;
  • g++ - компилятор языка программирования C++;
  • make - утилита для организации сборки нескольких файлов;
  • dpkg-dev - инструменты сборки пакетов deb.

Все эти пакеты являются зависимостями пакета build-essential, поэтому для установки всего необходимого достаточно установить этот пакет.

Установка GCC в Ubuntu

Если вас устраивает текущая версия GCC, которая есть в официальных репозиториях дистрибутива, то вам достаточно установить пакет build-essential. Для этого выполните команду:

sudo apt -y install build-essential

H1BJ+aA10chuAAAAAElFTkSuQmCC

После завершения установки все необходимое для компиляции программ будет установлено. И вы сможете использовать компилятор. Рассмотрим версии и расположение файлов компилятора:

whereis gcc make

YAsEijQilh3P8XzVqal8hwFiAAAAAASUVORK5CYII=

mQ1aHDHAAAAAElFTkSuQmCC

yELAAAAAElFTkSuQmCC

Если необходима более новая версия компилятора, например, на данный момент последняя версия - 11, то можно использовать PPA разработчиков с тестовыми сборками. Для добавления PPA в систему выполните команды:

sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test && sudo apt update

kclq444AAAAASUVORK5CYII=

Далее установите сам компилятор:

sudo apt -y install gcc-snapshot && sudo apt -y install gcc-11g++-11

AaKdPs7la0w0AAAAAElFTkSuQmCC

Это не заменит ваш текущий компилятор на новый. В системе просто появятся 2 версии компиляторов gcc-11 и g++11, которые вы можете использовать для своих программ. Это лучший вариант на данный момент, но если вы хотите все же сделать gcc-9 компилятором по умолчанию, выполните:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9

A0O2YdWJaOJ9AAAAAElFTkSuQmCC

Готово, теперь вы можете проверить версию gcc-6:

RNPWXVpTrs4AAAAASUVORK5CYII=

Установка GCC в Ubuntu завершена, и можно переходить к сборке программ. Для удаления компилятора достаточно удалить пакет build-essential при помощи команды:

sudo apt purge -y build-essential && sudo apt-y autoremove

Использование GCC в Ubuntu

Рассмотрим пример компиляции минимальной программы hello.c для освоения работы с gcc. Вот код программы, откройте любой текстовый редактор и сохраните его в файле с названием hello.c:

dfR8yQ+0dotHBObQTDvXB8xjDEugtQ+d0xm7YVKjmo3Zd614kOdRaSP9GeHaXNE6mhZRoeaw6Zhl7bddbxHHUYVbZS7oWOqhWa6BMjZv9rIJTjcVJJO45BHdn1a5x7aKQvGKbfU76b6CR6y+MMJCNqQRzcSvl55Itht05ef0fdfRpREv47uy31Of9mWIoAAAAASUVORK5CYII=

Теперь запустим сборку программы:

Когда сборка программы будет завершена, на выходе появится файл с названием a.out. a.out –это имя исполняемого файла, которое по умолчанию, сгенерировано при помощи gcc. Далее можно запустить данный файл:

h0mzJPtkAAAAASUVORK5CYII=

Готово, компилятор прекрасно работает в системе, и теперь можно писать свои программы или собирать чужие.

Выводы

В этой статье мы рассмотрели, как установить gcc в Ubuntu 20.04, это один из самых популярных компиляторов для этой операционной системы. И устанавливается он очень просто, если у вас остались вопросы, спрашивайте в комментариях!

На завершение видео с демонстрацией самого процесса:

Я использую Windows 10, и я думаю, что я уже установил gcc 4.9.2 с IDE Code :: Blocks автоматически. Это результат gcc --version команды на CMD:

gcc (tdm-1) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. Это свободное программное обеспечение; см. источник для условий копирования. Там нет гарантии; даже не для ИЗДЕЛИИ или ФИТНЕСА ДЛЯ ОСОБЕННОЙ ЦЕЛИ.

Но теперь я скачал tdm64-gcc-5.1.0-2 и хочу обновить мою версию gcc, но я не знаю, как удалить предыдущую версию?

Я установил новую версию, но все же получаю тот же результат от команды CMD line gcc --version !

1 ответ на вопрос

Я скачал tdm64-gcc-5.1.0-2 и хочу обновить, но я не знаю, как удалить предыдущую версию.

Если вы использовали установщик, TDM-GCC будет указан в разделе « Панель управления \ Программы \ Программы и компоненты» и может быть удален из него в обычном порядке.

Тем не менее, поскольку вы считаете, что возможно, что более старая версия была включена в Code :: Blocks, вы можете удалить текущую версию этой программы и выбрать версию, не включающую TDM-GCC. На странице загрузок Code :: Blocks первые три опции (те, которые не включены mingw в имя файла) - это те, которые вы ищете.

Тем не менее, в любом случае удаление не является обязательным.

В командной строке вы можете просто отредактировать переменные PATH / Path окна ( Панель управления \ Система и безопасность \ Система → Расширенные настройки системы -> Переменные среды . ). Вы можете удалить любые ссылки на вашу предыдущую установку TDM-GCC и добавить любые необходимые записи для вашей новой установки.

Аналогичным образом, многие IDE позволяют вам указать точное расположение компонентов компилятора, которые вы хотите использовать (что, вероятно, делает регистрацию TDM-GCC в командной строке менее важной).

В частности, для Code :: Blocks, эти настройки находятся в Настройках → Компилятор . на вкладке исполняемых файлов Toochain . Обратите внимание, что расположение элементов в Program Files должно находиться в вашем bin подкаталоге установки TDM-GCC :

Code::Blocks Global Compiler Settings

В качестве небольшого предложения, если вы до сих пор совершенно не знаете, где gcc.exe может находиться TDM-GCC (или любые другие версии ), вам может gcc.exe помочь поиск Windows .

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

gcc (tdm64-1) 5.1.0

Copyright (C) 2015 Free Software Foundation, Inc.

Это бесплатное программное обеспечение; см. источник для условий копирования. Там нет гарантии; даже не для ИЗДЕЛИИ или ФИТНЕСА ДЛЯ ОСОБЕННОЙ ЦЕЛИ.


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

Некоторые из них компилятор включает или отключает по умолчанию. Так в бинарных файлах могут возникать уязвимости, о которых мы не знаем.

Checksec — это простая утилита, позволяющая определить, какие свойства были включены при компиляции. В этой статье я расскажу:

  • как использовать утилиту checksec для поиска уязвимостей;
  • как использовать компилятор gcc для устранения найденных уязвимостей.

Установка checksec

Для Fedora OS и других систем на базе RPM:


Для систем на базе Debian используйте apt.

Быстрый старт с checksec

Утилита сhecksec состоит из единственного скриптового файла, который, впрочем, довольно большой. Благодаря такой прозрачности вы можете узнать, какие системные команды для поиска уязвимостей в бинарных файлах выполняются под капотом:

Давайте запустим checksec для утилиты просмотра содержимого каталогов (ls):


Выполнив команду в терминале, вы получите отчёт о том, какими полезными свойствами обладает этот бинарник, и какими не обладает.

Первая строка — это шапка таблицы, в которой перечислены различные свойства безопасности — RELRO, STACK CANARY, NX и так далее. Вторая строка показывает значения этих свойств для бинарного файла утилиты ls.

Hello, бинарник!

Я скомпилирую бинарный файл из простейшего кода на языке С:


Обратите внимание, что пока я не передал компилятору ни одного флага, за исключением -o (он не относится к делу, а просто говорит, куда выводить результат компиляции):


Теперь запущу утилиту checksec для моего бинарника. Некоторые свойства отличаются от свойств


Checksec позволяет использовать различные форматы вывода, которые вы можете указать с помощью опции --output. Я выберу формат JSON и сделаю вывод более наглядным с помощью утилиты jq:

Анализ (checksec) и устранение (gcc) уязвимостей

Созданный выше бинарный файл имеет несколько свойств, определяющих, скажем так, степень его уязвимости. Я сравню свойства этого файла со свойствами бинарника ls (тоже указаны выше) и объясню, как это сделать с помощью утилиты checksec.

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

1. Отладочные символы

Начну с простого. Во время компиляции в бинарный файл включаются определённые символы. Эти символы используются при разработке программного обеспечения: они нужны для отладки и исправления ошибок.

Отладочные символы обычно удаляются из той версии бинарника, которую разработчики выпускают для широкого использования. Это никак не влияет на работу программы. Такая очистка (она обозначена словом strip) часто выполняется для экономии места, так как файл становится легче после удаления символов. А в проприетарном программном обеспечении эти символы часто удаляют ещё и потому, что у злоумышленников есть возможность прочитать их в двоичном формате и использовать в своих целях.

Сhecksec показывает, что отладочные символы присутствуют в моём бинарнике, но их нет в файле ls.

То же самое может показать запуск команды file. Символы не удалены (not stripped).

Как работает checksec

Запустим эту команду с опцией --debug:


Так как утилита checksec — это один длинный скрипт, то для его изучения можно использовать функции Bash. Выведем команды, которые запускает скрипт для моего файла hello:


Утилита checksec использует для чтения двоичного файла команду readelf со специальным флагом --symbols. Она выводит все отладочные символы, которые содержатся в бинарнике.


Из содержимого раздела .symtab можно узнать количество найденных символов:

Как удалить отладочные символы после компиляции

В этом нам поможет утилита strip.

Как удалить отладочные символы во время компиляции

При компиляции используйте флаг -s:


Убедиться, что символы удалены, можно и с помощью утилиты checksec:

2. Canary

Canary (осведомители) — это «секретные» значения, которые хранятся в стеке между буфером и управляющими данными. Они используются для защиты от атаки переполнения буфера: если эти значения оказываются изменены, то стоит бить тревогу. Когда приложение запускается, для него создаётся свой стек. В данном случае это просто структура данных с операциями push и pop. Злоумышленник может подготовить вредоносные данные и записать их в стек. В этом случае буфер может быть переполнен, а стек повреждён. В дальнейшем это приведёт к сбою работы программы. Анализ значений canary позволяет быстро понять, что произошёл взлом и принять меры.

Включаем canary

Для этого при компиляции используем флаг -stack-protector-all:


Вот теперь сhecksec может с чистой совестью сообщить нам, что механизм canary включён:

3. PIE

Включённое свойство PIE позволяет произвольно размещать в памяти исполняемый код независимо от его абсолютного адреса:

PIE (Position Independent Executable) — исполняемый позиционно-независимый код. Возможность предсказать, где и какие области памяти находятся в адресном пространстве процесса играет на руку взломщикам. Пользовательские программы загружаются и выполняются с предопределённого адреса виртуальной памяти процесса, если они не скомпилированы с опцией PIE. Использование PIE позволяет операционной системе загружать секции исполняемого кода в произвольные участки памяти, что существенно усложняет взлом.


Часто свойство PIE включают только при компиляции библиотек. В выводе ниже hello помечен как LSB executable, а файл стандартной библиотеки libc (.so) — как LSB shared object:


Checksec получает эту информацию следующим образом:


Если вы запустите эту же команду для библиотеки, то вместо EXEC увидите DYN:

Включаем PIE

При компиляции программы нужно указать следующие флаги:


Чтобы убедиться, что свойство PIE включено, выполним такую команду:


Теперь у нашего бинарного файла (hello) тип сменится с EXEC на DYN:

Средства операционной системы и процессора позволяют гибко настраивать права доступа к страницам виртуальной памяти. Включив свойство NX (No Execute), мы можем запретить воспринимать данные в качестве инструкций процессора. Часто при атаках переполнения буфера злоумышленники помещают код в стек, а затем пытаются его выполнить. Однако, если запретить выполнение кода в этих сегментах памяти, можно предотвратить такие атаки. При обычной компиляции с использованием gcc это свойство включено по умолчанию:


Чтобы получить информацию о свойстве NX, checksec вновь использует команду readelf. В данном случае RW означает, что стек доступен для чтения и записи. Но так как в этой комбинации отсутствует символ E, на выполнение кода из этого стека стоит запрет:

Отключение NX

Отключать свойство NX не рекомендуется, но сделать это можно так:


После компиляции мы увидим, что права доступа к стеку изменились на RWE:

5. RELRO

В динамически слинкованных бинарниках для вызова функций из библиотек используется специальная таблица GOT (Global Offset Table). К этой таблице обращаются бинарные файлы формата ELF (Executable Linkable Format). Когда защита RELRO (Relocation Read-Only) включена, таблица GOT становится доступной только для чтения. Это позволяет защититься от некоторых видов атак, изменяющих записи таблицы:


В данном случае включено только одно из свойств RELRO, поэтому checksec выводит значение «partial». Для отображения настроек сhecksec использует команду readelf.

Включаем полную защиту (FULL RELRO)

Для этого при компиляции нужно использовать соответствующие флаги:


Всё, теперь наш бинарник получил почётное звание FULL RELRO:

Другие возможности checksec

Тему безопасности можно изучать бесконечно. Даже, рассказывая про простую утилиту checksec в этой статье, я не смогу охватить всё. Тем не менее, упомяну ещё несколько интересных возможностей.

Проверка нескольких файлов

Нет необходимости для каждого файла запускать отдельную команду. Можно запустить одну команду сразу для нескольких бинарных файлов:

Проверка процессов

Утилита checksec также позволяет анализировать безопасность процессов. Следующая команда отображает свойства всех запущенных программ в вашей системе (для этого нужно использовать опцию --proc-all):


Вы также можете выбрать для проверки один процесс, указав его имя:

Проверка ядра

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

Предупреждён — значит вооружён

Подробно изучите свойства безопасности и попытайтесь понять, на что именно влияет каждое из них и какие виды атак это позволяет предотвратить. Checksec вам в помощь!


Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Читайте также: