Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Перемещение файлов в папку с сохранением предыдущего файла

По крону командой mv периодически файлы перемещаются из одной папки в другую. Как сделать чтобы если в папке назначения файл с этим именем уже присутствует, дать новому другое название?

Например так: перемещается файл file.txt, но в папке назначения он уже есть, поэтому он будет перемещён с именем file_2.txt.
Ответ: Спасибо, nezabudka. Думал, что есть более простой встроенный метод. Но если нет, то сделал так:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env bash
 
src=~/temp/src
dst=~/temp/dst
 
IFS=$'\n'
 
for file in $(find $src -type f -name "*"); do
    filename=$(basename $file)  
    ext="${filename##*.}"
    bare_filename="${filename%.*}"
    newfile="$dst/$filename"
    
    idx=1
    while [[ -f $newfile ]]
    do
        ((idx++))
        prefix="($idx)"
        newfile="$dst/$bare_filename$prefix.$ext"
    done
    
    mv $file $newfile
    echo "Файл '$file' перемещён в '$newfile'"
done
Вопрос: Перемещение файлов из подпапок в корневую папку.

Задача.
Имеются файлы в папке /log/.../.../.../*.LOG
Необходимо их переместить в папку /log/ с удалением вложенных подпапок.
Имена вложенных подпапок нам неизвестны.
Скрипт необходимо обернуть в sh
ОС Linux
У кого какие будут соображения?
PS. Инет шерстил, пока ничего подходящего не нашел.
Ответ: Спасибо всем.
Вопрос: Пауза при перемещении файлов

Интересует вопрос как снизить нагрузку на жесткий диск при перемещении большого количества файлов, использую mv и find, rm для удаления, при выполнении команд получается сильная нагрузка на диск. Может как-то можно сделать паузу или может есть другие варианты снижения нагрузки?
Ответ: Может речь идет про опцию --remove-source-files
Вопрос: Права доступа на директории при чтении, изменении и удалении файлов

Всем привет , помогите разобраться с правами доступа.
У нас есть 5 директорий и 5 файлов , нужно удалить 3 и 5 директоии вместе с файлами , файл из второй директории записать в конец файла из первой , а первую первую директорию объединить с четвертой .



насколько я понимаю для всех подходит rwx, но нужно написать минимальные а знаний на это не хватает(
Ответ: Вам следует помнить, что директории — это суть файлы, со списком содержимого. При перемещении файла из одной директории в другую физического перемещения данных файла не происходит — только изменяются два списка: дир_источник и дир_получатель.
Т.е для того чтобы «файл из второй директории записать в конец файла из первой» необходимо для 1дир иметь права на запись, обеим права на вход, 2файл право на чтение, 1файл право на запись.
Вопрос: Узнать путь к файлу устройства, имея только вывод lsusb

Linux debian 7

Вопрос в шапке. В программе хочу выводить пользователю все usb устройства на выбор. Дальше, в зависимости от выбранного устройства, программа работает с ним через его файл.

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

Добавлено через 1 час 2 минуты
Никто не сталкивался? Ведь есть же, например, файл /dev/ttyUSB0. Когда воткнул устройство и появился файл - сразу понятно, что этот файл для этого же устройства. А если устройств много и их нельзя просто так вытащить вставить? Нужно узнать пути, найти все такие файлы для всех устройство из lsusb. Хотя из lsusb я могу достать только pid и vid устройства...
Очень нужен совет опытного линуксоида, куда копать...

Добавлено через 6 часов 21 минуту
Неужели никто не знает, как узнать пути к устройствам lsusb? Никаким способом?
Ответ: В данный момент удалил часть файлов драйвера, устройства ttyUSB0 перестали появляться. Создаются лишь мои устройства.

Если выдергивать их по-очереди с интервалом в несколько секунд - файлы устройств удаляются. Правило udev отрабатывает корректно.

НО если выдернуть сразу пачку проводов, часть устройств может не удалиться, потому что событие удаления демоном udev будет пропущено, т.к. он в этот момент обрабатывает правила удаление первой половины пачки устройств.

Кто-то сталкивался - как это решить?

Добавлено через 4 минуты
Может я неправильно составил правило удаления устройств?

ACTION=="remove", ATTRS{serial}=="XX000012" RUN+="/bin/rm /dev/myUSB12"
И таких строк сейчас 20 в том же файле, в котором обрабатываются события ACTION="add" - для каждого серийника своя.

Добавлено через 15 минут
Запустил проверку через
Код Bash
1
udevadm --debug monitor
Оказалось, что все устройства удаляются. Но вот мои файлы myUSB%n частью остаются висеть в папке /dev хотя удаление вроде как отработало. Статус файла в этот момент (после удаления) не изменяется. Он видится как файл. Но работать с ним, как с устройством, например считывать приход через команду cat - нельзя, т.к. выдается ошибка:
Код Bash
1
 /dev/myUSB4: Нет такого устройства
Добавлено через 7 минут
О как. Сейчас выдернул опять 4 устройства. По логам udev видна последовательность удаления устройств - 2,1,3,4.

И именно 1 файл-устройство не удалился из папки /dev/

Скорее всего и впрямь некорректно работает моя мешанина правил удаления. Поскольку событие удаление первого устройства описано в файле первым, то при удалении 2 устройства последующее удаление 1 устройства игнорируется, т.к. требуется время на прохождение и проверку всех событий, описанных ниже (предполагаю).

Сейчас проверю, если буду выдергивать сначала 4 устройство. Должны будут остаться первые 3 файла...

Добавлено через 6 минут
Кстати, заметил, что и одновременное включение устройств приводит к такой же проблеме. Предыдущее по номеру устройство игнорируется.

Добавлено через 6 минут
Для сравнения 1 файл остался после некорректной отработки udev. Второй просто не существует. Любой существующий файл дал бы ожидание приема от устройства.
Код Bash
1
2
3
4
5
root@debian:/dev# cat myUSB4
cat: moxa_USB4: Нет такого устройства
root@debian:/dev# cat myUSB1
cat: moxa_USB1: Нет такого файла или каталога
root@debian:/dev# 
Вопрос: Куда исчез скаченный файл?

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

У меня произошла странная вещь... Я использую Ubuntu Desktop 14.04 и Firefox. Я попытался скачать свой файл из облака (MEGA), но получилось как-то странно. Вместо того, чтобы сразу получить окошко Save As и выбрать локацию для сохранения, ничего подобного не было, а потом вдруг вылетело маленькое окошко с опцией сохранить. Я его закрыл (надо было нажать на кнопку «Save» видимо). А потом на сайте я выяснил, что тот файл да был скачен полностью. Размер файла 1,1 ГБ. И теперь я его не могу нигде на диске найти! Ни в папке Downloads, ни в папке кэша Firefox (эта папка вообще размером намного меньше 1 ГБ, в принципе!). А в GParted размер моего хомяка резко вырос (где-то на тот же 1 ГБ). Глупо как то получилось...
Ответ:
Сообщение от abrodski
скачивается во временную папку на диск
ну так то да. У меня это почему то $HOME/desktop ...
З.Ы. Зато у меги есть консольный клиент. Причем весьма неплохой
Вопрос: Распаковка архивов с переименованием файлов

Задача такая. Есть папка с архивами rar, zip, 7z.
Нужно все архивы распаковать (без сохранения структуры катологов) и сложить в одну папку, а в случае совпадения имен, добавить к имени индекс.
С rar все оказалось просто:
Bash
1
#unrar e -or -inul "file" /dst/
А вот с zip сложнее. В unzip нет ключа для автоматического переименования.
В связи с этим вопрос. Есть ли архиватор, который поддерживает консольные команды и в арсенале которого будут необходимые опции?
Ответ: Спасибо. Всегда думал, что в ман надо лезть, когда непонятно в краткой справке. Буду знать.
Но получается не совсем то, что нужно.
Ключ -B меняет расширение, а не имя файла, чего не желательно...
Вопрос: Обработать текстовый файл в Терминале

Помогите сделать это в терминале

1. Создайте два файла с перечнем объектов (каждый объект с новой строки).
2. Отсортируйте каждый из файлов по алфавиту
3. Объедините эти файлы в один
4. Подсчитайте общее количество слов в нем,
5. Выведите на экран первые и последние две строки файла
6. Замените символы перевода строки на символ табуляции и обратно
7. Отсортируйте файл
8. Пронумеруйте строки файла
9. Выведите на экран все строки, содержащие букву "р"
10. Разбейте файл на три файла
Выполнить следующие задания. Объяснить каждый шаг конвейера. Вместо знаков вопроса подставьте нужную команду/аргумент.
1. Вывести на экран всех пользователей системы с сортировкой по алфавиту:
$ cut -d: -f1 /etc/passwd | ???

2. Изменить предыдущую команду таким образом, чтобы помимо имени пользователя на экране также выводился его идентификатор. Подсказка: посмотрите содержимое файла /etc/passwd, чтобы найти, в каком из полей, разделенных двоеточием, находится UID.
3. Подсчитать количество пользователей, у которых командой оболочкой является bash:
$ grep :/bin/bash /etc/passwd | wc -l

4. Вывести на экран всех пользователей, использующих командную оболочку /bin/bash, отсортировав их по алфавиту в обратном порядке:
$ grep :/bin/bash /etc/passwd | ??? | ???

5. Выполнить сортировку пакетов по размеру (большего к меньшему) и вывести первые 25 пакетов:
$ rpm -qa --qf '[%{NAME}: %{SIZE}\n]' | sort -rn -k2,2 | ???

6. Вывести все файлы из пакета man, подсчитать для каждого из них размер, игнорируя ошибки, и выполнить сортировку по размеру:
$ rpm -ql man | xargs -l du 2> /dev/null | sort -n

7. При помощи программы top вывести список работающих процессов и отсортировать их по имени процесса (аргумент команды sort заполнить самостоятельно):
$ top -b -n1 | sort ???

8. Используя команду awk, изменить вывод команды top таким образом, чтобы в первой колонке отображалось имя процесса, во второй - объём занимаемой памяти:
$ top -b -n1 | awk '{printf "%35s %s\n", $12, $6}'
9. Вывести файл /etc/passwd в отсортированном по пользователям виде, заменив знаки двоеточия пробелами:
$ ??? | tr ":" " "
10. Вывести файл /etc/passwd в отсортированном по пользователям виде в две колонки - в первой - имя пользователя, во второй - командная оболочка пользователя:
$ ??? | awk -F: '{printf "%15s %s\n", $1, $7}'
11. На примере файла user-manual.txt из документации git исследовать конвейеры.
$ cd /usr/share/doc/git-*
12. Выполнить анализ частоты появления каждого слова в файле user-manual.txt. Конвейер нужно строить по шагам, наблюдая за изменением результата. Определить этап получения первичной информации, этап обработки и этап представления результатов.
$ cat user-manual.txt | tr ' ' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[unct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head -5
Или:
$ cat user-manual.txt | tr -cs '[:alpha:]' '\n' | tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn | head -5
Почему различаются результаты работы конвейеров?
13. Выполнить анализ частоты появления каждого символа.
$ tr '[:lower:]' '[:upper:]' < user-manual.txt | tr -d '[unct:] \n\t' | fold -w1 | sort | uniq -c | sort -rn | head -5
14. Вывести самые часто встречаемые слова, в которых количество символов больше семи:
$ tr -cs '[:alpha:]' '\n' < user-manual.txt | less | grep -E ........ | sort | uniq -c | sort -rn | head
Ответ: 1. Создайте два файла с перечнем объектов (каждый объект с новой строки).
2. Отсортируйте каждый из файлов по алфавиту
3. Объедините эти файлы в один
4. Подсчитайте общее количество слов в нем,
5. Выведите на экран первые и последние две строки файла
6. Замените символы перевода строки на символ табуляции и обратно
7. Отсортируйте файл
8. Пронумеруйте строки файла
9. Выведите на экран все строки, содержащие букву "р"
10. Разбейте файл на три файла
Выполнить следующие задания. Объяснить каждый шаг конвейера. Вместо знаков вопроса подставьте нужную команду/аргумент.
1. Вывести на экран всех пользователей системы с сортировкой по алфавиту:
Bash
1
$ cut -d: -f1 /etc/passwd | ??? 
2. Изменить предыдущую команду таким образом, чтобы помимо имени пользователя на экране также выводился его идентификатор. Подсказка: посмотрите содержимое файла /etc/passwd, чтобы найти, в каком из полей, разделенных двоеточием, находится UID.
3. Подсчитать количество пользователей, у которых командой оболочкой является bash:
Bash
1
$ grep :/bin/bash /etc/passwd | wc -l 
4. Вывести на экран всех пользователей, использующих командную оболочку /bin/bash, отсортировав их по алфавиту в обратном порядке:
Bash
1
$ grep :/bin/bash /etc/passwd | ??? | ??? 
5. Выполнить сортировку пакетов по размеру (большего к меньшему) и вывести первые 25 пакетов:
Bash
1
$ rpm -qa --qf '[%{NAME}: %{SIZE}\n]' | sort -rn -k2,2 | ??? 
6. Вывести все файлы из пакета man, подсчитать для каждого из них размер, игнорируя ошибки, и выполнить сортировку по размеру:
Bash
1
$ rpm -ql man | xargs -l du 2> /dev/null | sort -n 
7. При помощи программы top вывести список работающих процессов и отсортировать их по имени процесса (аргумент команды sort заполнить самостоятельно):
Bash
1
$ top -b -n1 | sort ???
8. Используя команду awk, изменить вывод команды top таким образом, чтобы в первой колонке отображалось имя процесса, во второй - объём занимаемой памяти:
Bash
1
$ top -b -n1 | awk '{printf "%35s %s\n", $12, $6}' 
9. Вывести файл /etc/passwd в отсортированном по пользователям виде, заменив знаки двоеточия пробелами:
Bash
1
$ ??? | tr ":" " " 
10. Вывести файл /etc/passwd в отсортированном по пользователям виде в две колонки - в первой - имя пользователя, во второй - командная оболочка пользователя:
Bash
1
$ ??? | awk -F: '{printf "%15s %s\n", $1, $7}' 
11. На примере файла user-manual.txt из документации git исследовать конвейеры.
Bash
1
$ cd /usr/share/doc/git-*
12. Выполнить анализ частоты появления каждого слова в файле user-manual.txt. Конвейер нужно строить по шагам, наблюдая за изменением результата. Определить этап получения первичной информации, этап обработки и этап представления результатов.
Bash
1
$ cat user-manual.txt | tr ' ' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[unct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head -5 
Bash
1
2
Или: 
$ cat user-manual.txt | tr -cs '[:alpha:]' '\n' | tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn | head -5 
Почему различаются результаты работы конвейеров?
13. Выполнить анализ частоты появления каждого символа.
Bash
1
$ tr '[:lower:]' '[:upper:]' < user-manual.txt | tr -d '[unct:] \n\t' | fold -w1 | sort | uniq -c | sort -rn | head -5 
14. Вывести самые часто встречаемые слова, в которых количество символов больше семи:
Bash
1
$ tr -cs '[:alpha:]' '\n' < user-manual.txt | less | grep -E ........ | sort | uniq -c | sort -rn | head
Вопрос: Передача файл-архива из Linux UBUNTU хос в виртуальную машину windows7 VirtualBox VMs

нужно написать проверку теорем и свойсв матриц и определителей в mathcad, но для етого нужно сначала передать файл-архив из Linux UBUNTU хост в виртуальную машину windows7 VirtualBox VMs, это и есть мой вопрос, который очень скоро решится.
Ответ: CopyPaste, создайте общую папку, как обсуждалось в предыдущей вашей теме, а уже в Win на рабочем столе создайте ярлык на нужный вам архив. Вроде бы Win 7 умеет работать с символьными ссылками. Не могу наверняка утверждать.
Вопрос: Получить доступ к системным файлам

Как получить полный доступ к всем файлам компьютера? Зашел в папку /var/www/ там есть папку html, я не могу её удать, или вырезать, в чем проблема?
Ответ: Начните с основ:


Поскольку Linux — система многопользовательская, вопрос об организации разграничения доступа к файлам и каталогам является одним из существенных вопросов, которые должна решать операционная система. Механизмы разграничения доступа, разработанные для системы UNIX в 70-х годах (возможно, впрочем, они предлагались кем-то и раньше), очень просты, но они оказались настолько эффективными, что просуществовали уже более 30 лет и по сей день успешно выполняют стоящие перед ними задачи.

В основе механизмов разграничения доступа лежат имена пользователей и имена групп пользователей. Вы уже знаете, что в Linux каждый пользователь имеет уникальное имя, под которым он входит в систему (логируется). Кроме того, в системе создается некоторое число групп пользователей, причем каждый пользователь может быть включен в одну или несколько групп. Создает и удаляет группы суперпользователь, он же может изменять состав участников той или иной группы. Члены разных групп могут иметь разные права по доступу к файлам, например, группа администраторов может иметь больше прав, чем группа программистов.

В индексном дескрипторе каждого файла записаны имя так называемого владельца файла и группы, которая имеет права на этот файл. Первоначально, при создании файла его владельцем объявляется тот пользователь, который этот файл создал. Точнее — тот пользователь, от чьего имени запущен процесс, создающий файл. Группа тоже назначается при создании файла — по идентификатору группы процесса, создающего файл. Владельца и группу файла можно поменять в ходе дальнейшей работы с помощью команд chown и chgrp


В любой Linux системе обязательно есть один привилегированный пользователь — root. Этот пользователь имеет права на выполнение любых действий, удаление любых файлов и изменение любых параметров. Как-то ограничить свободу действий root практически невозможно. С другой стороны, все остальные пользователи системы обычно не имеют большинства необходимых прав, например, прав на установку программ, поскольку это является административной операцией, права на которую есть только у root. Ещё одной распространённой операцией, доступной только суперпользователю, является копирование и изменение файлов в системных папках, куда обычный пользователь доступа не имеет.

Раньше данная проблема решалась достаточно просто: при обладании паролем root можно было зайти в систему под его аккаунтом либо временно получить его права, используя команду su. Потом выполнить все необходимые операции и вернуться обратно под обычного пользователя. В принципе, такая схема работает неплохо, однако у неё есть много существенных недостатков, в частности, невозможно никак (точнее, очень сложно) ограничивать административные привилегии только определённым кругом задач.

Поэтому в современных дистрибутивах Linux вместо root аккаунта для администрирования используется утилита sudo.

В Ubuntu по умолчанию root аккаунт вообще отключён, т.е. вы никаким способом не сможете попасть под root, не включив его. root именно что отключён, т.е. он присутствует в системе, под него всего лишь нельзя зайти. Если вы хотите вернуть возможность использовать root, смотрите ниже пункт о включении root аккаунта.

Что такое sudo
sudo — это утилита, предоставляющая привилегии root для выполнения административных операций в соответствии со своими настройками. Она позволяет легко контролировать доступ к важным приложениям в системе. По умолчанию, при установке Ubuntu первому пользователю (тому, который создаётся во время установки) предоставляются полные права на использование sudo. Т.е. фактически первый пользователь обладает той же свободой действий, что и root. Однако такое поведение sudo легко изменить, об этом см. ниже в пункте про настройку sudo.