Zsh :Как одной командой создать каталог и файл внутри него?

Задержка, вероятно, вызвана udisk2& udev.

Исследования

$ ps -eaf|grep [u]disk
root     17041     1  0 09:48 ?        00:00:00 /usr/libexec/udisks2/udisksd

Может запрашивать устройства хранения вот так:

$ udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
VBOX HARDDISK             1.0       VBc5aaf476-f419b1f1  sda

Если вы посмотрите на процесс udisk2:

$ lsof -p $(pidof udisksd) | tail
udisksd 17041 root    3u     unix 0xffff88003a49d400      0t0     611852 socket
udisksd 17041 root    4u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    5u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    6u     unix 0xffff88003a49c000      0t0     611853 socket
udisksd 17041 root    7u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    8r      REG                0,3        0     611907 /proc/17041/mountinfo
udisksd 17041 root    9r      REG                0,3        0 4026532019 /proc/swaps
udisksd 17041 root   10r  a_inode                0,9        0       4852 inotify
udisksd 17041 root   11u  netlink                         0t0     611910 KOBJECT_UEVENT
udisksd 17041 root   12u  a_inode                0,9        0       4852 [eventfd]

Там не так много всего, главное, что бросается в глаза, это inotify. Всякий раз, когда я это вижу, я сразу же думаю об udev.

Поиск правил udev

$ find /etc/udev/rules.d/ /usr/lib/udev/rules.d  | grep sto
/usr/lib/udev/rules.d/90-alsa-restore.rules
/usr/lib/udev/rules.d/60-persistent-storage.rules
/usr/lib/udev/rules.d/60-persistent-storage-tape.rules

Второй файл выглядит интересно, загляните внутрь. Эта строка выглядит как причина:

$ cat /usr/lib/udev/rules.d/60-persistent-storage.rules
...
# enable in-kernel media-presence polling
ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"

ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"

Ссылки

0
13.08.2020, 09:43
1 ответ

Существует команда installиз GNU coreutilsс опцией -D, которая может копировать файл и создавать каталоги, ведущие к ним, за один раз (, а также позволяет указать владельца и разрешения ). По умолчанию он создает исполняемые файлы и не учитывает umask, поскольку он обычно используется в качестве инструмента разработки на этапах make install.

install -m u=rw,go=r -D /dev/null some/new/file

(разрешения компонентов каталога, которые он создает, всегдаu=rwx,go=rx).

Или вы всегда можете реализовать это как createфункцию Zsh, такую ​​как:

create() {
  local file ret=0
  for file do
    mkdir -p -- "$file:h" && true >> "$file" || ret=$?
  done
  return "$ret"
}

Хотя создание пустого обычного файла кажется мне немного бессмысленным.

Как правило, вы бы сделали:

mkdir -p some/dir
your-editor some/dir/some-file

Чтобы создать некоторый -файл (, файл будет создан, как только вы сохраните его (с фактическим содержимым )в вашем редакторе ).

Или любая другая команда, создающая контент, например:

some-command > some/dir/some-file
wget -o some/dir/some-file https://example.com/whatever
cp source some/dir/some-file
...etc.
0
18.03.2021, 23:17

Теги

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