Ответы пользователя по тегу *nix-подобные системы
  • Какой есть универсальный и надежный способ замены байт в файле?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    xxd (hexdump) обычно везде есть

    Переводим bin в ascII дамп, с опцией -p будет сплошной поток. Затем тем же седом меняем, и конвертим ascII дамп назад в бинарник.
    Плюс можно смело менять размер файла.

    xxd -p file.original | sed 's/\x01\x02\x03/\x04\x05\x06/g' | xxd -p -r > file.updated
    Ответ написан
    Комментировать
  • При попытке чтения каталога ls /root процесс зависает, как починить?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Я подозреваю, что структура файловой системы расширяет размер каталога, чтобы в него поместился список из 15 млн файлов, а вот уменьшать размер каталога уже не умеет.
    То есть когда файлы были созданы, блоки были аллоцированы под "/root" и все, теперь ls будет вычитывать весь объем, несмотря на то, что в нем используется только несколько записей.

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

    но похоже это уже сделали.
    Ответ написан
    Комментировать
  • Как в bash скрипте определить является ли файл видео и получить его разрешение?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    как часть ffmpeg проекта, есть ffprobe, им и пользуйтесь.

    ffmpeg.org/ffprobe.html

    Получить можно в разном формате. И обычный текст(ini) или csv,xml,json

    Примеры:
    $ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of default=nw=1 "My video file.mpg" 
    width=704
    height=576


    $ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 "another vide file.mkv"
    1280,720


    $ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of json "one_more video.mkv"
    {
        "programs": [
    
        ],
        "streams": [
            {
                "width": 1152,
                "height": 480
            }
        ]
    }
    Ответ написан
    Комментировать
  • Linux: как выполнить копирование части логов из файла в новый файл по нескольким фильтрам?

    saboteur_kiev
    @saboteur_kiev Куратор тега Ubuntu
    software engineer
    почитайте про sed, как раз под вашу ситуацию

    sed -n '/19:00,/21:00/{/11.11.11.11\/111/p}' file.log > newfile.log
    Ответ написан
    Комментировать
  • Как посчитать число строк в файле по условию?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Получаем примерную дату за последние сутки с нужной точностью
    olddate=$(date -d "-24 hours" "+%d/%b/%Y:%H:%M:%S")
    Но тут есть проблема. Если в данную секунду в прошлом не было ни одной записи, мы пролетим мимо. Поэтому округлим хотя бы до часа, но все равно остается риск, если приложение было выключено целый час, то мы не найдем начальную позицию вообще. Как эту проблему решать я не знаю, зависит от того что у вас в файле всегда будет что-то или не всегда и если не всегда, тогда все усложняется. Но давайте пойдем от простого, просто округлить хотя бы до часа:
    olddate=$(date -d "-24 hours" "+%d/%b/%Y:%H")

    Потом через sed можно найти текст от указанной даты и до конца файла, и тут же фильтруем router:
    sed -nE "/$olddate/,\${/router/p}" file.log|wc -l

    Ну или однострочник
    sed -nE "/$(date -d "-24 hours" "+%d/%b/%Y:%H")/,\${/router/p}" file.log|wc -l
    Ответ написан
    Комментировать
  • Где изучить unix и reverse?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Есть подозрение, что ты изучил только основы основ С++, иначе не было бы подобного вопроса.
    Ты уже написал свою первую простенькую игру на С++?
    Ты уже попробовал ее взломать через отладчик?
    А ведь это и есть основа reverse engineering?
    Ответ написан
    4 комментария
  • Как получить уникальный идентификатор unix машины?

    saboteur_kiev
    @saboteur_kiev Куратор тега Ubuntu
    software engineer
    попробуй
    1. hostid
    2. cat /etc/machine-id
    3. md5sum /proc/cpuinfo
    4. blkid|grep UUID|md5sum
    5. dmidecode |grep -i uuid

    Не совсем понятно зачем привязываться именно к серийнику CPU, я не совсем уверен что линукс может его получить. А привязаться к списку процессоров + накопителей и других штук, которые при ребуте не меняются - можно просто сгенерировать текстовый отчет и прогнать через md5
    Ответ написан
    3 комментария
  • Усиленно удалить файл в windows, возможно ли с помощью пары функций?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Вы не так понимаете, как это работает.
    В линукс файловая система использует структуру iNode в качестве хранения метаинформации о файлах. И когда вы открываете файл, по имени файла ищется iNode файловый дескриптор привязывается и лочит уже iNode. При этом имя файла на диске можно свободно удалять (а сами данные файла при этом удалятся позже, когда процесс который открыл файловый дескриптор его освободит).

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

    Никакая недокументируемая функция это поведение не изменит. Пока процесс, который залочил файл в винде его не разлочит - ничего не получится.
    Ответ написан
    Комментировать
  • Какие существуют онлайн-IDE для разработки на PHP, устанавливаемые на unix-сервер?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Я одно время пробовал синхроинизроваться через git при смене машины (reset --hard при каждом пересаживании)


    Честно говоря, IMHO вам следует научиться работать с git, потому что reset --hard при каждом пересаживании - это вы прямо вообще неправильно пользуетесь инструментом.
    А так git это именно то, что надо для синхронизации.
    Ответ написан
    5 комментариев
  • Как переименовать и почистить имена файлов с помощью regex на linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Берешь и чистишь.
    Без конкретных примеров неизвестно что сказать.
    Ну и утилита rename умеет в регэксп
    Ответ написан
    2 комментария
  • Почему в большинстве примеров скриптов для bash, начинаются со знака $?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Когда работаешь в командной строке, у тебя есть Command prompt - строка приглашения, которая выглядит как
    user@server:directory $

    после чего ты пишешь команду.
    Можно строку приглашения сократить до $ (или # если это суперпользователь)
    В примерах таким образом видно, где команда, которую надо вводить, а где то что команда выводит на экран.
    Удобно.
    Ответ написан
    Комментировать
  • Сложить вывод двух файлов?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Зависит от точного задания.
    если у вас a и b это маркеры линий, то в цикле считываешь строки первого файла, находишь букву, по ней делаешь grep второго файла, получаешь две нужные строки. Складываешь и пишешь в третий.

    Если просто строки по порядку - и они всегда совпадают по количеству, то можно в цикле просто считать два файла в отдельные массивы и потом еще раз пройтись циклом.

    Если в каждой строке всегда три цифры, можно резать через ${variable:0:3}, если разное - можно через регулярку.

    Ты бы показал как ты пытался делать и что конкретно у тебя не выходит. А то выглядит словно ты хочешь чтобы кто-то за тебя домашку сделал. А с этим - на фриланс.
    Ответ написан
  • Если выучить чисто Unix, то насколько потом легко перейти на Linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    В общем случае, Unix и Linux очень похожи.

    Обе POSIX. Идеология у них одинаковая, множество команд - тот же набор GNU.
    Ядро конечно разное, какие-то отдельные вещи различаются.

    Но на том моменте, когда человек уже сходу может назвать хотя бы 10-20 признаков чем юникс отличается от Линукса, он не будет задавать вопросы подобно вашему.
    Ответ написан
    Комментировать
  • Где найти файл со всеми ВРЕМЕННЫМИ альясами в linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    "временные" алиасы не хранятся в файле, они хранятся в памяти вашей сессии.

    Собственно в .bashrc алиасы тоже не "хранятся" непосредственно для использования, эти файлы просто выполняются при запуске сессии и "хранятся" в памяти.
    Ответ написан
    Комментировать
  • Почему именно "root"?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Варианта два.
    1) Файловая система - древовидная, начинается с корня, и права на все есть только у суперпользователя. Вроде как у совсем старых юниксов, для суперпользователя даже не было отдельной домашней папки - использовался корень.

    2) Дерево процессов начинается с ядра системы (процесс init), который запущен от суперпользователя (root), который имеет доступ ко всем процессам.
    Ответ написан
    Комментировать
  • Как низкоуровневый код использующий стек узнает откуда он начинается?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Обычно для работы со стеком процессор использует регистр стека (Stack Pointer register).

    Следовательно операционная система устанавливает этот регистр для процесса при его запуске и инициализации.
    В современных процессорах регистров стека может быть несколько (я могу ошибаться, но возможно даже несколько на каждое ядро).
    Ответ написан
    Комментировать
  • Как реализовать процессы, зависящие друг от друга?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    По логике как раз и не должны фоновые процессы падать, если убит баш.
    Об этом и говроит ваш & в конце строки: bash -c #CMD#&

    Процессы могут завершаться, если им посылается конкретный сигнал. В группе процессов, сигнал посланный главному процессу также отправляется всем дочерним.
    Но в вашем случае в связке: MAIN -> BASH -> CMD вы сами отвязываете дочерний процесс CMD от процесса BASH командой &
    При этом MAIN все еще является лидером всей группы процессов, поэтому завершение MAIN влияет на все дочерние.
    Ответ написан
  • Как правильно создать FTP пользователя для файлов сайта?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В vsftpd вы просто указываете, чтобы юзер был залочен в его домашней директории
    chroot_local_user=YES

    И создаете пользователя, у которого домашняя директория - нужная папка.

    Тоже самое можно сделать через sshd для sftp:
    https://passingcuriosity.com/2014/openssh-restrict...
    Ответ написан
    Комментировать
  • Как задать переменную bash?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Если вам нужно проверить переменную MYVAR, и если она пустая. то задать ей значение по умолчанию, можете просто проверить это например этими способами:

    1.
    if [[ -z MYVAR ]]; then
      MYVAR="default value"
    fi


    2.
    echo "MYVAR is: ${MYVAR:="default value}"
    Ответ написан
  • C помощью каких функций можно узнать информацию о системе?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Для Linux можно просто прочитать содержимое файлов /proc/cpuinfo и /proc/meminfo
    Ответ написан
    Комментировать