LINUX.ORG.RU

5
Всего сообщений: 28

Просто распаковать «простое»

Небольшая головоломка. Всегда можно просто за-cat-ить какую-либо папку:

$ cat * > ../test.cat
$ ls -al * > ../test.ls

Получается такая простенькая «упаковка» (примитивный tar). А как это дело распаковать? Чтоб без геморроя?

 , , ,

Deleted ()

Когда запускалась программа

Как узнать когда последний раз запускалась программа? И потом вывести в файл эту дату и название программы

 , , ,

gordeeva89 ()

Замена цифр в столбце через awk

Есть таблица (файл text1):

#Наименование  Привезено  Продано 
Огрурцы        800        555     
Помидоры       200        105     
Задача: заменить в файле значение во второй строке второго столбца (800) на разность 800 и 555, а значение второй строки третьего столбца(555) обнулить (=0). И сделать так чтоб все вывелось в другой файл с уже новыми значениями. Пробовал cat text1 | awk '....' text1 > text2 Но не получается, подскажите пожалуйста как сделать, перелазил уже кучу форумов нигде не нашел правильного способа. Знаю что можно через sed, но это не универсальный способ. Заранее спасибо

 , , ,

settings3d ()

Как удалить несколько строк из файла блоком

Есть настроенная samba, несколько пользователей, у каждого своя директория и свои права на неё. Конфиг имеет вид:

...
[u001]
path = /media/u001
valid users = @u001
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777

[u002]
path = /media/u002
valid users = u002
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777

[u003]
path = /media/u003
valid users = @u003
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777
Задача: при удалении пользователя почистить конфиг samba командой. Пользователей много, строки идентичны.

Т.е. насколько я поняла, нужно сначала найти номер строки с именем пользователя, и после этого удалить строку с найденным номером и 8 строк дополнительно после найденного.

Нашла, что номер строки можно найти:

cat -n /etc/samba/smb.conf|grep u003
    69  [u003]
    70  path = /media/u003
    71  valid users = u003
Стереть строки можно командой (проверено, работает):

sed -i -e '69,77d' /etc/samba/smb.conf

Вопрос:

1. Как в выводе отобразить номер строки именно в заданном формате [u003], grep квадратные скобки игнорит;

2. Как полученный номер строки поместить в sed;

3. Или это делается как-то сильно проще, а я горожу огород?

 , ,

manik207 ()

дополнять

здравствуйте, Надо записать в одном строком команде,которая выводит на экран содержимое файла shells из текущего каталога (кроме этого на экране ничего не должно быть).Если такого файла в текущем каталоге нет,то его надо скопировать из каталога /etc (все в той же командной строке) я написал команду cat ~/shells || cat /etc/shells > ~/shells |cat ~/shells ну выводит содержимое файла shells но и есть такое строка #/etc/shells:valid login shells как исправить ?подскажите,пжлст

 ,

trung123 ()

Bash. Удаление файлов по списку, в названии которых есть пробелы

Есть похожие темы на форуме, почитал. Сел на линь недавно, куски из разных тем не могу собрать воедино, хотя думаю это элементарно. Задача проста: есть список list.txt, в нём строки такого типа:

  • /files/file.txt
  • /files/file2.txt
  • /files/file3.txt
  • /files/new file.doc
  • /files/new file2.doc

Названия и расширения файлов могут быть разными, главное что в именах присутствуют пробелы!
Команды

rm -i $(cat /list/list.txt)
и
cat /list/list.txt | xargs rm -rv
удаляют только те файлы, в названии которых нет пробелов. Имена с пробелами воспринимаются как 2 файла, соответственно: не найдено. Пробовал в списке экранировать имена с пробелами (одинарные или двойные кавычки,\(.....\), пробел обратным слешем), не работает, опыта мало в таких тонкостях, подскажите куда копать.

 , , ,

egor666 ()

cat: имя файла в архиве

Всем доброго времени! Мне нужно добавить файл-картинку в архив с файлом базы данных, что-то вроде этого:

{ cat "/path/to/file.png"; mysqldump ...; } | bzip2 -1 -c > /path/to/archive.sql.bz2

