Доступ к содержимому по пути базовой точки монтирования

код @ Kamaraj был обновлен. Пожалуйста, замените строки:

print $0 "is matching. it is ok"
print $0 "is not matching. please check"

на

split($0,a,/ /); print a[1] " is matching. it is ok"
split($0,a,/ /);print a[1] " is not matching. please check"

или напечатайте $ 1 "совпадает. Это нормально" {{1 }} print $ 1 "не соответствует. Пожалуйста, проверьте"

Весь сценарий будет:

awk 'NR==FNR{
A[NR]=$0;
next
}
{
if($0==A[FNR])
{
split($0,a,/ /); print a[1] " is matching. it is ok"
}
else{
split($0,a,/ /);print a[1] " is not matching. please check"
}
}' file1.txt file2.txt

TIMES:

@heemayl real 0m0.159s user 0m0.000s { {1}} sys 0m0.046s

@Kamaraj real 0m0.102s user 0m0.000s sys 0m0.031s с разделением

@Kamaraj real 0m0.099s user 0m0.000s sys 0m0.062s с $ 1

Спасибо @Kamaraj.

1
02.11.2017, 16:29
2 ответа

В Linux вы можете сделать это без связывания -монтирования и привилегий root, просто имея процесс, который либо chdir, либо открывает базовый каталог --, прежде чем он будет скрыт монтированием --, а затем просто задерживается; другие процессы могут затем получить доступ к каталогу через /proc/<pid>/cwdили /proc/<pid>/fd/<dir_fd>.

Пример с chdir:

# mkdir dir; touch dir/file                   # create a sample dir and file
# (cd dir; while sleep 3600; do :; done) &    # start a bg process with its pwd being dir
[1] 3734
# mount -t tmpfs tmpfs dir                    # mount a tmpfs over dir which will hide its previous content
# ls dir
# ls /proc/3734/cwd                           # you can still access the old dir via /proc/<pid>/cwd 
file

Пример с открытием каталога:

# mkdir -p dir1; touch dir1/file
# exec 9<dir1
# mount -t tmpfs tmpfs dir1
# ls dir1
# ls /proc/self/fd/9
file

Если вы хотите сделать это постфактум с уже смонтированным каталогом, вы можете создать частное пространство имен и размонтировать этот каталог внутри пространства имен.

В этом случае вы также можете получить к нему доступ извне через /proc/<pid>/root/<path_to_dir>, без необходимости его открытия или перехода к нему:

mkdir -p dir; touch dir/file
mount -t tmpfs tmpfs dir

unshare -m sh -c 'umount dir; while sleep 1000; do :; done' &
sleep.1
ls "/proc/$!/root/$PWD/dir"  # will show 'file'

Вы можете прочитать больше о дополнительной магии /proc/<pid>/rootна справочной странице proc(5). Обратите внимание, что вы можете сохранить пространство имен процесса даже после завершения процесса, смонтировав его /proc/<pid>/ns/mntв другом месте при помощи bind -; затем вы можете снова -ввести его с помощью nsenter(1).

1
01.10.2021, 10:06

Примечание :для тех, кто может пропустить комментарий.

sudo mount --bind original_location backup_linkработает, локации под oldlocationмогут быть доступны после того, как что-то на них установлено и затенено.

Но

  1. sudo mount --bind, как я понял, нужно запускать после mount something original_location, а не заранее.
  2. Как и после теневого монтирования, необходимо смонтировать каталог выше, чем один затененный:sudo mount --bind parent_of_original_location backup_link
0
01.12.2021, 12:29

Теги

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