Физические тома, логические тома, суперблоки уведенный …, как загрузиться?

Выполнение этой команды в оболочке или добавление ее в конфигурационный файл оболочки добавит текущую директорию к переменной PATH. Переменная PATH - это список каталогов, в которых оболочка будет искать исполняемые файлы для выполнения при выдаче команды.

enter image description here

Это позволит вам запустить любой исполняемый файл в текущем каталоге без [1122438]./[12120]
2
13.04.2017, 15:36
1 ответ

Я не уверен, что это лучше, чем делать это в памяти, но с sed , который r вытягивает свое вхождение для каждой строки в своем вхождении, а другой на другой стороне трубы, чередующейся H старое пространство с входными линиями...

cat <<\IN >/tmp/tmp
Row1,10
Row2,20
Row3,30
Row4,40
IN

</tmp/tmp sed -e 'i\
' -e 'r /tmp/tmp' | 
sed -n '/./!n;h;N;/\n$/D;G;s/\n/ /;P;D'

ВЫХОД

Row1,10 Row1,10
Row1,10 Row2,20
Row1,10 Row3,30
Row1,10 Row4,40
Row2,20 Row1,10
Row2,20 Row2,20
Row2,20 Row3,30
Row2,20 Row4,40
Row3,30 Row1,10
Row3,30 Row2,20
Row3,30 Row3,30
Row3,30 Row4,40
Row4,40 Row1,10
Row4,40 Row2,20
Row4,40 Row3,30
Row4,40 Row4,40

Я сделал это другим способом. Он хранит некоторые в памяти - он хранит последовательность типа:

"$1" -

... для каждой строки в файле.

pairs(){ [ -e "$1" ] || return
    set -- "$1" "$(IFS=0 n=
        case "${0%sh*}" in (ya|*s) n=-1;; (mk|po) n=+1;;esac
        printf '"$1" - %s' $(printf "%.$(($(wc -l <"$1")$n))d" 0))"
    eval "cat -- $2 </dev/null | paste -d ' \n' -- $2"
}

Это очень быстро. Файл cat встречается столько раз, сколько строк в файле | pipe . С другой стороны трубы, вводимые данные, объединяются с самим файлом столько раз, сколько линий в файле.

Материал case предназначен только для переносимости - yash и zsh оба добавляют один элемент к разделению, в то время как mksh и posh оба теряют один. ksh , тире , busybox и bash все разделены на столько полей, сколько нулей напечатано printf . Как написано выше, приводит к одинаковым результатам для каждого из вышеупомянутых корпусов на моей машине.

Если длина файла очень велика , может возникнуть $ ARGMAX со слишком большим количеством аргументов, в этом случае потребуется ввести xargs или аналогичные.

При условии, что тот же вход I, который использовался до выхода, идентичен. Но, если бы я стала больше...

seq 10 10 10000 | nl -s, >/tmp/tmp

Это создает файл, почти идентичный тому, что я использовал до (sans 'Row') - но в 1000 строках. Вы можете сами увидеть, насколько это быстро:

time pairs /tmp/tmp |wc -l

1000000
pairs /tmp/tmp  0.20s user 0.07s system 110% cpu 0.239 total
wc -l  0.05s user 0.03s system 32% cpu 0.238 total

На 1000 линиях есть некоторые небольшие различия в производительности между оболочками - bash неизменно медленнее всего - но поскольку единственная работа, которую они делают в любом случае, это генерация arg последовательности (1000 копии имени файла - ) эффект минимален. Разница в производительности между zsh - как выше - и bash составляет здесь 100-ю секунду.

Вот еще одна версия, которая должна работать для файла любой длины:

pairs2()( [ -e "$1" ] || exit
    rpt() until [ "$((n+=1))" -gt "$1" ]
          do printf %s\\n "$2"
          done
    [ -n "${1##*/*}" ] || cd -P -- "${1%/*}" || exit
    : & set -- "$1" "/tmp/pairs$!.ln" "$(wc -l <"$1")"
    ln -s "$PWD/${1##*/}" "$2" || exit
    n=0 rpt "$3" "$2" | xargs cat | { exec 3<&0
    n=0 rpt "$3" p | sed -nf - "$2" | paste - /dev/fd/3
    }; rm "$2"
)

Она создает мягкую ссылку на свой первый arg в /tmp с полуслучайным именем, чтобы не зависать на странных именах файлов. Это важно, потому что перегоны cat подаются в него по трубе через перегоны xargs . Выходные данные cat сохраняются в < & 3 , в то время как sed p печатает каждую строку в первом arg столько раз, сколько есть строк в этом файле - и его скрипт также подается в него через канал. Снова paste объединяет свой вход, но на этот раз для стандартного входа и имени ссылки /dev/fd/3 требуется только два аргумента - .

Последняя - ссылка /dev/fd/[ num] - должна работать на любой системе Linux и многие другие, кроме того, но если она не создает именованный канал с mkfifo и с помощью этого вместо этого должна работать.

Последнее, что он делает, это rm мягкая связь, которую он создает перед выходом.

Эта версия на самом деле быстрее еще в моей системе. Я думаю, что это потому, что, хотя он выполняет больше приложений, он начинает передавать им их аргументы немедленно - в то время как прежде он сложил их все первыми.

time pairs2 /tmp/tmp | wc -l

1000000
pairs2 /tmp/tmp  0.30s user 0.09s system 178% cpu 0.218 total
wc -l  0.03s user 0.02s system 26% cpu 0.218 total
-121--31379-
ed file.txt
%g/^/s// /
2,$g/^/-,.j
1s/^/command/
wq
chmod 755 file.txt
./file.txt

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

command line1 line2 line3 ....

Если вам нужен флаг --option перед каждой строкой, измените вторую команду на:

%g/^/s// --option /
-121--10129-

По какой-нибудь тайне i Это был просто вопрос восстановления их с помощью метаданных я мог бы создать резервную копию с помощью testdisk . Я скопировал исходную папку /etc/lvm на рабочем столе живого пользователя, затем

$ pvcreate --uuid "cZ83jX-WXkk-tNG4-ulGT-sAqq-HlKq-Omtqc8" \
--restorefile /home/liveuser/Desktop/etc/lvm/archive/VG.vg /dev/sda2
  Physical volume "/dev/sda2" successfully created

$ vgcfgrestore VG
  Restored volume group VG

$ lvchange -ay /dev/VG/home /dev/VG/root /dev/VG/swap

$ lvs -a -o +devices

После этого vgdisplay -v fedora_pedro вернул согласованные выходные данные, упомянув исходные логические и физические тома, которые мне было разрешено монтировать и исследовать. Но через пару минут я, к сожалению, протер заголовок контейнера Люкс, пытаясь записать эти изменения на диск. Так что все было сделано напрасно...

2
27.01.2020, 22:13

Теги

Похожие вопросы