И всё бы хорошо, но несмотря на то, что бинарные данные попали в архив, они там присутствуют как бы без имени, в результате чего архив даже нормально не распаковывается. Можно ли как-то задать имя этим бинарным данным в архиве? Чтобы в нём было два файла, например:

db.sql
some.png

Создавать промежуточные файлы на диске не хочется, нужно сделать именно одной командой. Это как-то возможно? Буду рад любым идеям, спасибо!

 ,

Novascriptum ()

Почему не идет по пайпу?

Почему

cat /etc/sshd_conf | ssh user@1.1.1.1 "echo pwd | sudo -S -H -u root bash -c 'cat > /etc/ssh/sshd_config'"
обнуляет целевой sshd_config, а не перенаправляет cat /etc/sshd_conf по пайпу?

Да, несекьюрные костыли на тестовых конфигурациях - моя любовь

uname -a
Linux 190 4.3.0-2-generic #11-Ubuntu SMP Fri Dec 4 20:36:35 UTC 2015 i686 i686 i686 GNU/Linux

 ,

mammuthus ()

опять парсинг логов

Добрый день! Есть 2 файла с числами: файл 1.txt содержит числа в столбик:

  • 1
  • 2
  • 3
  • 4

файл 2.txt содержит другие числа в столбик:

  • 11
  • 22
  • 33
  • 44

Что хочется, но не получается: в скрипте на bash считать в две разные переменные сначала первые числа из каждого файла, что-то с ними сделать, сохранить в итоговый файл, потом считать вторые и т.д.

 , , , ,

Levard ()

cat: количество пробелов для \t

Сорри, если вопрос избитый. В нете пишут, что можно использовать утилиту tabs, например, tabs -4, что бы вывод cat с табуляцией был размером в 4 пробела, а не 8.

Если набрать в терминале tabs и сделать cat, работает. Набирать его постоянно, понятно, морока. Тут помогло бы использовать: .bashrc, .bash_profile, /etc/bashrc, /etc/profile.d/... Но не помогло.

Что еще? alias cat='tabs -4 && cat'

 , ,

barberry ()

15 лет прошло, а многие проблемы живее всех живых :)

Гляньте, какую нашёл прелесть!

 , , , ,

tiinn ()

Вопрос про потоковые редакторы UNIX

Читаю щас про sed учебник здешнего юзера, кстати, emulek'a встретил подозрительный кусок.

Далее sed последовательно читает все три файла, применяя к каждой строке в них sed-скрипт (пустой в данном случае). Результат выводится в выходной поток. Вот тут действие sed заканчивается, и опять начинает работать оболочка, последовательно записывая весь вывод в файл all.html. Потому код cat примитивен (пара строк на C), она просто читает входные файлы и выводит их в выходной поток, без всякой обработки, поисков и слияний. (Правда cat ещё и может нумеровать строки с ключом -n)

http://emulek.github.io/sed/ch01s02.html

Я, почему-то всегда думал, что выполнение происходит параллельно, или, как минимум, построчно. Типа, каждая строка передается по конвейру, а не буферы, куски etc. Может автор чуток ошибся? Или я что-то путаю?

 , , ,

quest2017 ()

Запись данных из файла в файл

Здравствуйте!

Есть файл с пробным пакетом modbus rtu. Пакет лежит в hex формате Подскажите, пожалуйста как мне из файла mr.bin записать данные в файл канала лежащий /tmp/rs485 и вывести на экран через hexdump

Пытаюсь так, но не работает

cat mr.bin | hexdump -C | tee /tmp/rs485

 , ,

Paralam ()

Чтение значения переменной из файла в shell-скрипте

Из серии «я познаю мир».

Ковыряясь в инит-скриптах замшелого Линукса, установленного на моём NAS, встретил следующую строку

read line <"$pid_file"

Вроде бы очевидная конструкция резанула глаз своей непривычностью. Первой мыслью было — зачем же так выражаться, ведь

line=$(cat "$pid_file")

выглядит куда нагляднее (не то, что башизм $(<"$pid_file")). Но, приведя пульс в порядок и отогнав приступ праведного гнева, я стал размышлять над этой строчкой:

  • не порождаются суб-шелл и cat (минус два форка)
  • читается почти как well-written prose (если не считать косяк в виде имени line для переменной, содержащей pid)
  • надо брать на вооружение

