Расшифровка скрипта fixubuntu

Искусство написания bash скриптов. Делимся своими наработками
Ответить
Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Расшифровка скрипта fixubuntu

Сообщение Серый » 12 янв 2015, 22:48

В убунту есть такая фишка, там типа инфа о всех действиях юзера (внутри Unity Dash) сливается куда-то там. Умные люди придумали противоядие. Выглядит оно так:

Код: Выделить всё

wget -q -O - https://fixubuntu.com/fixubuntu.sh | bash
Это противоядие работает, но тупо копипастить строку в консоль как-то не то (хотя я это сделал и это работает), но хотелось бы самому разобраться, что значит каждая строка скрипта. Короче, буду признателен, если кто расшифрует построчно, желательно после знака # в конце каждой строки написать русским текстом, что значит данная строка в баше. Приведу сам скрипт:

Код: Выделить всё

#!/bin/bash

GS="/usr/bin/gsettings"
CCUL="com.canonical.Unity.lenses"

# Figure out the version of Ubuntu that you're running
V=`/usr/bin/lsb_release -rs`
# The privacy problems started with 12.10, so earlier versions should do nothing

# Added check because 14.04.1 isn't a number
if [ $V == "14.04.1" ]; then
  $V=14.04
fi

# Minimum verision check
MIN=`echo $V'>'12.10 | bc -l`

# Maximum version check
FIXED_VER=15.04
MAX=`echo $FIXED_VER'>'$V | bc -l`

if [[ $MIN -eq 0 || $MAX -eq 0 ]]; then 
  echo "Good news! This version of Ubuntu is not known to invade your privacy."
  exit 0 #Script should exit if ubuntu version outside range
fi

# Check Canonical schema is present. Take first match, ignoring case.
SCHEMA="`$GS list-schemas | grep -i $CCUL | head -1`"
if [[ -z "$SCHEMA" ]]
  then
  printf "Error: could not find Canonical schema %s.\n" "$CCUL" 1>&2
  exit 1
else
  CCUL="$SCHEMA"
fi

# Turn off "Remote Search", so search terms in Dash don't get sent to the internet
$GS set $CCUL remote-content-search none

# If you're using earlier than 13.10, uninstall unity-lens-shopping
if [[ $V < 13.10 ]]; then
  sudo apt-get remove -y unity-lens-shopping

# If you're using a later version, disable remote scopes
else
  $GS set $CCUL disabled-scopes \
    "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope',
    'more_suggestions-populartracks.scope', 'music-musicstore.scope',
    'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope',
    'more_suggestions-skimlinks.scope']"
fi;

# Block connections to Ubuntu's ad server, just in case
#if ! grep -q "127.0.0.1 productsearch.ubuntu.com" /etc/hosts; then
#  echo -e "\n127.0.0.1 productsearch.ubuntu.com" | sudo tee -a /etc/hosts >/dev/null
#fi
#Editing /etc/hosts is OK but adding a iptables rule seems to be a more elegant solution
sudo iptables -A OUTPUT -d 91.189.92.11 -j DROP

echo "All done. Enjoy your privacy."
Я сам скрипт частично понимаю, там типа идёт определение версии убунты, потом, в зависимости от версии, или удаление пакета или через iptables отрубаются концы, но это в целом, а хотелось бы разобраться детально, самому не под силу, да и iptables пока что не осилил, честно говоря.

Спасибо.

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение Серый » 13 янв 2015, 21:44

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

Код: Выделить всё

#!/bin/bash

GS="/usr/bin/gsettings" # определяем переменную
CCUL="com.canonical.Unity.lenses" # определяем переменную

# Figure out the version of Ubuntu that you're running
V=`/usr/bin/lsb_release -rs` # здесь не знаю, возможно тоже переменная
# The privacy problems started with 12.10, so earlier versions should do nothing

# Added check because 14.04.1 isn't a number
if [ $V == "14.04.1" ]; then # здесь уже понял, что мы определяли переменную, /usr/bin/lsb_release -rs, если вывод будет равен 14.04.1, то дальше действия ниже
  $V=14.04 # определяем значение переменной V как версия убунты
