Ответы пользователя по тегу Linux
  • Как в Ubuntu изменить имя файла на транслит и перед каждым изменённым символом поставить флаг?

    @abcd0x00
    [guest@localhost ~]$ \
    > func ()
    > {
    >     read s
    >     for ((i = 0; i < ${#s}; i++)); do
    >         c=${s:$i:1}
    >         case $c in
    >             "а") oc="a";;
    >             "б") oc="b";;
    >             "в") oc="v";;
    >             "г") oc="g";;
    >             "и") oc="i";;
    >             "й") oc="j";;
    >             "к") oc="k";;
    >             "л") oc="l";;
    >             "н") oc="n";;
    >             "о") oc="o";;
    >             "с") oc="s";;
    >             "я") oc="ya";;
    >               *) oc="$c";;
    >         esac    
    >         echo -n "$oc"
    >     done
    >     echo
    > }
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "яблонский головоног" | func
    yablonskij golovonog
    [guest@localhost ~]$
    Ответ написан
    3 комментария
  • Как в Ubuntu массово удалить спецсимволы из имён файлов в папке?

    @abcd0x00
    Общий способ через sed
    [guest@localhost tmp]$ touch file{1,2,3}.txt
    [guest@localhost tmp]$ 
    [guest@localhost tmp]$ ls file*.txt
    file1.txt  file2.txt  file3.txt
    [guest@localhost tmp]$ ls file*.txt | sed 's%\([^.]*\)\(\.txt\)%mv & \1_save\2%' 
    mv file1.txt file1_save.txt
    mv file2.txt file2_save.txt
    mv file3.txt file3_save.txt
    [guest@localhost tmp]$ ls file*.txt | sed 's%\([^.]*\)\(\.txt\)%mv & \1_save\2%' | sh
    [guest@localhost tmp]$ ls file*.txt
    file1_save.txt  file2_save.txt  file3_save.txt
    [guest@localhost tmp]$
    Ответ написан
    Комментировать
  • Как правильно следить за последовательным ходом выполнения работ консольных утилит?

    @abcd0x00

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

    У тебя прямо в скриптах должно быть завершение с кодом. Если ошибок не было, нужно завершать скрипт через exit 0. Если произошла ошибка, нужно завершать скрипт через exit 1.
    Когда у тебя скрипты так сделаны, ты можешь проверять их код завершения.

    А потом ты можешь написать скрипт со строками
    { script1.sh && echo "script1 - ok"; } || echo "script1 - fail"
    { script2.sh && echo "script2 - ok"; } || echo "script2 - fail"
    { script3.sh && echo "script3 - ok"; } || echo "script3 - fail"


    Пример
    { echo x1 && echo "script1 - ok"; } || echo "script1 - fail"
    { cat x && echo "script2 - ok"; } || echo "script2 - fail"
    { echo x2 && echo "script3 - ok"; } || echo "script3 - fail"
    { touch /x && echo "script4 - ok"; } || echo "script4 - fail"


    [guest@localhost ~]$ { echo x1 && echo "script1 - ok"; } || echo "script1 - fail"
    x1
    script1 - ok
    [guest@localhost ~]$ { cat x && echo "script2 - ok"; } || echo "script2 - fail"
    cat: x: Нет такого файла или каталога
    script2 - fail
    [guest@localhost ~]$ { echo x2 && echo "script3 - ok"; } || echo "script3 - fail"
    x2
    script3 - ok
    [guest@localhost ~]$ { touch /x && echo "script4 - ok"; } || echo "script4 - fail"
    touch: невозможно выполнить touch для «/x»: Отказано в доступе
    script4 - fail
    [guest@localhost ~]$



    Можно сделать и так
    { script1.sh && echo "script1 - ok"; } || { echo "script1 - fail"; exit 1; }
    { script2.sh && echo "script2 - ok"; } || { echo "script2 - fail"; exit 1; }

    Тогда он в случае успеха будет выводить успешную фразу и продолжать, а в случае ошибки он будет выводить сбойную фразу и сразу выходить (с кодом ошибки).
    Ответ написан
    Комментировать
  • Как вывести отдельные строки в консоль с файла?

    @abcd0x00
    [guest@localhost ~]$ echo -e "Петя\nПетренко"
    Петя
    Петренко
    [guest@localhost ~]$ echo -e "Петя\nПетренко" | sed '1s/^/Имя: /; 2s/^/Фамилия: /'
    Имя: Петя
    Фамилия: Петренко
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как правильно инициализировать массив в shell скрипте?

    @abcd0x00
    Можешь попробовать код
    [guest@localhost ~]$ arr=($(echo -e "a a\nb b\nc c"))
    [guest@localhost ~]$ echo ${#arr[@]} ${arr[@]} . ${arr[0]}
    6 a a b b c c . a
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как хранить результат вызова системной команды?

    @abcd0x00
    Самое оптимальное будет - добавить в команду, передаваемую в system(), перенаправление вывода в файл, а потом этот файл прочитать через fopen(). После всего удалить файл через remove().
    Ответ написан
    Комментировать
  • Как сделать массовую замену куска текста из нескольких строк в множестве файлов?

    @abcd0x00
    Проблема в том, что нужно отредактировать блоки с текстом в несколько строк.

    Для sed'а это не проблема, просто его надо знать чуть дальше, чем s///.
    Ответ написан
    Комментировать
  • Как при помощи bash создать и трансформировать дерево директорий в .json?

    @abcd0x00
    Нужно написать пару функций, одна из который рекурсивная. Одна функция отвечает за вывод директории, а другая - за вывод файла. Директорная функция вызывает саму себя для директорий и файловую функцию - для файлов. А файловая функция возвращает путь к файлу.

    Ты просто выведи дерево файлов на экран без всякого json'а с помощью этих функций. Когда будет готово, увидишь, куда нужно вставить скобки, запятые и кавычки, чтобы из этого json получился.
    Ответ написан
    Комментировать
  • Как понять файловые системы Linux?

    @abcd0x00
    Есть книжка по архитектуре UNIX, вот в ней можешь найти все принципы устройства.
    "Архитектура операционной системы UNIX." Бах Морис

    Можешь и какие-нибудь упрощённые книжки поискать для поверхностного изучения.


    1. Если директива и файл это просто inode с разным флагом внутри него, тогда откуда VFS или ядро знает что условно в папке /etc/ лежат всякие файлы(другие inodes) - это я пока не понял, не могу найти ни каких внутренних ссылок между собой файлов и директорий ?!

    Есть начальный inode, который указывает на список дальнейших inode, которые указывают на списки дальнейших inode.
    Директория является как бы файлом, в котором записаны пары (имя, inode) других директорий и файлов.

    Где вообще этот жуткий "/" хранится?

    В файловой системе (в заголовке) записан адрес на диске, где начинается самый первый inode. Потом он читается и из него получаются адреса последующих inode.
    А сам inode представляет из себя метаданные (данные о данных), где указаны всякие флажки и адрес на диске, где хранится уже содержимое файла.
    Ответ написан
    Комментировать
  • Массовое редактирование симлинков в Debian - КАК?

    @abcd0x00
    Сделай скрипт, который переделывает одну ссылку. Просто ты ему подаёшь адрес ссылки, а он её превращает в правильную ссылку. Как сделаешь, выполни команду поиска ссылок, где для каждой найденной ссылки вызывается этот скрипт.
    Ответ написан
    Комментировать
  • На чем пишутся консольные утилиты под linux?

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

    Её нужно установить. А чтобы установить, должен быть установщик. Можешь использовать make для этого - это классический вариант.
    make
    sudo make install
    Ответ написан
    Комментировать
  • Как найти отличия в двух файлах XML?

    @abcd0x00
    Лучше загрузить xml в дерево и сравнить эти деревья с выводом различий. По идее, тебе нужен хороший скрипт на питоне. Без знаний сложновато будет написать.
    Ответ написан
    Комментировать
  • Как в g++ переименовать каталог и создать новый?

    @abcd0x00
    Это просто переименовать
    #include <cstdio>
    
    int main()
    {
        rename("t1", "t2");
        return 0;
    }


    Это создать новый
    #include <sys/stat.h>
    
    int main()
    {
        mkdir("t1", 0644);
        return 0;
    }
    Ответ написан
    Комментировать
  • Массовое уменьшение и обрезка картинок. Как?

    @abcd0x00
    Как правильно написать команду тут?

    Надо написать в виде функций: первая функция преобразует один файл, как надо; вторая функция подаёт файл в первую функцию и сохраняет результат, как надо.
    Ответ написан
    Комментировать
  • Администрирование Linux - актуально ли?

    @abcd0x00
    Ты раздели работу и знания. У нас в стране учёные не зарабатывают ничего, хотя знают дофига. Если ты думаешь "вот я научусь и стану зарабатывать", ты глубоко ошибаешься. Зарабатывать будут всё те же, кто и зарабатывал.
    Если свои знания, которые у тебя есть, продать не можешь, то и новые точно так же не продашь.
    На ПФРы, налоговые, суды, вузы и больницы даже не вздумай равняться. Это бюджетные организации, где абсолютно законно на всех экономят, как только могут.
    Почему сайт госуслуг такой беспонтовый и нерабочий?
    Потому что он стоит три копейки, а куплен у того мальчика сынка чьего-нибудь. А разница, выделенная из бюджета на всё это, пошла куда надо (отделочные работы помещений, которые делают свои отделочные фирмы, которые и не отделочные вообще, и вообще не фирмы).
    Вспомни космодром Восточный, куда вбухали такие бабки, а потом оказалось, что рабочим не выплачивали зарплату полгода.

    В общем, остаётся тебе только одно - повышать квалификацию в той области, которую ты уже знаешь. Ты занимался сисадминством, вот и продолжай расти в этом направлении. В удалённом администрировании есть потребность у людей. А если найдёшь своего заказчика, то он станет твоим постоянным заказчиком. Главное, чтобы ты мог сделать всё, мог решить проблему, мог решить задачу, был надёжен и предсказуем.
    Ответ написан
    9 комментариев
  • Что за место в терминале?

    @abcd0x00
    Владимир Жданов:
    Что за команда "`"(гравис) в командной оболочке bash?

    man bash

    Command Substitution
           Command substitution allows the output of a command to replace the com‐
           mand name.  There are two forms:
    
                  $(command)
           or
                  `command`
    
           Bash performs the expansion by executing command and replacing the com‐
           mand substitution with the standard output of  the  command,  with  any
           trailing newlines deleted.
    Ответ написан
    Комментировать
  • Как запретить доступ к Apache из интернет?

    @abcd0x00
    blockport_except_localhost()
    {
        iptables -A INPUT ! -s localhost -p tcp --dport "$1" -j DROP
        iptables -A INPUT ! -s localhost -p udp --dport "$1" -j DROP
        iptables -A OUTPUT ! -d localhost -p tcp --sport "$1" -j DROP
        iptables -A OUTPUT ! -d localhost -p udp --sport "$1" -j DROP
    }
    
    blockport_except_localhost 80
    Ответ написан
    Комментировать
  • Как массово удалить файлы по имени?

    @abcd0x00
    Если пробелов в путях нет, то
    rm -f `cat list.txt`
    Если есть пробелы, то
    cat file.txt | while read f; do rm -f "$f"; done
    Ответ написан
    Комментировать
  • Как получить доступ к файлу в закрытой папке?

    @abcd0x00
    Можешь сделать группу для чтения этого файла.
    Директории установить эту группу и дать ей право на прохождение x.
    Затем добавить пользователя, которым собираешься читать файл, в эту группу.
    (Есть там ещё такое средство, как ACL, но для начала должно хватить.)
    Ответ написан
    Комментировать
  • Существует ли менеджер SSH сессий для KDE?

    @abcd0x00
    Попробуй
    kdialog --menu Hello 1 abc 2 def
    Ответ написан
    Комментировать