Беглый анализ показывает, что в современном Дебиане оба подхода примерно одинаково популярны:

$ grep '=$(cat [^)]*)' -r /etc/ 2>/dev/null | wc -l
10
$ egrep 'read [[:alpha:]_][[:alnum:]_]*[[:blank:]]*<' -r /etc/ 2>/dev/null | wc -l
7

Что скажут ценители?

Ну, и для развлечения тест производительности :-)

Классика:

$ cat cat_test.sh
#!/bin/sh

i=0

while [ $i -lt $1 ]; do
    var=$(cat value)
    i=$(($i+1))
done

echo $var

Башизм:

$ cat bashcat_test.sh 
#!/bin/bash

i=0

while [ $i -lt $1 ]; do
    var=$(< value)
    i=$(($i+1))
done

echo $var

read:

$ cat read_test.sh
#!/bin/sh

i=0

while [ $i -lt $1 ]; do
    read var < value
    i=$(($i+1))
done

echo $var

Результаты:

$ echo this is a value > value
$ time ./cat_test.sh 1000
this is a value

real    0m2.129s
user    0m0.056s
sys     0m0.212s
$ time ./bashcat_test.sh 1000
this is a value

real    0m0.777s
user    0m0.108s
sys     0m0.144s

$ time ./read_test.sh 1000
this is a value

real    0m0.036s
user    0m0.000s
sys     0m0.036s

 , , , ,

unterwulf ()

вывод файла до известной строки

День добрый. Есть большой лог. Как вывести кусок лога до определенной строки? Номер строки неизвестен, известна уникальная подстрока (время). Спасибо.

 , ,

rusya_rr ()

Вывод содержимого файла

Всем привет! Облазил все интернеты, никак не могу найти команду, с помощью которой можно вывести содержимое файла (на подобии tail) с последнего обращения к нему.

Может кто знает?

 , ,

shmeks ()

Запуск программы и ввод параметров

Здравствуйте! Уже который день пытаюсь найти способ запустить программу и ввести в нее параметры автоматически, через bash скрипт.

Вручную все получается, через ssh подключаюсь к терминалу, запускаю нужную программу и потом ввожу нужные параметры.

Хотел автоматизировать этот процесс, но увы у меня ничего не получается.

#!/bin/bash cat <<EOF | ./critter

go movetime 1000

EOF

Пробовал так, но не получается.

 , , ,

tparser ()

Удалить из очень большого текстового файла строки с определённым набором символов

Добрый день.

Подскажите, пожалуйста, как с помощью cat/grep удалить из текстового файла строки, содержащие '> >'.

Понятно, что можно самому прочитать мануалы, но вдруг кто-то легко вспомнит.

 , ,

Galaxy ()

преабула консоли из «файлика/скрипта», предшествующая интерактивной обычной сесии

а как собственно продолжить входной поток той или иной консольной утилитки(ed, python, debug на офтопики) после преамбулы (которая или кат из файла или сконструированно автоматически «от текущего положения звёзд»)

т.е есть набор действий команд которые преходится постоянно вбивать , если сделать направление из файла то «файл» заканчивается и утилита либо по ctrl-D виснет либо завершается.

хм неужели cat file_преамбула, а_какое_имя_у_консоли? | интерактивная_утилита ?

 , ,

qulinxao ()

с каких это пор я могу cat-нуть папку в freebsd?

Только сейчас обнаружил - это баг такой или фича?
На рабочем компе в Linux-е:

$ cat bleg
cat: bleg: Это каталог
теперь захожу через ssh на свой freebsd сервак:
$ cat ~/back
·▫
  ▫▫.DJ▫
        ▫▫..╣<▫▫▫MCServer-masterY▫▫▫MCServer-master.zip╧ё?▫▫
metastasis▫u#(▫	worldbackЁF▫▫▫
                              dst80SmYV2lЁF▫x▫▫	dbbackups$
^ половину фактической абракадабры ЛОР не отображает, но она там есть

содержимое этой папки:
$ ls -1 ~/back 
MCServer-master
MCServer-master.zip
dbbackups
metastasis
worldback
меня это не очень сильно волнует, но все это как-то странно...

 , ,

reprimand ()