fi # слону понятно, что это конец цикла, или конец условия, мне в данном случае неважно

# Minimum verision check
MIN=`echo $V'>'12.10 | bc -l` # что это делает не понимаю, в консоли запустил, но вывод непонятен, вывод в консоли получил (standard_in) 1: syntax error

# Maximum version check
FIXED_VER=15.04 # переменная
MAX=`echo $FIXED_VER'>'$V | bc -l` # переменная

if [[ $MIN -eq 0 || $MAX -eq 0 ]]; then # я пас, не знаю зачем
  echo "Good news! This version of Ubuntu is not known to invade your privacy." # это типа сообщение: хорошие новости, мы хорошие ребята не знаем, где вы взяли эту версию убунты, но в ней таки нет каки, живите свободно (где они взяли эту версию убунты для меня загадка)
  exit 0 #Script should exit if ubuntu version outside range # тут я и транслэйтом не понял
fi # понятно

# Check Canonical schema is present. Take first match, ignoring case.
SCHEMA="`$GS list-schemas | grep -i $CCUL | head -1`" # это тоже не понял, выглядит так
# /usr/bin/gsettings list-schemas | grep -i $CCUL | head -1
# вывод
# seryi@seryi-laptop:~$ /usr/bin/gsettings list-schemas | grep -i $CCUL | head -1
# Использование: grep [ПАРАМЕТР]… ШАБЛОН [ФАЙЛ]…
# Запустите «grep --help» для получения более подробного описания.
if [[ -z "$SCHEMA" ]] # БЛИН, Я В БАШЕ ТУПОЙ КАК ДЕРЕВО, я понимаю, что скрипт написан на все случаи жизни, но хотелось бы минимум увидеть, что нужно сделать, чтобы эта убунта не ломилась в тырнет и не сливала инфу, что собственно я и написал ранее, дальше у меня нет сил ковырять скрипт, я в нём ничего не понимаю, за сим забиваю на это дело, мб завтра продолжу, сегодня надоело, ниже далее скрипт без изменений, по сравнению с версией выше в этом топике
  then
  printf "Error: could not find Canonical schema %s.\n" "$CCUL" 1>&2
  exit 1
else
  CCUL="$SCHEMA"
fi

# Turn off "Remote Search", so search terms in Dash don't get sent to the internet
$GS set $CCUL remote-content-search none

# If you're using earlier than 13.10, uninstall unity-lens-shopping
if [[ $V < 13.10 ]]; then
  sudo apt-get remove -y unity-lens-shopping

# If you're using a later version, disable remote scopes
else
  $GS set $CCUL disabled-scopes \
    "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope',
    'more_suggestions-populartracks.scope', 'music-musicstore.scope',
    'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope',
    'more_suggestions-skimlinks.scope']"
fi;

# Block connections to Ubuntu's ad server, just in case
#if ! grep -q "127.0.0.1 productsearch.ubuntu.com" /etc/hosts; then
#  echo -e "\n127.0.0.1 productsearch.ubuntu.com" | sudo tee -a /etc/hosts >/dev/null
#fi
#Editing /etc/hosts is OK but adding a iptables rule seems to be a more elegant solution
sudo iptables -A OUTPUT -d 91.189.92.11 -j DROP

echo "All done. Enjoy your privacy."

Аватара пользователя
ZEN
Администратор
Сообщения: 1358
Зарегистрирован: 27 сен 2012, 18:23
Темы: 208
Откуда: Украина, Одесса
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение ZEN » 13 янв 2015, 23:04

А смысл его комментировать, если там уже есть комментарии?)

Суть скрипта проста, он с помощью gsettings отключает рекламные линзы. А с помощью iptables еще и блочит хост, откуда unity качает рекламу.
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение Серый » 13 янв 2015, 23:20

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

Аватара пользователя
nk
Модератор
Сообщения: 413
Зарегистрирован: 14 сен 2014, 00:35
Темы: 78
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение nk » 14 янв 2015, 19:20

