Ответы пользователя по тегу Linux
  • Как написать на bash программу (исполнимый файл), которая меняет каталог?

    @abcd0x00
    Как же написать программу, меняющую текущий каталог (если это возможно О_о)?


    #!/bin/bash
    
    cd /
    
    echo "I'm in `pwd`"
    
    bash
    
    exit 0
    Ответ написан
  • Как одной строчкой расшифровать и распаковать файл в терминале linux?

    @abcd0x00
    [guest@localhost ~]$ echo "H4sIACqNc1gAA/NNLCnKrOACAG/TSfYHAAAA" | base64 -d | gunzip
    Matrix
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как выкачать сайт с видео?

    @abcd0x00
    Для начала поставь какое-нибудь расширение в браузер типа FlashGot. Оно обычно даёт скачать файл неофициально, но не всегда, так как иногда есть защита от этого на сайтах (предоставляют видео только мелкими кусочками).
    Ответ написан
    Комментировать
  • Как задать для wget -O параметр с динамическим именем страницы?

    @abcd0x00
    make_name()
    {
        echo "file_$(date '+%Y-%m')_$1.txt"
    }
    
    for i in 1 2 3; do
        wget -O "$(make_name $i)" "https://www.yandex.ru"
    done


    Результат
    [guest@localhost tmp]$ ls *.txt
    file_2017-02_1.txt  file_2017-02_2.txt  file_2017-02_3.txt
    [guest@localhost tmp]$
    Ответ написан
    Комментировать
  • Как остановить вывод команды через BASH?

    @abcd0x00
    [guest@localhost ~]$ func() { while true; do echo a; echo b; sleep 5; done; }
    [guest@localhost ~]$ func | head -2
    a
    b
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • В файл1 удалить строки из файл2?

    @abcd0x00
    Как в файл1 содержащим строки вида почта:имя:фамилия:возраст удалить те строки которые содержатся в файл2 где указана просто почта

    grep -f file2.txt -v file1.txt >output.txt
    Ответ написан
    Комментировать
  • Как правильно написать скрипт на Bash?

    @abcd0x00
    Через конечный автомат
    text="\
    abc1
    abc2
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr1| - |user logged in| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr1| - |user changed password| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr1| - |user logged off| -
    def1
    def2
    Mon, 1 Aug 2012 00:15:00 +xxxx|1.1.1.1|dnepr2| - |user logged in| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr2| - |user logged in| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr2| - |user changed password| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr2| - |user logged off| -
    ghi1
    ghi2
    "
    
    fsm()
    {
        awk '{
            switch (state) {
            case 0:
                if (/user logged in/) {
                    out = $0
                    state = 1
                }
                break
            case 1:
                if (/user logged in/) {
                    out = $0;
                } else if (/user changed password/) {
                    out = out"\n"$0
                    state = 2
                } else {
                    out = ""
                    state = 0
                }
                break
            case 2:
                if (/user logged off/) {
                    out = out"\n"$0
                    print out
                    out = ""
                    state = 0
                } else {
                    out = ""
                    state = 0
                }
                break
            }
        }'
    }
    
    echo "$text" | fsm


    Вывод
    [guest@localhost tmp]$ echo "$text" | fsm
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr1| - |user logged in| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr1| - |user changed password| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr1| - |user logged off| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr2| - |user logged in| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr2| - |user changed password| -
    Mon, 1 Aug 2012 00:15:00 +0200|1.1.1.1|dnepr2| - |user logged off| -
    [guest@localhost tmp]$
    Ответ написан
    Комментировать
  • Как правильно поступить с датой?

    @abcd0x00
    Сначала переделай это
    get_proxy_list() {
      savefile=~/.PROXY_LIST
      date=$(date +%d.%m.%Y)
      url="http://site.com/proxy/list_${date}.txt"
    
      ...
    
    }


    В это
    make_dmy_date() {
        date "+%d.%m.%Y"
    }
    
    make_proxy_url() {
        echo "http://site.com/proxy/list_$(make_dmy_date).txt"
    }
    
    make_proxy_ofname() {
        echo "~/.PROXY_LIST"
    }
    
    get_proxy_list() {
      url=$1
      savefile=$2
    
      ...
    
    }
    
    get_proxy_list `make_proxy_url` `make_proxy_ofname`


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

    А если всё в куче писать, то будет вот такая свалка, как у тебя сейчас, - неповоротливая и непригодная для каких-то тонких изменений и настройки.
    Ответ написан
    8 комментариев
  • Что тормозит загрузку?

    @abcd0x00
    Кто может подсказать в какую сторону копать, какие журналы посмотреть?

    Журналы загрузки и сообщений. Но для начала нужно просто в консоль войти изначально и посмотреть, есть ли в ней тормоза. Чтобы в консоль зайти, нужно к ядру в загрузчике присоединить число 3. То есть надо просто локализовать проблему, разделив область анализа дихотомически. Если проблема возникает и без графики, то в графике можно не искать решение. А если проблема возникает только при графике, то можно не искать решение в каких-то базовых, консольных процессах.
    Ответ написан
    Комментировать
  • Как в bash обработать кучу строк?

    @abcd0x00
    и как дальше работать с $temp ?

    echo "$temp" | что-то работает дальше

    Пример
    [guest@localhost ~]$ text=$(head -3 /etc/passwd)
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$text"
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$text" | grep oo
    root:x:0:0:root:/root:/bin/bash
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как узнать, какая команда встречается в максимальном количестве категорий справки (man)?

    @abcd0x00
    [guest@localhost ~]$ man -k . | awk 'BEGIN {n = 0} {arr[$1]++; x=arr[$1]; if(x > n) {n = x; w = $1}} END {print w, n}'
    intro 8
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как запускать .py в директории Х определенной версией Python?

    @abcd0x00
    Все файлы .py одинаковые, менять заголовок не хочется.

    Даже если все файлы одинаковые, не стоит их запускать на разных версиях. Для каждой версии (имеются в виду 2 или 3) должен быть свой вариант. Это относится к глубинным различиям в этих версиях. Выглядеть код может одинаково, а работать совсем по-разному.
    Ответ написан
    Комментировать
  • В какие игры вы играете на Linux?

    @abcd0x00
    Вообще, много всяких игр 90-х и начала 2000, плюс восьмибитные из детства.

    Battlefield Vietnam
    BroodWar
    C&C Tiberian Sun
    CLSWC2BN # это Warcraft II
    Emperor Battle For Dune
    IGI 2

    85c7f1056dfe44488e948cec5fa4278f.png

    А в Steam даже не захожу, так как жалко времени на игры, но пробовал в Dota2 играть, но она надоела быстро.
    Ответ написан
    Комментировать
  • Господа, пoсоветуйте книги по созданию bash скриптов и по регуляркам?

    @abcd0x00
    Скрипты в Bash
    Это вообще сайт с руководствами
    tldp.org/guides.html
    Это ABSG (Advanced Bash-Scripting Guide)
    tldp.org/LDP/abs/html/index.html
    ABSG тебе уже дали на русском.

    Регулярные выражения
    Тут на питоне
    getpython3.com/diveintopython3/regular-expressions.html
    https://docs.python.org/3/howto/regex.html#regex-howto
    Ещё книжка есть
    "Mastering Regular Expressions" Jeffrey Friedl
    Ответ написан
    Комментировать
  • Как заставить sed искать не с начала строки с квантификатором '*'?

    @abcd0x00
    [guest@localhost ~]$ echo 'abcd' | sed 's/bb*//'
    acd
    [guest@localhost ~]$


    abcd (почему?!!)

    Ты не понимаешь, как он работает. b* совпадает с пустотой. А пустота где? Пустота в начале. Поэтому он берёт эту пустоту совпавшую и заменяет на пустоту.

    Добавим замену на x и видим это наглядно
    [guest@localhost ~]$ echo 'abcd' | sed 's/b*/x/'
    xabcd
    [guest@localhost ~]$


    Если же ты поставишь там в конце g, это совсем по-другому работает
    [guest@localhost ~]$ echo 'abcdabcd' | sed 's/b*/x/g'
    xaxcxdxaxcxdx
    [guest@localhost ~]$

    Это совсем не то, что надо (он заменил все пустоты и все b).

    Поэтому, если тебе надо заменить только первое вхождение с b, используется либо +, либо аналог плюса через звёздочку
    [guest@localhost ~]$ echo 'abcdabcd' | sed 's/bb*/x/'
    axcdabcd
    [guest@localhost ~]$
    Ответ написан
    1 комментарий
  • Как передать данные в выполняемый скрипт?

    @abcd0x00
    echo "abc" | script.py
    Ответ написан
    Комментировать
  • Как редактировать конфигурационные файлы в Linux?

    @abcd0x00
    Каждая программа сама определяет свой формат файлов. Это могут быть как общие форматы вроде xml, json, yaml, так и самодельные форматы, в которых свои понятия переменных (могут быть похожи на bash'овский, а могут и не быть).
    Ответ написан
    Комментировать
  • Если страх, что не справишься с работой, как быть?

    @abcd0x00
    если я работаю администратором никсов где-нибудь и дадут написать программу, опять же, которая расчитывает что-то там космическое, а ты ни формул, ничего не знаешь

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

    Пример сисадмина, который думал, что он программист:
    Пацан поставил форум, развил его и тут вдруг оказалось, что там надо починить тег какой-то (типа лишняя строка пишется какая-то в теге и неправильно раскрашивается). И тут-то оказалось, что он не в состоянии это сделать, потому что поставить движок он поставил (как сисадмин), а исправить его он не может (как программист). Ладно ещё баг, новый красивый и полезный тег добавить он тоже не может, потому что для этого надо уметь разрабатывать и теорию формальных языков знать и уметь, а он и не знает, и не умеет, и вообще это не его тема - разрабатывать что-то с нуля (он даже не может время вычислить, сколько уйдёт на разработку). Так и висит этот форум годами со сломанными тегами без каких-либо новых фич.
    Ответ написан
    2 комментария
  • Как получить переменные BASH их TXT файла?

    @abcd0x00
    getlineno()
    {
        sed -n "$2{p;q}" "$1"
    }
    
    username=`getlineno datafile.txt 2`
    password=`getlineno datafile.txt 3`
    database=`getlineno datafile.txt 1`
    
    sudo mysqldump -u$username -p$password $database > $database.sql
    
    unset password username database
    Ответ написан
    Комментировать
  • Как обработать файл со ссылками с помощью bash?

    @abcd0x00
    Важно определять каталоги для сохранения разрешений видео прямо из ссылок, иначе через полгода на vk введут какое-нибудь новое разрешение и твой скрипт не заметит его.
    #!/bin/bash
    
    get_url()
    {
        echo "$1"
    }
    
    get_subdir()
    {
        echo "$1" | sed 's/.*\.\([0-9]*\)\.mp4$/\1/'
    }
    
    main()
    {
        ifname="links.txt"
        odir="videos"
        ofname="links.txt"
    
        [ ! -d "$odir" ] && mkdir "$odir"
        cat "$ifname" | while read line; do
            ourl=`get_url "$line"`
            osubdir=`get_subdir "$line"`
            [ ! -d "$odir/$osubdir" ] && mkdir "$odir/$osubdir"
            opath="$odir/$osubdir/$ofname"
            echo "$ourl" >> "$opath"
        done
    }
    
    main "$@" || exit 1
    
    exit 0
    Ответ написан
    Комментировать