Поставяш в /etc/hosts например:
0.0.0.0 youtube.com
0.0.0.0 youtube.bg
Имай предвид, че домейните с youtube са не малко и може да се наложи да листнеш доста от тях тук. Един по един. С wildcards не става, така че ще трябва всеки един да се опише
По този метод го направих. Прежалих, че цялата система няма достъп до конкретните блокирани сайтове, и без това компютъра е изцяло детска стационарка и друг не го ползва. Ако ми се наложи да го ползвам, винаги през руута може да сложа коментари на дописваното от мен. Падна малко писане на домейни, но няма как. С шел-скрипт ми стана интересно, но първо, едва сега разбрах какво е cron, второ, това нещо се пуска в определени моменти, които трябва да посочвам, доколкото четох, и се отказах да се занимавам повече. Информативно изчетох инфото, като линкове, което включилите се тук ми посочиха. Накрая се спрях на най-простия метод с /etc/hosts. Благодаря на всички, които се включиха.
Слагането и махането на коментари е занимавка и направо хамалогия, ако са повече редове.
Можеш да направиш например, копие на /etc/hosts както си е било. Да речем с име hosts.old и друг файл с рестрикциите кръстен например restricted.
И двата където е /etc/hosts
След това, ако ти се наложи, само ги подменяш:
sudo cp /etc/hosts.old /etc/hosts за да върнеш старото положение и
sudo cp /etc/restricted /etc/hosts за да ограничиш желаните сайтове
Но и това си е много писане. BASH скриптове не пиша, че нещо ми е омотан синтаксиса, но може да пробваш този питонски, който спретнах ей сега набързо.
Скрипта взима един или два аргумента. Единият "-r" ще го накара да копира оригиналния /etc/hosts като /etc/hosts.orig и при успех, съдържанието на вече направения списък с примерен hosts файл с ограниченията.и име restricted върху /etc/hosts, като го подмени и така ще ограничи, каквото си сложил в restricted. Съдържанието на примерен restricted файл си е hosts, но с друго име:
0.0.0.0 youtube.com
0.0.0.0 youtube.bg
Вторият аргумент '-a' идва от allow и съответно връща положението обратно - копира /etc/hosts.orig ( така го кръстих в скрипта, но можеш да го смениш, с каквото ти е угодно ) върху /etc/hosts с рестрикциите в него, като така ги заличава и ограниченията отпадат.
Третият аргумент "-f" е, ако искаш да зададеш друг файл с друго местоположение от този, който си е по подразбиране ( /etc/restricted ). И по-добре е това да използваш, да не задръстваш /etc със странни неща. Но това е по желание разбира се.
Не съм го тествал, че тук не мога, но би трябвало да работи. Разбира се, трябва да го изпълниш със sudo защото писането и копирането в /etc иска права. Но предимството е, че само добавяш редове в /etc/restricted и си подменяш hosts с този файл когато поискаш, а резервното копие си седи за отмяна на ограниченията. Възможно най-простия е и на практика прави това, което и двете bash команди по-нагоре, но просто като добавиш една опция. Опростен вариант на проста шел команда.
Скрипта можеш да го сложиш на недостъпно място във файловата система или да му сложиш права само за теб, или пък да го сложиш в някоя флашка и от там да го изпълниш.
#!/usr/bin/env python3
#
# hosts.py
from argparse import ArgumentParser
import subprocess
parser = ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-r', '--restrict',
metavar='restrict',
action='store_true',
dest='restricted'
help='Restrict all domains in /etc/hosts by replasing it')
group.add_argument('-a', '--allow',
metavar='allow',
action='store_true',
dest='allowed'
help='Remove the restrictions by replasing /etc/host with its backup')
parser.add_argument('-f', '--file',
metavar='domains',
default='/etc/restricted', # Тук е името на hosts файла с рестрикциите, където да си добавяш нови, ако искаш. По подразбиране
dest='domains',
help='A replacement of /etc/hosts with the restricted domains')
args = parser.parse_args()
if args.restricted:
# $ cp /etc/hosts /etc/hosts.orig && mv /etc/do
proc = subprocess.run(['cp', '/etc/hosts', '/etc/hosts.orig', '&&', 'cp', domains, '/etc/hosts'])
print(proc.returncode)
elif args.allowed:
# $ cp /etc/hosts.orig /etc/hosts
proc = subprocess.run(['cp', '/etc/hosts.orig', '/etc/hosts'])
print(proc.returncode)