(Сорри, за форматирование но мне так быстрее ответить)

> MIN=`echo $V'>'12.10 | bc -l` # что это делает не понимаю, в консоли запустил, но вывод непонятен, вывод в консоли получил (standard_in) 1: syntax error
А ты повтори и со всем переменными в строке, вот н-р так можно

Код: Выделить всё

$ V=`/usr/bin/lsb_release -rs` MIN=`echo $V'<'12.10 | bc -l` echo $MIN
0
В общем коммент выше этой переменной все подсказывает: # Minimum verision check

> if [[ $MIN -eq 0 || $MAX -eq 0 ]]; then # я пас, не знаю зачем
> echo "Good news! This version of Ubuntu is not known to invade your privacy." # это типа сообщение: хорошие новости, мы хорошие ребята не знаем, где вы взяли эту версию убунты, но в ней таки нет каки, живите свободно (где они взяли эту версию убунты для меня загадка)
Версию они взяли из переменной $V и которая еще в $MIN проверяется

> seryi@seryi-laptop:~$ /usr/bin/gsettings list-schemas | grep -i $CCUL | head -1
Вот так надо

Код: Выделить всё

$ CCUL="com.canonical.Unity.lenses";  /usr/bin/gsettings list-schemas | grep -i $CCUL | head -1
com.canonical.Unity.Lenses
> if [[ -z "$SCHEMA" ]]
Сделай man bash и в CONDITIONAL EXPRESSIONS увидишь:
-z string
True if the length of string is zero.
еще есть -n
-n string
True if the length of string is non-zero.
Вот тебе пример:

Код: Выделить всё

┌─[ /tmp 
└─$ n="k"; [ -z $n ] && echo $n
┌─[ /tmp 
└─$ n="k"; [ -n $n ] && echo $n
k
┌─[ /tmp 
└─$ n="k"; [ ! -z $n ] && echo $n
k
> я понимаю, что скрипт написан на все случаи жизни, но хотелось бы минимум увидеть, что нужно сделать, чтобы эта убунта не ломилась в
Знаешь в свое время сказали: «Если вы выучили Red Hat, то всё, что вы знаете, — это Red Hat, если вы выучили Slackware — вы знаете Linux.»
https://ru.wikipedia.org/wiki/Slackware#cite_note-go2-1
Где-то я видал - вместо RedHat человек писал про Ubuntu так...

в обще знаешь, вот с арча ты ушел, а что Manjaro не выбрал? Ее вроде то ж поставил и забыл, ну и на обновления не надо вроде молиться, они если приходят, то перед этим команда разрабов сама вроде как проверяет и только тогда зеркалит арчевские обновы. И тебе самому выигрыш со временем, арч ты знаешь и как его готовить

Продолжая тему, если тебя так беспокоит что она ломится в сеть, в ней есть реклама, может дело действительно в дистре(?) Посмотри мяту еще, в ней вроде такого нет и выпилено, а еще и кодеки, и помимо apt - aptitude установлен будет) и т.д.
• Web: Firefox • Jabber: Gajim • WM: Openbox
Изображение

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение Серый » 15 янв 2015, 18:59

nk, спасибо за расшифровку. Насчёт Manjaro..., не знаю почему не выбрал, не нравится этот дистр мне, на уровне интуиции, а мб ищу unity с коробки в дистре. И да, кстати, ты навёл меня на мысль прикрутить unity к арчу.

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение Серый » 15 янв 2015, 21:01

Последнюю мысль я не осилил, к сожалению.

Аватара пользователя
Porthos
Сообщения: 92
Зарегистрирован: 04 окт 2012, 23:19
Темы: 1
Откуда: EU
Статус: Не в сети

Re: Расшифровка скрипта fixubuntu

Сообщение Porthos » 16 янв 2015, 00:55

Серый писал(а):Последнюю мысль я не осилил, к сожалению.
Есть история успеха, попробуй, вдруг ещё актуально :)
Кошки живут по обе стороны реальности.
(с) Constantine

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей