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

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    sudo timedatectl set-time "2020-05-01 10:55:36"
    Ответ написан
  • Как обозначается "текущая директория" в линукс в терминале?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Мне нужно с текущего каталога ( где я сейчас нахожусь) скопировать все содержимое в другой каталог.
    Делаю эту команду cp -r /. build/, но ничего не копируется.

    cp -r /. здесь вы пытаетесь скопировать весь корень(/) в папку build
    возможно вы имели в виду:
    cp -r . build/
    здесь попытка скопировать все файлы/папки текущей директории в папку build находящуюся там же, то есть возникает рекурсия копирования самого в себя, про что команда cp и выдаст предупреждение но всё же скопирует не допустив для данной папки рекурсии.
    и да, папка build должна уже существовать.

    полигон
    $ mkdir -p test/{1,2,build} && touch test/{1,2}/a.txt && touch test/.b.txt && cd test && tree -a
    .
    ├── 1
    │   └── a.txt
    ├── 2
    │   └── a.txt
    ├── .b.txt
    └── build


    поведение (для bash):
    $ cp -r . build/
    cp: невозможно скопировать каталог '.' в самого себя, 'build/.'
    $ tree -a
    .
    ├── 1
    │   └── a.txt
    ├── 2
    │   └── a.txt
    ├── .b.txt
    └── build
        ├── 1
        │   └── a.txt
        ├── 2
        │   └── a.txt
        └── build

    и заметите что здесь не скопировался скрытый файл .b.txt (те что начинаются с точки)

    чтобы избежать предупреждений можно "вырезать" папку в которую копируем из списка файлов/папок передаваемых для cp при копировании:
    $ cp -r `ls -A | grep -v build | xargs` build/
    $ tree -a
    .
    ├── 1
    │   └── a.txt
    ├── 2
    │   └── a.txt
    ├── .b.txt
    └── build
        ├── 1
        │   └── a.txt
        ├── 2
        │   └── a.txt
        └── .b.txt
    Ответ написан
    Комментировать
  • Как заGREPовать сразу несколько параметров?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Как сделать, что бы вывод был именно по 3м нужным параметрам?

    dmidecode -t memory | grep -P "Speed|Factor|Size"

    Как это можно форматнуть, что бы вывод был по каждой планке отдельно???

    dmidecode -t memory | awk '/\tSize/{print ""}/Speed|Factor|Size/'


    В идеале хотелось бы получить ... memory 1 ...

    dmidecode -t memory | awk '/\tSize/{i++;print "memory "i}/\tSpeed|Factor|\tSize/'


    Как структурировать вывод :
    A=`cat /proc/cpuinfo | grep "cpu MHz"`
    echo $A

    просто добавь воды, то есть кавычек при выводе:
    echo "$A"

    И как это сделать в несколько столбиков, потому что 104 строки не умещаются в терминал tmux????

    это уже третий вопрос, не нужно здесь устраивать марафон всевозможных вопросов, задавайте каждый вопрос отдельно
    Ответ написан
    1 комментарий
  • Как к выводу из curl и awk добавить выполнение скрипта python?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    curl http://sitename | awk '{print $2}' | awk -F= '{system("script.py "$2)}'
    Ответ написан
    Комментировать
  • Как грамотно создать Linux дистрибутив?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Комментировать
  • Как вывести список пользователей с порядковым номером c сохранением сортировки по алфавиту?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk -F: '{print "- "$1}' /etc/passwd |sort |nl
    Ответ написан
    Комментировать
  • Почему systemd-journald ест много оперативки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    возможно она у вас там мешки ворочает
    картинка
    62962cc3963ff385227468.png

    если журнал за предыдущие рабочии сессии для вас не критичен то:
    /etc/systemd/journald.conf
    Storage=volatile
    RuntimeMaxUse=20M
    Ответ написан
    Комментировать
  • Как удалить лишние файлы в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    создадим тестовую площадку:
    mkdir -p /tmp/TEST && touch "/tmp/TEST/backup-name-back-"{01..05}"-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-"{10..13}-{100..104}".bak" && tree /tmp/TEST

    вывод tree
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ...
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 100 files

    получим 100 файлов бэкапа

    теперь несколько однострочников
    прописываем полный путь к папке где хранятся бэкапы и заодно закинем список для сравнения в переменную Т
    DIR="/tmp/TEST"; T=$(ls $DIR/* |awk -F'[-.]' '{print $4" "$(NF-2)$(NF-1)";"$0}')

    показать что останется после удаления
    echo "$T" |sort -nr |sort -un |awk -F';' '{print $2}'

    показать что удалиться
    comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}'

    !!! удаляем !!!
    rm $(comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}')

    по итогу получим:
    $ tree /tmp/TEST
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-03-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-04-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 5 files
    Ответ написан
    1 комментарий
  • Почему не берутся пробелы в bash переменной?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    решение через IFS:
    x="$IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
    do
    IFS="$x"

    п.с.
    первоначальный(неверный) вариант
    кавычки, в одном месте поменяй на одинарные а в другом добавь двойные
    for WhatFile in "$(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r )";
    Ответ написан
    23 комментария
  • Существует ли, утилита для Linux с выводом программ для их запуска?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    смотри rofi и подобные
    Ответ написан
    Комментировать
  • Как получить путь до рабочего стола пользователя Ubuntu?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    for user in /home/* #поиск домашнего каталога

    а с чего вы взяли что домашний каталог пользователя обязательно должен находится в /home ?
    $ man useradd
    ...
    -b, --base-dir BASE_DIR
    The default base directory for the system if -d HOME_DIR is not specified. BASE_DIR is concatenated with the account name to define the home directory. If the -m option is not used, BASE_DIR must exist.
    
    If this option is not specified, useradd will use the base directory specified by the HOME variable in /etc/default/useradd, or /home by default.


    то есть, при сотворении пользователя его домашний каталог находится в домашнем БАЗОВОМ каталоге для пользователей который указывается либо через переменную --base-dir либо берётся из /etc/default/useradd (где он по умолчанию /home)

    Как получить путь до рабочего стола пользователя Ubuntu?

    если нужен путь до рабочего стола текущего пользователя то проще некуда:
    systemd-path user-desktop
    если для другого(не тока текущего) пользователя то можно так:
    su - YOUR_USER -c "systemd-path user-desktop"
    или лучше так:
    runuser -l YOUR_USER -c "systemd-path user-desktop"


    если нужно узнать имена всех несистемных пользователей, то
    $ man useradd
    ...
    UID_MAX (number), UID_MIN (number)
    Range of user IDs used for the creation of regular users by useradd or newusers.
    
    The default value for UID_MIN (resp. UID_MAX) is 1000 (resp. 60000).

    но для верности можно глянуть в /etc/login.defs и оттуда узнать UID_MIN и UID_MAX
    eval $(awk '/^UID_/{print $1"="$2}' /etc/login.defs)

    ну а затем отфильтровать файл /etc/passwd по этим параметрам
    awk -v MIN=$UID_MIN -v MAX=$UID_MAX -F: '$3>MIN && $3<MAX {print $1}' /etc/passwd

    в итоге получим список несистемных пользователей на данной системе

    Есть sh скрипт который должен создать 2 desktop файла на рабочем столе и разрешить их выполнение, попробовал этот код:

    если нужно для текущего пользователя то проще простого:
    DESKTOP=$(systemd-path user-desktop)
    cp sources/update.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/update.desktop
    cp sources/shutdown.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/shutdown.desktop

    если для всех пользователей то просто закинуть нужные действия в функцию и запускать её от указанных пользователей в цикле
    Ответ написан
    Комментировать
  • Как объединить строки в bash скрипте?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk '{printf $0}' data.txt
    Ответ написан
  • Что делать, если бесконечно работает команда sort -u в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ sort --help
    Использование: sort [ПАРАМЕТР]… [ФАЙЛ]…
    или: sort [ПАРАМЕТР]… --files0-from=Ф
    Печатает сортированное слияние всех ФАЙЛ(ов) на стандартный вывод.

    Если ФАЙЛ не задан или задан как -, читает стандартный ввод.
    ...

    если вы про консоль, то
    $ sort -u
    d
    a
    g
    t
    aa
      нажать <Ctrl+D> для сортировки
    a
    aa
    d
    g
    t


    если вам нужно просто прекратить работу данной команды то используйте стандартное сочетание Ctrl+C

    п.с.
    ни в коем случае не запускайте vi ))
    Ответ написан
    2 комментария
  • Как оптимизировать параметры монтирования?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    раньше много чего перепробовал но в итоге для домашнего использования остановился на этих трёх простых опциях:
    $ findmnt /
    TARGET SOURCE         FSTYPE OPTIONS
    /      /dev/nvme0n1p2 ext4   rw,noatime,commit=120

    noatime и commit довольно эффективны как для ssd так и для hdd
    если с noatime боле менее понятно, то вот commit
    из man
    commit=nrsec
        Start a journal commit every nrsec seconds. The default value is 5 seconds. Zero means default.

    единственный минус больших значений commit в том что при неправильном выключении компьютера потеряется не до 5-и секунд, что идут по умолчанию, а значительно больше. То есть, при commit=120, мы можем потерять данные что не успели записаться на диск за эти последнии две(или меньше) минуты до выключения компа, но зато без всяких каш после использования того же nobarrier.
    Ответ написан
    Комментировать
  • Как убрать перенос строки при копировании в буфер обмена (echo, cut, xclip)?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    как вариант, попробуйте
    cut -c1-64
    заменить на
    awk '{printf $1}'

    п.с
    хотя можно просто добавить для cut ключ -z чтобы он после обработки данных не переводил строку
    cut -c1-64 -z

    -z, --zero-terminated
    line delimiter is NUL, not newline
    Ответ написан
    1 комментарий
  • Pacman выдает ошибку "error: failed rerrieving file "code.db" from mirror.osbeck.com", что делать?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    error: failed rerrieving file «code.db» from mirror.osbeck.com


    вы бы проверяли на ошибки, там походу должно звучать примерно так
    error: failed retrieving file core.db from mirror.osbeck.com

    невозможно скачать файл базы дынных core.db (репа core) c сервера mirror.osbeck.com
    то есть, на момент обновления репозиториев с сервера у вас небыло связи с указанным сервером, а это либо проблемы с интернетом либо проблема в доступе к конкретно этому серверу

    сам сервер mirror.osbeck.com расположен в Швеции, список доступных серверов можете глянуть на оф сайте https://archlinux.org/mirrors/status/#successful
    а при желании даже сгенерировать https://archlinux.org/mirrorlist/
    подберите тот к которому есть беспроблемный доступ и внесите его в файл /etc/pacman.d/mirrorlist
    (не забудте раскомментировать нужный если генерировали через сайт)
    после чего обновите базу
    sudo pacman -Syy
    ну или сразу с обновлением базы обновить и сами установленные пакеты в системе:
    sudo pacman -Syyu
    Ответ написан
  • Как с помощью sed перенести ip и подставить перед запятой?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ awk '!/,$/{x=x$0}x!=""{print x;x=""}/,$/{x=$0}' 1.txt
    mail.yandex.net,
    mail.mail.ru,88.88.88.88
    mail.mail1.ru,
    mail.asdl2.ru,
    mail.asd.ru,77.77.88.88
    Ответ написан
    Комментировать
  • Как сделать, чтобы скрипт прекращался при сочетании клавиш, в GNU/Linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    можно сделать так:
    в самом скрипте в начале добавьте строку:
    echo $$ > /tmp/myscript.pid

    теперь зная PID процесса запущенного скрипта можно легко его прибить командой:
    kill -9 $(cat /tmp/myscript.pid)
    данную команду легко повесить на сочетании клавиш воспользовавшись инструментами графической оболочки которую используете.
    Ответ написан
    Комментировать
  • Как написать команду на bash, переименующую все файлы в каталоге в 0.bmp 1.bmp 2.bmp...?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    eval $(ls |awk '{i++;print "mv "$0" "i".bmp;"}')

    для подстраховки, если в именах есть пробелы то предварительно нужно взять их в кавычки ' (\x27)
    eval $(ls |awk '{i++;print "mv \x27"$0"\x27 "i".bmp;"}')
    Ответ написан
    Комментировать