Задать вопрос
  • Почему не запускается linux (ubuntu)?

    Скорее всего из-за того что нету efi раздела. Первым на диске должен быть efi раздел
    Ответ написан
    7 комментариев
  • Почему на хостинге у многих есть папка public_html и почему она так называется?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Раньше, когда трава была зеленее, интернет меньше и добрее, существовало вот такое в настройках веб сервера:

    # UserDir: The name of the directory that is appended onto a user's home
    # directory if a ~user request is received.
    #
    # The path to the end user account 'public_html' directory must be
    # accessible to the webserver userid. This usually means that ~userid
    # must have permissions of 711, ~userid/public_html must have permissions
    # of 755, and documents contained therein must be world-readable.
    # Otherwise, the client will only receive a "403 Forbidden" message.
    #
    # See also: httpd.apache.org/docs/misc/FAQ.html#forbidden
    #


    Т.е. можно было просто получить логин на сервер, где был запущен веб сервер и получить домашнюю страничку вида:
    example.com/~username

    И вот с тех древних времен так и потянулось... Каталог, в котором размещаются файлы сайта - public_html....
    Ответ написан
    4 комментария
  • Как вырезать слова из вывода?

    @pfg21
    ex-турист
    если хочешь автоматизировать изучай sed awk perl и иже с ними.

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

    @0x0f80
    В Dockerfile напрямую нельзя задать ограничение на использование памяти. Dockerfile используется для создания образа, а ограничения ресурсов применяются на уровне контейнеров, когда они запускаются из образа.
    Ответ написан
    Комментировать
  • Dockerfile как задать ограничение памяти?

    В Dockerfile — никак.

    Либо в параметрах запуска контейнера Runtime options with Memory, CPUs, and GPUs

    Либо в docker-compose файле см. секцию deploy Например:
    services:
      frontend:
        image: example/webapp
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 50M
              pids: 1
            reservations:
              cpus: '0.25'
              memory: 20M
    Ответ написан
    Комментировать
  • Могут ли сетевые устройства работать параллельно?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Я правильно понимаю, что ваше приложение биндится на всех интерфейсах и в несколько потоков через них передаёт данные? Если с другой стороны такое поведение нормально обрабатывается приложением - почему бы и нет. На сетевом уровне это в любом случае будет выглядеть просто как несколько TCP-коннектов.

    Другое дело, что реализовывать это на прикладном уровне - лютый низкопроизводительный велосипед. Хотите агрегацию пропускной способности каналов - для этого уже давно придумали бондинг или mptcp.
    Ответ написан
    3 комментария
  • Могут ли сетевые устройства работать параллельно?

    @rPman
    Вы используете tcp, значит организовать можно как угодно, 'биты будут сочиться'

    Мало того, чтобы утилизировать несколько сетевых устройств, потоки создавать не обязательно, если использовать асинхронные сокеты (в linux это зовется неблокирующие, флаг socket() - SOCK_NONBLOCK), любым удобным для вас инструментом, то простая передача данных не потребует особых ресурсов и спокойно отработает на одном ядре (исключение - 10+гбитный поток, ну может речь уже должна идти о 100+гбит? это на грани возможностей железа и для него нужно использовать специализированные инструменты, предоставляемые сетевой картой, а значит про tcp придется забыть, хотя хз может там все уже удобно сделали)
    Ответ написан
    Комментировать
  • Access логи. Нужны ли на серверах с большой опсещаемостью?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Создают ли эти логи нагрузку на диск и сервер в целом?

    Создают
    нужно ли отключать access логин для nginx

    1. Для критичных путей оставь (логин, изменения данных).
    2. Для GET запросов и других не важных можешь использовать самплинг - записываешь только определенный процент логов, а не все (выборка)
    Ответ написан
    Комментировать
  • При каких обстоятельствах запущен данный процесс python-программы?

    Vindicar
    @Vindicar
    RTFM!
    Я бы попробовал использовать аудит-хук.
    Многие функции питона генерят события аудита, на которые можно подписаться.
    Есть полная таблица событий для CPython, но тебя будут интересовать события типа subprocess.Popen, os.system, os.spawn, os.startfile, os.exec, os.fork и так далее.
    Внутри хука можешь попробовать вызвать traceback.format_stack() чтобы узнать текущий стек вызовов, и записать его в какой-нибудь журнал работы.
    import sys
    import traceback
    # хук который ловит событие импорта модуля
    def hook(event, args):
        if event != 'import':
            return
        name, filename = args[0], args[1]
        callstack = traceback.extract_stack(limit=None)
        print(event, name, filename)
        for item in traceback.format_list(callstack):
            print('    ', item.strip())
    
    sys.addaudithook(hook)
    
    import json
    
    print('Done')


    Это сработает только если процессы спавнятся средствами питона, а не каким-нибудь скомпилированным расширением.

    Также можешь поискать использование модуля multiprocessing, это тоже вероятный кандидат.
    Ответ написан
    1 комментарий
  • Как разделить pipeline в зависимости от типа файла?

    emekhanikov
    @emekhanikov
    Разработчик и архитектор программного обеспечения
    Наверное проще всего положить код в разные репозитории и в каждом описать свой пайплайн
    Ответ написан
    1 комментарий
  • Программный Raid 5 + nwme cache?

    @rPman
    bcache отлично работает, как в режиме кеша только для чтения так и как дополнительный буфер для записей (writeback)
    и это лучший способ способ сожрать ресурс записи ssd диска

    у меня так на очень дешевых комплектующих работала следующая схема linux сервер, специально выделенные медленный hdd + 250гб ssd диск в качестве кеша, полученный ускоренный раздел публикуется с помощью iscsi по гигабитной сети, его монтирует windows машина и на этом диске размещены игрушки (ark будь он неладен 400гб с еженедельными обновлениями по 50-100гб), чуть больше чем за год сожрал 250тб ресурса. Итоговая скорость запуска была примерно в 3 раза быстрее чем если hdd подключить напрямую к windows машине.
    Ответ написан
    2 комментария
  • В чём разница этих команд для Docker?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    docker exec <container_id> dpkg -l
    Выполняет команду в работающем контейнере

    RUN conda list -n my_environment > packages.txt
    RUN conda list > packages2.txt

    Создает новый слой в котором эта команда выполнена

    Я в докере понимаю мало чего, но возникли вопросы.

    Так сначала документацию прочитай
    Ответ написан
    2 комментария
  • Какие библиотеки есть с progresbar?

    Isafu
    @Isafu
    В pyqt есть свой progressbar, его не достаточно?
    Ответ написан
    Комментировать
  • Как в linux запускать скрипт только после перезагрузки?

    @pfg21
    ex-турист
    создаешь сервис анонса и в нем прописываешь в параметре After сервисы, запуск которых необходимо ждать, через пробел
    After= ... that the listed unit is fully started up before the configured unit is started.

    к примеру
    After=Apache.service
    и тогда сервис анонса запустится только после запуска Apache.service

    тип прописываешь однократный запуск
    Type=oneshot
    в ExecStart прописываешь строчку исполнения для отправки анонса
    и ок
    Ответ написан
    5 комментариев
  • Почему не соеденняется по SFTP?

    @SunTechnik
    А зачем приветствие выдавать через /etc/ssh/sshrc ?
    Для этого же есть /etc/motd
    Ответ написан
    2 комментария
  • Как через Python вставить текст?

    @DenisShahbazyan
    Вот так можно вставить текст в окно блокнота.
    Используется только одна внешняя библиотека "pip install pypiwin32" - для ее установки. (После установки перезапусти IDE)

    import time
    import ctypes
    import win32con
    from ctypes import wintypes as w
    
    
    KEYEVENTF_SCANCODE = 0x8
    KEYEVENTF_UNICODE = 0x4
    KEYEVENTF_KEYUP = 0x2
    SPACE = 0x39
    INPUT_KEYBOARD = 1
    
    # not defined by wintypes
    ULONG_PTR = ctypes.c_ulong if ctypes.sizeof(
        ctypes.c_void_p) == 4 else ctypes.c_ulonglong
    
    
    class KEYBDINPUT(ctypes.Structure):
        _fields_ = [('wVk', w.WORD),
                    ('wScan', w.WORD),
                    ('dwFlags', w.DWORD),
                    ('time', w.DWORD),
                    ('dwExtraInfo', ULONG_PTR)]
    
    
    class MOUSEINPUT(ctypes.Structure):
        _fields_ = [('dx', w.LONG),
                    ('dy', w.LONG),
                    ('mouseData', w.DWORD),
                    ('dwFlags', w.DWORD),
                    ('time', w.DWORD),
                    ('dwExtraInfo', ULONG_PTR)]
    
    
    class HARDWAREINPUT(ctypes.Structure):
        _fields_ = [('uMsg', w.DWORD),
                    ('wParamL', w.WORD),
                    ('wParamH', w.WORD)]
    
    
    class DUMMYUNIONNAME(ctypes.Union):
        _fields_ = [('mi', MOUSEINPUT),
                    ('ki', KEYBDINPUT),
                    ('hi', HARDWAREINPUT)]
    
    
    class INPUT(ctypes.Structure):
        _anonymous_ = ['u']
        _fields_ = [('type', w.DWORD),
                    ('u', DUMMYUNIONNAME)]
    
    
    lib = ctypes.WinDLL('user32')
    lib.SendInput.argtypes = w.UINT, ctypes.POINTER(INPUT), ctypes.c_int
    lib.SendInput.restype = w.UINT
    
    
    def send_scancode(code):
        i = INPUT()
        i.type = INPUT_KEYBOARD
        i.ki = KEYBDINPUT(0, code, KEYEVENTF_SCANCODE, 0, 0)
        lib.SendInput(1, ctypes.byref(i), ctypes.sizeof(INPUT))
        i.ki.dwFlags |= KEYEVENTF_KEYUP
        lib.SendInput(1, ctypes.byref(i), ctypes.sizeof(INPUT))
    
    
    def send_unicode(s):
        i = INPUT()
        i.type = INPUT_KEYBOARD
        for c in s:
            i.ki = KEYBDINPUT(0, ord(c), KEYEVENTF_UNICODE, 0, 0)
            lib.SendInput(1, ctypes.byref(i), ctypes.sizeof(INPUT))
            i.ki.dwFlags |= KEYEVENTF_KEYUP
            lib.SendInput(1, ctypes.byref(i), ctypes.sizeof(INPUT))
    
    
    def find_notepad_window(notepad_title):
        while True:
            notepad_handle = ctypes.windll.user32.FindWindowW(None, notepad_title)
            if notepad_handle != 0:
                return notepad_handle
            time.sleep(1)
    
    
    def insert_text_into_notepad(notepad_handle, text):
        # Развернуть окно, если оно свернуто
        ctypes.windll.user32.ShowWindow(notepad_handle, win32con.SW_RESTORE)
        # Сделать окно активным
        ctypes.windll.user32.SetForegroundWindow(notepad_handle)
        # Изменить заголовок окна
        # ctypes.windll.user32.SendMessageW(notepad_handle, win32con.WM_SETTEXT, 0, text)
    
        # send_scancode(SPACE)
        # Текст в блокнот
        send_unicode(text)
    
    
    if __name__ == "__main__":
        notepad_title = "Безымянный – Блокнот"
        text_to_insert = "Привет, мир!"
    
        notepad_handle = find_notepad_window(notepad_title)
        insert_text_into_notepad(notepad_handle, text_to_insert)


    Чтобы найти все окна в системе (все имена окон) запусти это
    import ctypes
    
    
    def enum_windows_callback(hwnd, lParam):
        window_title = ctypes.create_unicode_buffer(1024)
        ctypes.windll.user32.GetWindowTextW(hwnd, window_title, 1024)
        print(f"Window Handle: {hwnd}, Window Title: {window_title.value}")
        return True
    
    
    ctypes.windll.user32.EnumWindows(ctypes.WINFUNCTYPE(
        ctypes.c_bool, ctypes.c_ulong, ctypes.c_ulong)(enum_windows_callback), 0)
    Ответ написан
    Комментировать
  • Почему не работает код?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну разбей свою задачу на две части
    1. Парсинг ввода пользователя и запись в подходящую структуру данных (словари)
    2. Расчеты

    Потом все будет просто, например.
    words = {
        'm': 2,
        'a': 3,
        'l': 1,
        'i': 1,
        'n': 2,
        's': 1,
        'o': 5,
        'r': 1,
        'd': 1
    }
    
    jams = {
        'smorodina': 1,
        'malina': 2
    }
    
    total = 0
    
    for jam, amount in jams.items():
        jam_time = 0
        for letter in jam:
            jam_time += words[letter]
        total += jam_time * amount
    
    print(total)

    Получи, вот такие словари. И потом просто обойди это дело циклами. Возможно, можно это как то оптимизировать. Надо дальше думать.
    Ответ написан
    2 комментария
  • Как проще всего добавить локальный репозиторий в контейнер докера?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Я вместо выкачивания репозитория закэшировал бы каталог, в который кладутся зависимости. Тогда не придётся хранить неиспользуемое.
    Ответ написан
    6 комментариев
  • Отсутствуют /dev/video* и /dev/audio*. Как и чем их заменить?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    /dev/video* - устройства захвата видео подсистемы video4linux (v4l), обычно появляются в системе, если есть карточки или устройства видеозахвата, такие, как usb-камеры например.
    /dev/audio* - устаревшие устройсва подсистемы OSS (Open Sound System), отстутствуют в современных системах примерно так лет 10 минимум. Альтернатива /dev/snd/* устройств ALSA, например...
    Ответ написан
    Комментировать