Ответы пользователя по тегу Linux
  • Что происходит "под капотом", когда выполняется chmod?

    @abcd0x00
    Затрагивается ли сам файл, или может изменения вносятся куда-то (итнересно, куда), в файловую систему

    Сам файл не затрагивается. Управление файлом происходит через его inode. Inode - это такая структура в файловой системе, описывающая файл. Когда ты запускаешь ls, она не заходит в файлы, а проходит по их inode'ам, читая из них информацию. А содержимое файла записывается в inode в виде адреса первого блока. Вот по этому inode и определяется, что можно делать с содержимым файла.
    Ответ написан
    Комментировать
  • Как выполнить команду make install без ошибок при установке Apache?

    @abcd0x00
    Для установки софта из исходников обычно используют три команды:
    ./configure
    make
    sudo make install

    Но не надо ставить из исходников то, что есть в репозиториях.
    Ответ написан
    1 комментарий
  • Смена имени папки в связи со сменной имени пользователя, как сделать?

    @abcd0x00
    Чтобы переименовать домашний каталог можешь просто его переименовать, а потом владельца и группу владельцев поменять с помощью рекурсивного chown.
    chown -R новое_имя:новая_группа новый_каталог
    Ответ написан
    Комментировать
  • Как сэкономить место если в каталогах есть одинаковые файлы?

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

    @abcd0x00
    Если сейчас все так просто, то нужно разбираться в make/cmake?

    Вообще, make - это старое, проверенное средство, которое везде есть. И практика показывает, что когда у тебя есть проект, его надо не только компилировать, но и всячески обслуживать (запускать тесты, чистить ненужные файлы, устанавливать, деустанавливать). И для всего этого может быть сделан всего один Makefile, так как в нём не только сборку можно делать, но и задавать серии команд.
    Пример самодельного Makefile
    # Build section
    
    CC = gcc
    CFLAGS = -ansi -pedantic -Wall
    
    TARGET = ntow
    OBJS = main.o noun.o triple.o number.o cmdline.o errors.o input.o
    
    BASEDIR = .
    TESTDIR = $(BASEDIR)/tests
    
    # Install section
    
    prefix = /usr/local
    
    PREFIX = $(prefix)
    BINDIR = $(PREFIX)/bin
    
    # Rules
    
    all: $(TARGET)
    
    $(TARGET): $(OBJS)
    	@$(CC) $(CFLAGS) $^ -o $@ && echo "$(TARGET) has built"
    
    main.o: cmdline.h number.h input.h errors.h
    triple.o: triple.h
    number.o: number.h
    cmdline.o: cmdline.h errors.h
    
    # Commands
    
    help:
    	@echo "usage: make [ test | install | uninstall | clean | cleanall ]" 1>&2
    
    test: $(TARGET)
    	@$(MAKE) -C $(TESTDIR) run
    
    clean:
    	@rm -f $(OBJS) $(TARGET) && echo "$(TARGET) cleaned"
    
    cleanall: clean
    	@$(MAKE) -C $(TESTDIR) clean
    
    install:
    	install -d $(BINDIR)
    	install $(TARGET) $(BINDIR)/$(TARGET)
    
    uninstall:
    	rm -f $(BINDIR)/$(TARGET)
    
    .PHONY: help all test clean cleanall install uninstall

    Ответ написан
    Комментировать
  • Что означают в пути числа начинающиеся с символа решётки?

    @abcd0x00
    >>> b'\320\237\321\200\320\260\320\262\320\276\320\262\321\213\320\265'.decode('utf-8')
    'Правовые'
    >>>
    Ответ написан
    5 комментариев
  • Как подтянуть знания linux? Что оптимально?

    @abcd0x00
    Если нужны команды, пройди ABSG (на русском).
    А вообще, читай man'ы и --help'ы у программ.
    Ответ написан
    Комментировать
  • Автодополнение команды из истории в bash?

    @abcd0x00
    Открой man bash и там почитай секцию про READLINE (найдешь через /^READLINE в less).
    Там работает множество Emacs'овых сочетаний. И инкрементальный поиск по истории через Ctrl + r - одно из них.
    Там можно управлять словами (вырезать, вставлять, менять местами, прыгать по словам), управлять символами, управлять строкой, там есть даже макросы.
    Пример

    Запись макроса, который вставляет символы abc, и дальнейший вызов его пять раз:
    C-x (
    abc
    C-x )
    M-5
    C-x e

    C - Ctrl
    M - Alt

    Выведет abcabcabcabcabc.
    Ответ написан
  • Программа на С. Проблема с записью в файл многобайтного символа! компилятор GCC?

    @abcd0x00
    #include <stdio.h>
    #include <locale.h>
    #include <wchar.h>
    
    int main(void)
    {
        FILE *fp_in, *fp_out;
        wchar_t wch;
    
        setlocale(LC_ALL, "ru_RU.UTF-8");
    
        fp_in = fopen("file.txt", "r");
        wch = getwc(fp_in);
        fclose(fp_in);
    
        putwc(wch, stdout);
        wch++;
        putwc(wch, stdout);
        putwc(L'\n', stdout);
    
        fp_out = fopen("output.txt", "w");
        putwc(wch, fp_out);
        fclose(fp_out);
    
        return 0;
    }


    Вывод
    [guest@localhost wch]$ .ansi wch.c -o wch
    [guest@localhost wch]$ ./wch
    жз
    [guest@localhost wch]$ cat file.txt 
    ж[guest@localhost wch]$ cat output.txt 
    з[guest@localhost wch]$
    Ответ написан
  • Как написать монтирование диска на bash?

    @abcd0x00
    Просто всё проделываешь руками, а потом каждую команду заносишь в shell-скрипт.

    Монтировать принято в /mnt.
    Для новой точки принято создавать отдельный каталог.

    Для монтирования нужны права суперпользователя. Поэтому скрипт ты пишешь обычный, но запускаешь его потом через sudo.
    (И совсем не обязательно затрагивать /etc/fstab для этого.)
    Ответ написан
  • Как установить/запустить программу tar.gz?

    @abcd0x00
    Архив распоковался при помощи менеджера архива и усе , где так сказать местный exe ?

    Потом заходишь в папку и делаешь
    ./configure
    Он подготавливает проект для сборки в этой архитектуре.

    Потом делаешь
    make
    Он собирает проект (как раз бинарные файлы нужные).

    Потом делаешь
    sudo make install
    Он устанавливает программу туда, где она должна быть.

    А вообще, сперва нужно через репозитории запросить программу. Чаще всего она есть уже в репозиториях. Тогда она одной командой скачивается и устанавливается. Бывает, что некоторые репозитории не подключены изначально, но это ты должен был прочитать руководство для новичков, в котором обычно всё написано.
    Ответ написан
    2 комментария
  • Как сконвертировать в utf 8 большой текстовый файл?

    @abcd0x00
    Надо разделять файл обратно, определять в каждом куске кодировку, перекодировать его в общую кодировку, а потом соединять обратно перекодированное.
    Ответ написан
    Комментировать
  • Как запустить wget с данными из двух массивов?

    @abcd0x00
    makeun.sh
    #!/bin/bash
    
    read_lines_pair()
    {
        echo "$(head -$1 $2 | tail -1) $(head -$1 $3 | tail -1)"
    }
    
    convert_line()
    {
        sed 's/^/wget /; s%[^ ]*$%-O ./img/&.jpg%'
    }
    
    process()
    {
        local len=$(wc -l urls.txt | cut -d' ' -f1)
        for i in `seq 1 $len`; do
            read_lines_pair $i urls.txt names.txt | convert_line
        done
    }
    
    process


    Вывод
    [guest@localhost makeun]$ ./makeun.sh 
    wget http://url.ru/some?v=86ff8d97yguifidgijdhfkjghdflkgjdf -O ./img/1321231321321321321.jpg
    wget http://url.ru/some?v=879874g65df4g65d4gf65d4f65g4 -O ./img/4564654654564654654.jpg
    wget http://url.ru/some?v=d89f7g98df7g987fd98g7d98f7gfd -O ./img/4654654654654654564.jpg
    [guest@localhost makeun]$


    Потом просто этот вывод передаёшь на sh по каналу.
    ./makeun.sh | sh
    Ответ написан
    Комментировать
  • Скрипт бэкапа (файлы + база) для cron?

    @abcd0x00
    Его надо сначала запустить без крона (из той же директории). Если он работает без крона, а в кроне не работает, надо посмотреть лог крона.
    Ответ написан
    Комментировать
  • Почему execl выходит из процесса?

    @abcd0x00
    Просто завершается форкнутый процесс.

    Он не завершается, он заменяется на то, что в execl(), и завершается то, что запустилось там.
    Ответ написан
    Комментировать
  • Как добавить строку в файлы linux скриптом?

    @abcd0x00
    sed -i -s '$a text' *.txt

    Пример
    [guest@localhost t]$ ls
    file1.txt  file2.txt  file3.txt
    [guest@localhost t]$ 
    [guest@localhost t]$ cat file1.txt 
    a
    [guest@localhost t]$ cat file2.txt 
    b
    [guest@localhost t]$ cat file3.txt 
    c
    [guest@localhost t]$ 
    [guest@localhost t]$ sed -i -s '$a text' *.txt
    [guest@localhost t]$ 
    [guest@localhost t]$ cat file1.txt 
    a
    text
    [guest@localhost t]$ cat file2.txt 
    b
    text
    [guest@localhost t]$ cat file3.txt 
    c
    text
    [guest@localhost t]$

    Ответ написан
    1 комментарий
  • Обязательно ли знать ассемблер и архитектуру ЕВМ разработчику C++?

    @abcd0x00
    Мне понадобился Asm, когда мне надо было написать программу для игры, чтобы из линукс можно было смотреть количество игроков на сервере (игра под винду).

    История

    Сначала я анализировал сетевые пакеты (через Wireshark), чтобы понять, как виндовый клиент игры взаимодействует с сервером, когда получает от него нужную информацию. Идея была в том, чтобы написать программу, которая делает то же самое, как будто это реальный клиент игры, но это была бы моя программа, которая работает под любой системой.

    Всё было понятно, кроме одного: непонятно было, как клиент игры получает список доступных серверов. Сервер их как-то сжимал или шифровал зачем-то и передавал единственным большим ответом (больше никуда бы они не поместились кроме этого ответа). Такая мелочь всё портила, всё было понятно и до и после кроме того, как получить список серверов, чтобы дальше опрашивать их.

    Вся эта логика по расжатию или расшифровке находилась в одной из dll игры (отвечающей за сеть). То есть её надо было продизассемблировать, найти этот участок кода и понять, что там происходит. А ассемблер я тогда не знал, поэтому даже если бы я смог её продизассемблировать, я бы просто не смог понять результат.

    Вот такая маленькая хрень всё испортила. Кучу времени потратил на сетевой анализ, а запоролося на такой мелочи - не знал ассемблер.

    Так что учи ассемблер, он нужен будет тогда, когда будешь делать что-то реальное (не учебное). Не будешь знать - не будет программы.
    Ответ написан
    Комментировать
  • MySQL. Как загружать данные в Linux (Mint)?

    @abcd0x00
    Это в настройках
    [guest@localhost ~]$ cat /etc/my.cnf.d/charsets.cnf 
    
    # My config file for charset
    
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    character-set-server = utf8
    collation-server = utf8_unicode_ci
    
    [client]
    default-character-set = utf8
    [guest@localhost ~]$


    Это при создании таблицы
    CREATE TABLE tab (a INT, b VARCHAR(255))
    CHARACTER SET utf8 COLLATE utf8_unicode_ci;

    Пример
    mysql> create table tab (a int, b text) character set utf8 collate utf8_unicode_ci;
    Query OK, 0 rows affected (0.07 sec)
    
    mysql>
    mysql> insert into tab values (1, 'абвгд');
    Query OK, 1 row affected (0.02 sec)
    
    mysql> select * from tab;
    +------+------------+
    | a    | b          |
    +------+------------+
    |    1 | абвгд      |
    +------+------------+
    1 row in set (0.00 sec)
    
    mysql>

    Ответ написан
    Комментировать
  • Почему выполнение скрипта всегда идет по ветке ELSE?

    @abcd0x00
    Программы возвращают код завершения (код возврата). Если grep нашла текст, она выводит найденный текст и возвращает успешный код завершения (ноль). Если grep не нашла текст, она не выводит ничего и возвращает провальный код завершения (единицу). Вот опция -q отключает только выводимый текст, а код завершения как возвращался, так и возвращается. В shell'е конструкция $() имеет дело только с выводимым текстом и не знает про код возврата. Поэтому для неё найденный и ненайденный тексты выглядят одинаково - в виде пустоты.
    Ответ написан
    Комментировать