Всем, доброго.
В статьей «Объединение команд и особенности грамматики командной оболочки Баш, что полезно знать Начинающему», мы с вами, рассмотрим объединения команд между собой, применение шаблонов имен для обобщения имен групп файлов, а также подстановку результата выполнения команды в аргументы другой команды.
Введение
Понимаю, что начинаю понемногу усложняться в своих статьях. Однако, напомню, что пишу статьи для тех, кто готов постепенно обучиться основам и азам командной строки Линукс, для созидания отправной точки в себе, чтобы потом применять ее в качестве отправного момента в своих дальнейших начинаниях на просторах ОС Линукс. Поэтому, сложность и объем не меняются мною на уровне Начинающего Линуксоида, меняется содержание статей. Так что, рекомендую привыкнуть к этому, т.к. сам предпочитаю, нормально пройтись по основам и азам, чтобы потом перейти к интересному на уровне Любителя, с уже более кратким изложением, где вам пригодятся ваши познания. А уж там, как учились, так поймете сказанное, поэтому продолжим в том же духе и настрое, благо, это, развивает в нас то, что требуется для дальнейшего развития в себе.
Шаблоны имен файлов.
Шаблоны имен файлов — это инструмент интерфейса командной строки Линукс, который помогает работать с группами файлов, чтобы облегчить и сократить рутинные процессы перебора имен файлов или наоборот упростить составление списка имен файлов, с которыми будут производить задаваемые операции, т.к. большинство основных команд умеют работать со списком имен файлов, обрабатывая каждый элемент такого списка отдельно. Т.е. шаблоны имен файлов снимают с применителя нагрузку и лишнюю рутину, что бывает удобно, при администрировании, поиске файлов, работе с несколькими файлами или обработкой нескольких файлов, в том числе при применении скриптов (список команд для выполнения со своими возможностями).
Также стоит отметить, что для применения шаблонов имен файлов не обязательно уметь работать с регулярными выражениями, однако это не значит, что нельзя применять. Но, есть одно маленькое и интересное «Но», т.к. в отличие от «Окон» Шмякософта в Линуксе, все является файлами и шаблоны имен файлов составляются простым способом без применения регулярных выражений, т.е. применять их легко, просто, удобно, практично, в том числе их применение дает доступ к интересным возможностям применения основных команд, после чего вы уже начнете понимать, что «Окна» имеют сильно «урезанный» вариант командной строки, которую незаслуженной сократили, обрезали, сделав ее совсем ущербной, таки не сумев без нее обойтись со всеми своими идеологическими замашками, проявив эдакий «скрытый фашизм» по отношению к командной строке, что явно говорит о «больном восприятии» создателей «Окон». Так что не будем увлекаться дальнейшими пояснениями по данной теме, чтобы не увлекаться и не отвлекаться от темы статьи.
Так что, можно сказать, что для простых шаблонов имен файлов достаточно применять «*», «?», «[…]». Однако, пройдемся подробнее по каждому из них.
Для начало, рассмотрим «*», которая имеет одну особенность по сравнению версией в «Окнах», т.к. в Линуксе она включает все начиная от текущей директории, включая директории внутри текущей, однако пропуская скрытые файлы, которые нельзя включать по логике безопасности. Т.к. для скрытых файлов, есть другой способ составления их списка «.*», благодаря которому будут включены только скрытые файлы, но также «.» (текущая директория) и «..» (директория уровнем выше). Однако, учитывая особенности Линукс по отношению к файлам, о чем говорилось в предыдущих статьях, чтобы включить в список файлов все файлы с расширениями, стоит применять, так «*.*». А также в классическом варианте, например «фыва*», будет включать в список имен все файлы начинающиеся с «фыва». Или, например «*фыва*», будет включать в список имен все файлы содержащие «фыва». Или, например «*фыва», будет включать в список имен все файлы заканчивающиеся на «фыва».
Символом «?» обозначается любой один символ, т.е. применив шаблон имен файлов «фыва????» получим список имен файлов, которые начинаются с «фыва» и имеют в конце любых пять символов.
Символы находящиеся между «[» и «]» заменяют собой только один символ, однако также можно указывать множества «а-я», «А-Я», «a-z», «A-Z», «0-9». Однако, при применении русских букв стоит обращать внимание на переменную «$LANG», которая указывает на обращаемые множества букв, а также на то, что «рекомендуют», чтобы переменная «$LC_ALL» была пустой для корректной работы со множествами букв.
Для создания сложного шаблона имен файлов, требуется применять регулярные выражения, о чем будет позднее, а в данном подтеме стоит посмотреть на применение этих шаблонов в деле, что можно увидеть ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
andryuhan@Linuxoid-komp ~ $ cd ~ andryuhan@Linuxoid-komp ~ $ mkdir test andryuhan@Linuxoid-komp ~ $ cd test andryuhan@Linuxoid-komp ~/test $ touch 1 andryuhan@Linuxoid-komp ~/test $ touch 2 andryuhan@Linuxoid-komp ~/test $ touch 5 andryuhan@Linuxoid-komp ~/test $ touch 6 andryuhan@Linuxoid-komp ~/test $ touch 9 andryuhan@Linuxoid-komp ~/test $ touch 0 andryuhan@Linuxoid-komp ~/test $ touch а andryuhan@Linuxoid-komp ~/test $ touch б andryuhan@Linuxoid-komp ~/test $ touch в andryuhan@Linuxoid-komp ~/test $ touch д andryuhan@Linuxoid-komp ~/test $ touch ж andryuhan@Linuxoid-komp ~/test $ touch я andryuhan@Linuxoid-komp ~/test $ touch е andryuhan@Linuxoid-komp ~/test $ touch г andryuhan@Linuxoid-komp ~/test $ touch t andryuhan@Linuxoid-komp ~/test $ touch d andryuhan@Linuxoid-komp ~/test $ touch j andryuhan@Linuxoid-komp ~/test $ touch k andryuhan@Linuxoid-komp ~/test $ touch l andryuhan@Linuxoid-komp ~/test $ touch lж andryuhan@Linuxoid-komp ~/test $ touch lжfgж andryuhan@Linuxoid-komp ~/test $ touch lжррр andryuhan@Linuxoid-komp ~/test $ touch lжршщ andryuhan@Linuxoid-komp ~/test $ touch jж andryuhan@Linuxoid-komp ~/test $ touch iж andryuhan@Linuxoid-komp ~/test $ touch ож andryuhan@Linuxoid-komp ~/test $ touch щж andryuhan@Linuxoid-komp ~/test $ touch фыва andryuhan@Linuxoid-komp ~/test $ touch фыва4апв5 andryuhan@Linuxoid-komp ~/test $ touch вапфыва andryuhan@Linuxoid-komp ~/test $ touch вапфывавапвап andryuhan@Linuxoid-komp ~/test $ touch фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls 0 5 d jж lж lжршщ б вапфывавапвап е фыва щж 1 6 iж k lжfgж t в г ж фыва4апв5 я 2 9 j l lжррр а вапфыва д ож фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls * 0 5 d jж lж lжршщ б вапфывавапвап е фыва щж 1 6 iж k lжfgж t в г ж фыва4апв5 я 2 9 j l lжррр а вапфыва д ож фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls *фыва вапфыва фыва andryuhan@Linuxoid-komp ~/test $ ls фыва* фыва фыва4апв5 фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls *фыва* вапфыва вапфывавапвап фыва фыва4апв5 фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls [0-9] 0 1 2 5 6 9 andryuhan@Linuxoid-komp ~/test $ ls [а-я] а б в г д е ж я andryuhan@Linuxoid-komp ~/test $ ls [а-Я] а б в г д е ж я andryuhan@Linuxoid-komp ~/test $ ls [А-Я] б в г д е ж я andryuhan@Linuxoid-komp ~/test $ touch А andryuhan@Linuxoid-komp ~/test $ touch touch: пропущен операнд, задающий файл По команде «touch --help» можно получить дополнительную информацию. andryuhan@Linuxoid-komp ~/test $ touch Р andryuhan@Linuxoid-komp ~/test $ touch Д andryuhan@Linuxoid-komp ~/test $ ls [А-Я] А б в г д Д е ж Р я andryuhan@Linuxoid-komp ~/test $ ls [а-я] а А б в г д Д е ж Р я andryuhan@Linuxoid-komp ~/test $ ls [a-z] d j k l t andryuhan@Linuxoid-komp ~/test $ ls [a-Z] d j k l t andryuhan@Linuxoid-komp ~/test $ ls [A-Z] d j k l t andryuhan@Linuxoid-komp ~/test $ touch F andryuhan@Linuxoid-komp ~/test $ touch K andryuhan@Linuxoid-komp ~/test $ touch L andryuhan@Linuxoid-komp ~/test $ ls [a-z] d F j k K l L t andryuhan@Linuxoid-komp ~/test $ ls [a-Z] d F j k K l L t andryuhan@Linuxoid-komp ~/test $ ls [A-Z] d F j k K l L t andryuhan@Linuxoid-komp ~/test $ ls 0 5 d j K lж lжршщ А вапфыва д ж фыва щж 1 6 F jж l lжfgж t б вапфывавапвап Д ож фыва4апв5 я 2 9 iж k L lжррр а в г е Р фыва4апв544 andryuhan@Linuxoid-komp ~/test $ touch .з andryuhan@Linuxoid-komp ~/test $ ls -a . 1 6 F jж l lжfgж t б вапфывавапвап Д .з фыва щж .. 2 9 iж k L lжррр а в г е ож фыва4апв5 я 0 5 d j K lж lжршщ А вапфыва д ж Р фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls * 0 5 d j K lж lжршщ А вапфыва д ж фыва щж 1 6 F jж l lжfgж t б вапфывавапвап Д ож фыва4апв5 я 2 9 iж k L lжррр а в г е Р фыва4апв544 andryuhan@Linuxoid-komp ~/test $ mkdir tt andryuhan@Linuxoid-komp ~/test $ ls 0 5 d j K lж lжршщ а в г е Р фыва4апв544 1 6 F jж l lжfgж t А вапфыва д ж фыва щж 2 9 iж k L lжррр tt б вапфывавапвап Д ож фыва4апв5 я andryuhan@Linuxoid-komp ~/test $ cd tt andryuhan@Linuxoid-komp ~/test/tt $ touch .зз andryuhan@Linuxoid-komp ~/test/tt $ ls .* # Такая команда найдет все в текущей и в директории выше .зз .: ..: 0 5 d j K lж lжршщ а в г е Р фыва4апв544 1 6 F jж l lжfgж t А вапфыва д ж фыва щж 2 9 iж k L lжррр tt б вапфывавапвап Д ож фыва4апв5 я andryuhan@Linuxoid-komp ~/test/tt $ cd .. andryuhan@Linuxoid-komp ~/test $ ls фыва????? фыва4апв5 andryuhan@Linuxoid-komp ~/test $ ls фыва??????? фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls фыва???????? ls: невозможно получить доступ к 'фыва????????': Нет такого файла или каталога andryuhan@Linuxoid-komp ~/test $ ls ?ж iж jж lж ож щж andryuhan@Linuxoid-komp ~/test $ ls ж? ls: невозможно получить доступ к 'ж?': Нет такого файла или каталога andryuhan@Linuxoid-komp ~/test $ ls *[а-я]*[а-я] lжfgж lжррр lжршщ вапфыва вапфывавапвап ож фыва щж andryuhan@Linuxoid-komp ~/test $ ls 0 5 d j K lж lжршщ а в г е Р фыва4апв544 1 6 F jж l lжfgж t А вапфыва д ж фыва щж 2 9 iж k L lжррр tt б вапфывавапвап Д ож фыва4апв5 я andryuhan@Linuxoid-komp ~/test $ ls *[а-я]*[a-z]*[а-я] lжfgж andryuhan@Linuxoid-komp ~/test $ ls *[a-z][а-я]*[а-я] lжfgж lжррр lжршщ andryuhan@Linuxoid-komp ~/test $ ls *[а-я]??? lжfgж lжррр lжршщ вапфыва вапфывавапвап фыва фыва4апв5 фыва4апв544 andryuhan@Linuxoid-komp ~/test $ ls *[а-яяввпр] iж lж lжррр а б вапфыва г Д ж Р щж jж lжfgж lжршщ А в вапфывавапвап д е ож фыва я andryuhan@Linuxoid-komp ~/test $ ls *[а-яввпр] iж lж lжррр а б вапфыва г Д ж Р щж jж lжfgж lжршщ А в вапфывавапвап д е ож фыва я andryuhan@Linuxoid-komp ~/test $ ls *[а-я][ввыар] lжррр вапфыва фыва andryuhan@Linuxoid-komp ~/test $ ls [а-я]? ож щж andryuhan@Linuxoid-komp ~/test $ ls [a-z]? iж jж lж tt: andryuhan@Linuxoid-komp ~/test $ rm -rf * andryuhan@Linuxoid-komp ~/test $ ls andryuhan@Linuxoid-komp ~/test $ cd .. andryuhan@Linuxoid-komp ~ $ rmdir test rmdir: не удалось удалить 'test': Каталог не пуст andryuhan@Linuxoid-komp ~ $ rm -Rf ./test andryuhan@Linuxoid-komp ~ $ ls test ls: невозможно получить доступ к 'test': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ |
Например, можно сделать так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
andryuhan@Linuxoid-komp ~ $ ls /* /initrd.img /initrd.img.old /vmlinuz /vmlinuz.old /bin: archdetect btrfstune bzip2recover date false hciconfig lesspipe mktemp networkctl ntfsls rbash sh.distrib systemd-inhibit umount zdiff bash btrfs-zero-log bzless dd fgconsole hostname ln more nisdomainname ntfsmove readlink sleep systemd-machine-id-setup uname zegrep btrfs bunzip2 bzmore df fgrep ip loadkeys mount ntfs-3g ntfstruncate red ss systemd-notify uncompress zfgrep btrfs-calc-size busybox cat dir findmnt journalctl login mountpoint ntfs-3g.probe ntfswipe rm static-sh systemd-tmpfiles unicode_start zforce btrfsck bzcat chacl dmesg fsck.btrfs kbd_mode loginctl mt ntfs-3g.secaudit open rmdir stty systemd-tty-ask-password-agent vdir zgrep btrfs-convert bzcmp chgrp dnsdomainname fuser keyctl lowntfs-3g mt-gnu ntfs-3g.usermap openvt rnano su tailf vmmouse_detect zless btrfs-debug-tree bzdiff chmod domainname fusermount kill ls mv ntfscat pidof run-parts sync tar wdctl zmore btrfs-find-root bzegrep chown dumpkeys getfacl kmod lsblk nano ntfscluster ping sed systemctl tempfile which znew btrfs-image bzexe chvt echo grep less lsmod nc ntfscmp ping6 setfacl systemd touch whiptail btrfs-map-logical bzfgrep cp ed gunzip lessecho mkdir nc.openbsd ntfsfallocate plymouth setfont systemd-ask-password true ypdomainname btrfs-select-super bzgrep cpio efibootmgr gzexe lessfile mkfs.btrfs netcat ntfsfix ps setupcon systemd-escape udevadm zcat btrfs-show-super bzip2 dash egrep gzip lesskey mknod netstat ntfsinfo pwd sh systemd-hwdb ulockmgr_server zcmp /boot: abi-4.4.0-53-generic abi-4.8.0-49-generic config-4.8.0-44-generic initrd.img-4.4.0-53-generic initrd.img-4.8.0-49-generic System.map-4.4.0-66-generic System.map-4.8.0-52-generic vmlinuz-4.8.0-46-generic abi-4.4.0-64-generic abi-4.8.0-51-generic config-4.8.0-45-generic initrd.img-4.4.0-64-generic initrd.img-4.8.0-51-generic System.map-4.4.0-67-generic vmlinuz-4.4.0-53-generic vmlinuz-4.8.0-49-generic abi-4.4.0-66-generic abi-4.8.0-52-generic config-4.8.0-46-generic initrd.img-4.4.0-66-generic initrd.img-4.8.0-52-generic System.map-4.8.0-42-generic vmlinuz-4.4.0-64-generic vmlinuz-4.8.0-51-generic abi-4.4.0-67-generic config-4.4.0-53-generic config-4.8.0-49-generic initrd.img-4.4.0-67-generic memtest86+.bin System.map-4.8.0-44-generic vmlinuz-4.4.0-66-generic vmlinuz-4.8.0-52-generic abi-4.8.0-42-generic config-4.4.0-64-generic config-4.8.0-51-generic initrd.img-4.8.0-42-generic memtest86+.elf System.map-4.8.0-45-generic vmlinuz-4.4.0-67-generic abi-4.8.0-44-generic config-4.4.0-66-generic config-4.8.0-52-generic initrd.img-4.8.0-44-generic memtest86+_multiboot.bin System.map-4.8.0-46-generic vmlinuz-4.8.0-42-generic abi-4.8.0-45-generic config-4.4.0-67-generic efi initrd.img-4.8.0-45-generic System.map-4.4.0-53-generic System.map-4.8.0-49-generic vmlinuz-4.8.0-44-generic abi-4.8.0-46-generic config-4.8.0-42-generic grub initrd.img-4.8.0-46-generic System.map-4.4.0-64-generic System.map-4.8.0-51-generic vmlinuz-4.8.0-45-generic /cdrom: /dev: autofs cpu full hpet kvm loop7 network_latency ptmx sda3 sr0 tty12 tty21 tty30 tty4 tty49 tty58 ttyprintk ttyS17 ttyS26 ttyS7 vboxdrvu vcs8 vga_arbiter block cpu_dma_latency fuse hugepages lightnvm loop-control network_throughput ptp0 sdb sr1 tty13 tty22 tty31 tty40 tty5 tty59 ttyS0 ttyS18 ttyS27 ttyS8 vboxnetctl vcsa vhba_ctl bsg cuse hidraw0 hwrng log mapper null pts sdb1 stderr tty14 tty23 tty32 tty41 tty50 tty6 ttyS1 ttyS19 ttyS28 ttyS9 vboxusb vcsa1 vhci btrfs-control disk hidraw1 i2c-0 loop0 mcelog nvidia0 random sg0 stdin tty15 tty24 tty33 tty42 tty51 tty60 ttyS10 ttyS2 ttyS29 uhid vcs vcsa2 vhost-net bus dri hidraw2 i2c-1 loop1 media0 nvidiactl rfkill sg1 stdout tty16 tty25 tty34 tty43 tty52 tty61 ttyS11 ttyS20 ttyS3 uinput vcs1 vcsa3 video0 cdrom dvd hidraw3 i2c-2 loop2 mei0 nvidia-modeset rtc sg2 tty tty17 tty26 tty35 tty44 tty53 tty62 ttyS12 ttyS21 ttyS30 urandom vcs2 vcsa4 zero cdrw dvdrw hidraw4 i2c-3 loop3 mem nvidia-uvm rtc0 sg3 tty0 tty18 tty27 tty36 tty45 tty54 tty63 ttyS13 ttyS22 ttyS31 usb vcs3 vcsa5 char ecryptfs hidraw5 initctl loop4 memory_bandwidth port sda shm tty1 tty19 tty28 tty37 tty46 tty55 tty7 ttyS14 ttyS23 ttyS4 userio vcs4 vcsa6 console fb0 hidraw6 input loop5 mqueue ppp sda1 snapshot tty10 tty2 tty29 tty38 tty47 tty56 tty8 ttyS15 ttyS24 ttyS5 v4l vcs5 vcsa8 core fd hidraw7 kmsg loop6 net psaux sda2 snd tty11 tty20 tty3 tty39 tty48 tty57 tty9 ttyS16 ttyS25 ttyS6 vboxdrv vcs6 vfio /etc: acpi calendar dm gnome-vfs-2.0 init libreoffice modprobe.d os-release qemu-ifup sensors.d tmpfiles.d adduser.conf casper.conf dnsmasq.d GNUstep init.d libvirt modules pam.conf rc0.d services trigger.config.defs adjtime cdemu-client.conf dnsmasq.d-available groff initramfs-tools lintianrc modules-load.d pam.d rc1.d sgml ucf.conf alternatives chatscripts doc-base group inputrc linuxmint mono papersize rc2.d shadow udev anacrontab chromium-browser dpkg group- insserv locale.alias mplayer passwd rc3.d shadow- udisks2 apg.conf cinnamon drirc grub.d insserv.conf locale.gen mtab passwd- rc4.d shells ufw apm ConsoleKit emacs gshadow insserv.conf.d localtime mtools.conf pcmcia rc5.d signond.conf updatedb.conf apparmor console-setup environment gshadow- inxi.conf logcheck mysql perl rc6.d skel update-motd.d apparmor.d cracklib esound gss iproute2 login.defs nanorc php rc.local sound UPower apport cron.d ethertypes gtansrc issue logrotate.conf netscsid.conf pki rcS.d speech-dispatcher upstart-xsessions apt cron.daily ffserver.conf gtk-2.0 issue.net logrotate.d network pm request-key.conf ssh upstream-release at-spi2 cron.hourly firefox gtk-3.0 java-8-openjdk lsb-release NetworkManager pnm2ppa.conf request-key.d ssl usb_modeswitch.conf avahi cron.monthly fonts gufw kbd ltrace.conf networks polkit-1 resolvconf subgid usb_modeswitch.d bash.bashrc crontab fstab hddtemp.db kernel lvm newt ppp resolv.conf subgid- vdpau_wrapper.cfg bash_completion cron.weekly fuse.conf hdparm.conf kernel-img.conf lynx nsswitch.conf prime-discrete rmt subuid vim bash_completion.d cups fwupd.conf host.conf kerneloops.conf machine-id ntp.conf printcap rpc subuid- vtrgb bindresvport.blacklist cupshelpers gai.conf hostname ldap magic obex-data-server profile rsyslog.conf sudoers wgetrc binfmt.d dbus-1 gconf hosts ld.so.cache magic.mime ODBCDataSources profile.d rsyslog.d sudoers.d wildmidi bluetooth debconf.conf gdb hosts.allow ld.so.conf mailcap odbc.ini protocols samba sysctl.conf wodim.conf bonobo-activation debian_version ghostscript hosts.deny ld.so.conf.d mailcap.order odbcinst.ini pulse sane.d sysctl.d wpa_supplicant brlapi.key default gimp hosts.mintnanny.backup legal manpath.config openal purple sasl2 systemd X11 brltty deluser.conf gnashrc hp libao.conf mc openbve python sdlcfg terminfo xdg brltty.conf depmod.d gnashthumbnailrc icedtea-web libaudit.conf mdm opencity python2.7 securetty texmf xml ca-certificates dhcp gnome ifplugd libgda-5.0 menu-methods OpenCL python3 security thermald zsh_command_not_found ca-certificates.conf dictionaries-common gnome-app-install iftab libnl-3 mime.types openvpn python3.5 selinux thunderbird ca-certificates.conf.dpkg-old dkms gnome-chess ImageMagick-6 libpaper.d mke2fs.conf opt qemu-ifdown sensors3.conf timezone /home: andryuhan test /lib: bridge-utils cgmanager crda ebtables hdparm ifupdown klibc-k3La8MUnuzHQ0_kG8hokcGAC0PA.so libdmraid.so.1.0.0.rc16 libhandle.so.1.0.3 lsb modules recovery-mode security sysvinit udev x86_64-linux-gnu brltty cpp cryptsetup firmware i386-linux-gnu init ld-linux.so.2 libhandle.so.1 linux-sound-base modprobe.d nvidia-384 resolvconf systemd terminfo ufw xtables /lib32: ld-2.23.so libBrokenLocale-2.23.so libcidn.so.1 libdl-2.23.so libm.so.6 libnss_compat.so.2 libnss_files.so.2 libnss_nisplus-2.23.so libpthread-2.23.so librt-2.23.so libthread_db.so.1 ld-linux.so.2 libBrokenLocale.so.1 libcrypt-2.23.so libdl.so.2 libnsl-2.23.so libnss_dns-2.23.so libnss_hesiod-2.23.so libnss_nisplus.so.2 libpthread.so.0 librt.so.1 libutil-2.23.so libanl-2.23.so libc-2.23.so libcrypt.so.1 libm-2.23.so libnsl.so.1 libnss_dns.so.2 libnss_hesiod.so.2 libnss_nis.so.2 libresolv-2.23.so libSegFault.so libutil.so.1 libanl.so.1 libcidn-2.23.so libc.so.6 libmemusage.so libnss_compat-2.23.so libnss_files-2.23.so libnss_nis-2.23.so libpcprofile.so libresolv.so.2 libthread_db-1.0.so /lib64: ld-linux-x86-64.so.2 ls: невозможно открыть каталог '/lost+found': Отказано в доступе /media: andryuhan apt /mnt: /opt: wire-desktop /proc: 1 1161 121 13 1563 1836 1939 208 22 237 2475 2596 2679 2793 33 3882 407 44 5 573 6146 6733 74 brcm_monitor0 driver keys modules softirqs version 10 1162 1218 1308 16 1837 1985 209 224 238 2478 26 2696 28 339 3888 4094 445 50 574 6173 676 75 buddyinfo execdomains key-users mounts stat version_signature 1045 117 122 1319 1767 1880 1986 21 225 24 25 2618 27 2826 34 3889 410 45 51 579 6180 68 76 bus fb kmsg mtrr swaps vmallocinfo 11 118 1221 14 1768 1881 2 210 2251 2410 2520 2643 2703 2832 36 39 418 46 519 58 62 6868 8 cgroups filesystems kpagecgroup net sys vmstat 1133 1183 123 15 1781 1898 20 211 2252 2413 2540 2647 2710 2844 366 3937 42 4637 52 59 63 69 856 cmdline fs kpagecount pagetypeinfo sysrq-trigger zoneinfo 1136 1184 124 150 1782 1899 200 212 2257 2414 2550 2657 2711 2856 368 3978 4205 4639 53 60 6368 6929 898 consoles interrupts kpageflags partitions sysvipc 1149 1186 1270 151 18 19 201 213 226 2430 2554 2663 2729 2859 369 40 422 4640 5321 6061 64 6945 899 cpuinfo iomem loadavg sched_debug thread-self 115 1187 1272 1537 1804 1900 202 214 2261 2435 2557 2664 2741 3 37 4007 43 4644 54 6062 65 7 9 crypto ioports locks schedstat timer_list 1151 119 1279 1538 1810 1933 203 215 227 2437 2580 2672 2764 30 3781 4033 433 48 55 6085 66 70 930 devices irq mdstat scsi timer_stats 1158 12 128 1552 1825 1934 206 216 228 2461 2585 2674 2771 31 38 405 436 4819 56 61 67 7000 acpi diskstats kallsyms meminfo self tty 116 120 129 1562 1835 1936 207 217 2334 2474 2591 2675 2785 32 3830 406 437 49 57 6114 6728 727 asound dma kcore misc slabinfo uptime ls: невозможно открыть каталог '/root': Отказано в доступе /run: acpid.pid blkid crond.pid dmeventd-client initctl lock mlocate.daily.lock nvidia-persistenced rsyslogd.pid systemd udev wpa_supplicant acpid.socket cgmanager crond.reboot dmeventd-server initramfs log mount openvpn samba thermald udisks2 xtables.lock agetty.reload console cups ebtables.lock irqbalance.pid lvm network plymouth sendsigs.omit.d tmpfiles.d user alsa ConsoleKit dbus fsck libvirt lvmetad.pid NetworkManager pppconfig shm u-d-c-gpu-0000:01:00.0-0x10de-0x1380 utmp avahi-daemon console-kit-daemon.pid dhclient-wlp5s0.pid gdm_socket libvirtd.pid mdm.pid ntpd.pid resolvconf sudo u-d-c-nvidia-was-loaded uuidd /sbin: acpi_available cryptdisks_start ethtool fsfreeze iptables-restore losetup mii-tool mkswap pam_tally2 reload swapoff vgcfgrestore agetty cryptdisks_stop exfatfsck fstab-decode iptables-save lsmod mkdosfs mntctl parted request-key swapon vgchange alsa cryptsetup exfatlabel fstrim iptunnel lspcmcia mke2fs modinfo partprobe resize2fs switch_root vgck apm_available cryptsetup-reencrypt fatlabel gdisk isosize lvchange mkexfatfs modprobe pccardctl resize_reiserfs sysctl vgconvert badblocks ctrlaltdel fdisk getcap iw lvconvert mkfs mountall pivot_root resolvconf tc vgcreate blkdiscard debugfs findfs getpcaps iwconfig lvcreate mkfs.bfs mount.cifs plipconfig restart telinit vgdisplay blkid debugreiserfs fixparts get-quirk-options iwevent lvdisplay mkfs.cramfs mount.ecryptfs plymouthd rmmod tipc vgexport blockdev depmod fsadm getty iwgetid lvextend mkfs.exfat mount.ecryptfs_private poweroff route tune2fs vgextend brctl dhclient fsck halt iwlist lvm mkfs.ext2 mount.exfat prime-offload rtacct u-d-c-print-pci-ids vgimport bridge dhclient-script fsck.cramfs hdparm iwpriv lvmchange mkfs.ext3 mount.exfat-fuse prime-switch rtmon udevadm vgimportclone brltty dmeventd fsck.exfat hwclock iwspy lvmconf mkfs.ext4 mount.fuse pvchange runlevel umount.ecryptfs vgmerge brltty-setup dmraid fsck.ext2 ifconfig jfs_debugfs lvmconfig mkfs.ext4dev mount.lowntfs-3g pvck runuser umount.ecryptfs_private vgmknodes capsh dmraid-activate fsck.ext3 ifdown jfs_fsck lvmdiskscan mkfs.fat mount.ntfs pvcreate setcap umount.udisks2 vgreduce casper-getty dmsetup fsck.ext4 ifquery jfs_fscklog lvmdump mkfs.hfs mount.ntfs-3g pvdisplay setvtrgb unix_chkpwd vgremove casper-login dosfsck fsck.ext4dev ifup jfs_logdump lvmetad mkfs.hfsplus mount.vboxsf pvmove sfdisk unix_update vgrename casper-new-uuid dosfslabel fsck.fat init jfs_mkfs lvmpolld mkfs.jfs nameif pvremove sgdisk upstart vgs casper-snapshot dumpe2fs fsck.hfs initctl jfs_tune lvmsadc mkfs.minix ntfsclone pvresize shadowconfig upstart-dbus-bridge vgscan casper-stop dumpexfat fsck.hfsplus insmod kbdrate lvmsar mkfs.msdos ntfscp pvs shutdown upstart-event-bridge vgsplit cfdisk e2fsck fsck.jfs installkernel key.dns_resolver lvreduce mkfs.ntfs ntfslabel pvscan slattach upstart-file-bridge wipefs cgdisk e2image fsck.minix ip killall5 lvremove mkfs.reiserfs ntfsresize rarp start upstart-local-bridge wpa_action cgmanager e2label fsck.msdos ip6tables kpartx lvrename mkfs.vfat ntfsundelete raw start-stop-daemon upstart-socket-bridge wpa_cli cgproxy e2undo fsck.nfs ip6tables-restore ldconfig lvresize mkfs.xfs on_ac_power reboot status upstart-udev-bridge wpa_supplicant chcpu ebtables fsck.reiserfs ip6tables-save ldconfig.real lvs mkhomedir_helper pam_extrausers_chkpwd regdbdump stop ureadahead xfs_repair crda ebtables-restore fsck.vfat ipmaddr loadndisdriver lvscan mkntfs pam_extrausers_update reiserfsck sulogin veritysetup xtables-multi create-uvm-dev-node ebtables-save fsck.xfs iptables logsave MAKEDEV mkreiserfs pam_tally reiserfstune swaplabel vgcfgbackup zramctl /srv: dfdf23546 /sys: block bus class dev devices firmware fs hypervisor kernel module power /tmp: flashgot.mwad0hks.default mc-andryuhan qBittorrent.BC2674 qBittorrent.TT2674 qBittorrent.yJ2674 ssh-sMWsJ4QNnrs8 hsperfdata_andryuhan mintUpdate qBittorrent.Hf2674 qBittorrent.wX2674 qBittorrent.ZK2674 systemd-private-169f499e565f4c25a8e07caaf8b2e6a6-colord.service-ShFNMR hsperfdata_mdm orbit-andryuhan qBittorrent.jd2674 qBittorrent.wZ2674 qtsingleapp-qBitto-1809-3e8 systemd-private-169f499e565f4c25a8e07caaf8b2e6a6-rtkit-daemon.service-CjgLDP icedteaplugin-mdm-bine4I pulse-PKdhtXMmr18n qBittorrent.kn2674 qBittorrent.XM2674 qtsingleapp-qBitto-1809-3e8-lockfile yandex-disk-ac17e1dea782d2b82f4249c31f4c22f74fa6417fs /usr: bin games include lib lib32 libexec local sbin share src /var: backups cache games lib local lock log mail opt run spool tmp andryuhan@Linuxoid-komp ~ $ |
Причина такой реакции команда ls в том, что она ищет все файлы, на текущем уровне, уровнем ниже (1 глубина прохода) и уровнем выше (1 глубина прохода), при выполнении с «.*». Причина этому, показана ниже.
1 2 3 |
andryuhan@Linuxoid-komp ~ $ ls / -a . .. bin boot cdrom dev etc home initrd.img initrd.img.old lib lib32 lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var vmlinuz vmlinuz.old andryuhan@Linuxoid-komp ~ $ |
Т.е. две точки не являются полностью скрытыми, они «технические адресации» на определенное место для взаимосвязи между файлами, чтобы таким образом создать пространство, которое мы воспринимаем пространством жесткого диска. Т.к. файлы-директории связаны между собой и обычными файлами, имея данные об адресах начала чтения файлов (вспомните, что в Линуксе все представлено файлами, в том числе то, чего нету на жестком диске, однако в специальных директориях, доступных привычным способом). Линукс собирая всю эту информацию хранит ее в хранилищах размещения файлов в ext и прочих форматах разделов, которое есть на каждом разделе носителя (у каждого раздела формат только один ext, fat, ntfs и т.д.). Т.о. Линукс «знает» о том, где и какие файлы сохранены, а «.» и «..», хранят часть этой информации для облегчения навигации между файлами, т.к. оно стало привычным со временем развития «быстродействия» и объема памяти, так что первая хранит адрес размещения текущей директории, а вторая директории уровнем выше. Аналогично будет у директории выше, по саму корневую директорию, которая в своем пространстве будет ссылаться в обоих случаях на себя. Т.о. создается простая навигация без необходимости, каждый раз «дергать» ОС по простым запросам в хранилище размещения. Поэтому, когда вы заходите в определенное пространство директории и применяете шаблон списка имен «*», то он применяет все что доступно без «.» в начале, при этом берет все из «.», т.е. текущей директории. Т.к. на практике Линукс оперирует полным именем файла, т.е. всегда идет «./*», а для применителя доступны сокращения в виде «./» (текущая директория), «../» (уровнем выше), «/» (корневая). Однако, когда ставится «./.*», или «../.*», или «/.*», то формируется список имен начиная с указанного места, включая все файлы в том числе «.», «..», в том числе скрытые.
После такого пояснения, посмотрев на пример выше не сложно понять, пример еще выше, т.к. становится понятным, что Баш сам запускает команду ls с уже набранным списком имен файлов, которые требуется отобразить. А, пример ниже, показывает как Баш пишет и запускает сам команду ls, только в этом случае все имена файлов перечислены вручную, вывод аналогичен предыдущему аналогичному примеру.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
andryuhan@Linuxoid-komp / $ ls /bin /boot /cdrom /dev /etc /home /initrd.img /initrd.img.old /lib /lib32 /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old /initrd.img /initrd.img.old /vmlinuz /vmlinuz.old /bin: archdetect chmod hciconfig mv rbash tar bash chown hostname nano readlink tempfile btrfs chvt ip nc red touch btrfs-calc-size cp journalctl nc.openbsd rm true btrfsck cpio kbd_mode netcat rmdir udevadm btrfs-convert dash keyctl netstat rnano ulockmgr_server btrfs-debug-tree date kill networkctl run-parts umount btrfs-find-root dd kmod nisdomainname sed uname btrfs-image df less ntfs-3g setfacl uncompress btrfs-map-logical dir lessecho ntfs-3g.probe setfont unicode_start btrfs-select-super dmesg lessfile ntfs-3g.secaudit setupcon vdir btrfs-show-super dnsdomainname lesskey ntfs-3g.usermap sh vmmouse_detect btrfstune domainname lesspipe ntfscat sh.distrib wdctl btrfs-zero-log dumpkeys ln ntfscluster sleep which bunzip2 echo loadkeys ntfscmp ss whiptail busybox ed login ntfsfallocate static-sh ypdomainname bzcat efibootmgr loginctl ntfsfix stty zcat bzcmp egrep lowntfs-3g ntfsinfo su zcmp bzdiff false ls ntfsls sync zdiff bzegrep fgconsole lsblk ntfsmove systemctl zegrep bzexe fgrep lsmod ntfstruncate systemd zfgrep bzfgrep findmnt mkdir ntfswipe systemd-ask-password zforce bzgrep fsck.btrfs mkfs.btrfs open systemd-escape zgrep bzip2 fuser mknod openvt systemd-hwdb zless bzip2recover fusermount mktemp pidof systemd-inhibit zmore bzless getfacl more ping systemd-machine-id-setup znew bzmore grep mount ping6 systemd-notify cat gunzip mountpoint plymouth systemd-tmpfiles chacl gzexe mt ps systemd-tty-ask-password-agent chgrp gzip mt-gnu pwd tailf /boot: abi-4.4.0-53-generic config-4.8.0-42-generic initrd.img-4.8.0-45-generic System.map-4.8.0-46-generic abi-4.4.0-64-generic config-4.8.0-44-generic initrd.img-4.8.0-46-generic System.map-4.8.0-49-generic abi-4.4.0-66-generic config-4.8.0-45-generic initrd.img-4.8.0-49-generic System.map-4.8.0-51-generic abi-4.4.0-67-generic config-4.8.0-46-generic initrd.img-4.8.0-51-generic System.map-4.8.0-52-generic abi-4.8.0-42-generic config-4.8.0-49-generic initrd.img-4.8.0-52-generic vmlinuz-4.4.0-53-generic abi-4.8.0-44-generic config-4.8.0-51-generic memtest86+.bin vmlinuz-4.4.0-64-generic abi-4.8.0-45-generic config-4.8.0-52-generic memtest86+.elf vmlinuz-4.4.0-66-generic abi-4.8.0-46-generic efi memtest86+_multiboot.bin vmlinuz-4.4.0-67-generic abi-4.8.0-49-generic grub System.map-4.4.0-53-generic vmlinuz-4.8.0-42-generic abi-4.8.0-51-generic initrd.img-4.4.0-53-generic System.map-4.4.0-64-generic vmlinuz-4.8.0-44-generic abi-4.8.0-52-generic initrd.img-4.4.0-64-generic System.map-4.4.0-66-generic vmlinuz-4.8.0-45-generic config-4.4.0-53-generic initrd.img-4.4.0-66-generic System.map-4.4.0-67-generic vmlinuz-4.8.0-46-generic config-4.4.0-64-generic initrd.img-4.4.0-67-generic System.map-4.8.0-42-generic vmlinuz-4.8.0-49-generic config-4.4.0-66-generic initrd.img-4.8.0-42-generic System.map-4.8.0-44-generic vmlinuz-4.8.0-51-generic config-4.4.0-67-generic initrd.img-4.8.0-44-generic System.map-4.8.0-45-generic vmlinuz-4.8.0-52-generic /cdrom: /dev: autofs hidraw1 loop3 psaux stderr tty26 tty47 ttyS0 ttyS3 vcs4 block hidraw2 loop4 ptmx stdin tty27 tty48 ttyS1 ttyS30 vcs5 bsg hidraw3 loop5 ptp0 stdout tty28 tty49 ttyS10 ttyS31 vcs6 btrfs-control hidraw4 loop6 pts tty tty29 tty5 ttyS11 ttyS4 vcs8 bus hidraw5 loop7 random tty0 tty3 tty50 ttyS12 ttyS5 vcsa cdrom hidraw6 loop-control rfkill tty1 tty30 tty51 ttyS13 ttyS6 vcsa1 cdrw hidraw7 mapper rtc tty10 tty31 tty52 ttyS14 ttyS7 vcsa2 char hpet mcelog rtc0 tty11 tty32 tty53 ttyS15 ttyS8 vcsa3 console hugepages media0 sda tty12 tty33 tty54 ttyS16 ttyS9 vcsa4 core hwrng mei0 sda1 tty13 tty34 tty55 ttyS17 uhid vcsa5 cpu i2c-0 mem sda2 tty14 tty35 tty56 ttyS18 uinput vcsa6 cpu_dma_latency i2c-1 memory_bandwidth sda3 tty15 tty36 tty57 ttyS19 urandom vcsa8 cuse i2c-2 mqueue sdb tty16 tty37 tty58 ttyS2 usb vfio disk i2c-3 net sdb1 tty17 tty38 tty59 ttyS20 userio vga_arbiter dri initctl network_latency sg0 tty18 tty39 tty6 ttyS21 v4l vhba_ctl dvd input network_throughput sg1 tty19 tty4 tty60 ttyS22 vboxdrv vhci dvdrw kmsg null sg2 tty2 tty40 tty61 ttyS23 vboxdrvu vhost-net ecryptfs kvm nvidia0 sg3 tty20 tty41 tty62 ttyS24 vboxnetctl video0 fb0 lightnvm nvidiactl shm tty21 tty42 tty63 ttyS25 vboxusb zero fd log nvidia-modeset snapshot tty22 tty43 tty7 ttyS26 vcs full loop0 nvidia-uvm snd tty23 tty44 tty8 ttyS27 vcs1 fuse loop1 port sr0 tty24 tty45 tty9 ttyS28 vcs2 hidraw0 loop2 ppp sr1 tty25 tty46 ttyprintk ttyS29 vcs3 /etc: acpi drirc issue.net ntp.conf sasl2 adduser.conf emacs java-8-openjdk obex-data-server sdlcfg adjtime environment kbd ODBCDataSources securetty alternatives esound kernel odbc.ini security anacrontab ethertypes kernel-img.conf odbcinst.ini selinux apg.conf ffserver.conf kerneloops.conf openal sensors3.conf apm firefox ldap openbve sensors.d apparmor fonts ld.so.cache opencity services apparmor.d fstab ld.so.conf OpenCL sgml apport fuse.conf ld.so.conf.d openvpn shadow apt fwupd.conf legal opt shadow- at-spi2 gai.conf libao.conf os-release shells avahi gconf libaudit.conf pam.conf signond.conf bash.bashrc gdb libgda-5.0 pam.d skel bash_completion ghostscript libnl-3 papersize sound bash_completion.d gimp libpaper.d passwd speech-dispatcher bindresvport.blacklist gnashrc libreoffice passwd- ssh binfmt.d gnashthumbnailrc libvirt pcmcia ssl bluetooth gnome lintianrc perl subgid bonobo-activation gnome-app-install linuxmint php subgid- brlapi.key gnome-chess locale.alias pki subuid brltty gnome-vfs-2.0 locale.gen pm subuid- brltty.conf GNUstep localtime pnm2ppa.conf sudoers ca-certificates groff logcheck polkit-1 sudoers.d ca-certificates.conf group login.defs ppp sysctl.conf ca-certificates.conf.dpkg-old group- logrotate.conf prime-discrete sysctl.d calendar grub.d logrotate.d printcap systemd casper.conf gshadow lsb-release profile terminfo cdemu-client.conf gshadow- ltrace.conf profile.d texmf chatscripts gss lvm protocols thermald chromium-browser gtansrc lynx pulse thunderbird cinnamon gtk-2.0 machine-id purple timezone ConsoleKit gtk-3.0 magic python tmpfiles.d console-setup gufw magic.mime python2.7 trigger.config.defs cracklib hddtemp.db mailcap python3 ucf.conf cron.d hdparm.conf mailcap.order python3.5 udev cron.daily host.conf manpath.config qemu-ifdown udisks2 cron.hourly hostname mc qemu-ifup ufw cron.monthly hosts mdm rc0.d updatedb.conf crontab hosts.allow menu-methods rc1.d update-motd.d cron.weekly hosts.deny mime.types rc2.d UPower cups hosts.mintnanny.backup mke2fs.conf rc3.d upstart-xsessions cupshelpers hp modprobe.d rc4.d upstream-release dbus-1 icedtea-web modules rc5.d usb_modeswitch.conf debconf.conf ifplugd modules-load.d rc6.d usb_modeswitch.d debian_version iftab mono rc.local vdpau_wrapper.cfg default ImageMagick-6 mplayer rcS.d vim deluser.conf init mtab request-key.conf vtrgb depmod.d init.d mtools.conf request-key.d wgetrc dhcp initramfs-tools mysql resolvconf wildmidi dictionaries-common inputrc nanorc resolv.conf wodim.conf dkms insserv netscsid.conf rmt wpa_supplicant dm insserv.conf network rpc X11 dnsmasq.d insserv.conf.d NetworkManager rsyslog.conf xdg dnsmasq.d-available inxi.conf networks rsyslog.d xml doc-base iproute2 newt samba zsh_command_not_found dpkg issue nsswitch.conf sane.d /home: andryuhan test /lib: bridge-utils ebtables klibc-k3La8MUnuzHQ0_kG8hokcGAC0PA.so lsb security x86_64-linux-gnu brltty firmware ld-linux.so.2 modprobe.d systemd xtables cgmanager hdparm libdmraid.so.1.0.0.rc16 modules sysvinit cpp i386-linux-gnu libhandle.so.1 nvidia-384 terminfo crda ifupdown libhandle.so.1.0.3 recovery-mode udev cryptsetup init linux-sound-base resolvconf ufw /lib32: ld-2.23.so libcrypt-2.23.so libnsl.so.1 libnss_nis-2.23.so librt-2.23.so ld-linux.so.2 libcrypt.so.1 libnss_compat-2.23.so libnss_nisplus-2.23.so librt.so.1 libanl-2.23.so libc.so.6 libnss_compat.so.2 libnss_nisplus.so.2 libSegFault.so libanl.so.1 libdl-2.23.so libnss_dns-2.23.so libnss_nis.so.2 libthread_db-1.0.so libBrokenLocale-2.23.so libdl.so.2 libnss_dns.so.2 libpcprofile.so libthread_db.so.1 libBrokenLocale.so.1 libm-2.23.so libnss_files-2.23.so libpthread-2.23.so libutil-2.23.so libc-2.23.so libmemusage.so libnss_files.so.2 libpthread.so.0 libutil.so.1 libcidn-2.23.so libm.so.6 libnss_hesiod-2.23.so libresolv-2.23.so libcidn.so.1 libnsl-2.23.so libnss_hesiod.so.2 libresolv.so.2 /lib64: ld-linux-x86-64.so.2 ls: невозможно открыть каталог '/lost+found': Отказано в доступе /media: andryuhan apt /mnt: /opt: wire-desktop /proc: 1 1218 1768 20 2257 2557 2764 38 437 573 6868 898 iomem schedstat 10 122 1781 200 226 2580 2771 3830 44 574 69 899 ioports scsi 1045 1221 1782 201 2261 2585 2785 3882 445 579 6929 9 irq self 11 123 18 202 227 2591 2793 3888 45 58 7 930 kallsyms slabinfo 1133 124 1804 203 228 2596 28 3889 46 59 70 acpi kcore softirqs 1136 1270 1810 206 2334 26 2826 39 4637 60 727 asound keys stat 1149 1272 1825 207 238 2618 2832 3937 4639 6061 7282 brcm_monitor0 key-users swaps 115 1279 1835 208 24 2643 2844 3978 4640 6062 74 buddyinfo kmsg sys 1151 128 1836 209 2410 2647 2856 40 4644 61 75 bus kpagecgroup sysrq-trigger 1158 13 1837 21 2413 2657 2859 4007 48 6114 7550 cgroups kpagecount sysvipc 116 1308 1880 210 2414 2663 3 4033 4819 6146 76 cmdline kpageflags thread-self 1161 1319 1881 211 2430 2664 30 405 49 6180 7650 consoles loadavg timer_list 1162 14 1898 212 2435 2672 31 406 5 62 7655 cpuinfo locks timer_stats 117 15 1899 213 2437 2674 32 407 50 63 7659 crypto mdstat tty 118 150 19 214 2461 2675 33 4094 51 6368 7661 devices meminfo uptime 1183 151 1900 215 2474 2679 339 410 519 64 7663 diskstats misc version 1184 1537 1933 216 2475 2696 34 418 52 65 8 dma modules version_signature 1186 1538 1934 217 2478 27 36 42 53 66 8008 driver mounts vmallocinfo 1187 1552 1936 22 25 2703 366 4205 5321 67 8204 execdomains mtrr vmstat 119 1562 1939 224 2520 2710 368 422 54 6728 8217 fb net zoneinfo 12 1563 1985 225 2540 2711 369 43 55 6733 8249 filesystems pagetypeinfo 120 16 1986 2251 2550 2729 37 433 56 676 8320 fs partitions 121 1767 2 2252 2554 2741 3781 436 57 68 856 interrupts sched_debug ls: невозможно открыть каталог '/root': Отказано в доступе /run: acpid.pid dmeventd-client mlocate.daily.lock systemd acpid.socket dmeventd-server mount thermald agetty.reload ebtables.lock network tmpfiles.d alsa fsck NetworkManager u-d-c-gpu-0000:01:00.0-0x10de-0x1380 avahi-daemon gdm_socket ntpd.pid u-d-c-nvidia-was-loaded blkid initctl nvidia-persistenced udev cgmanager initramfs openvpn udisks2 console irqbalance.pid plymouth user ConsoleKit libvirt pppconfig utmp console-kit-daemon.pid libvirtd.pid resolvconf uuidd crond.pid lock rsyslogd.pid wpa_supplicant crond.reboot log samba xtables.lock cups lvm sendsigs.omit.d dbus lvmetad.pid shm dhclient-wlp5s0.pid mdm.pid sudo /sbin: acpi_available fsck.exfat kpartx mount.cifs sgdisk agetty fsck.ext2 ldconfig mount.ecryptfs shadowconfig alsa fsck.ext3 ldconfig.real mount.ecryptfs_private shutdown apm_available fsck.ext4 loadndisdriver mount.exfat slattach badblocks fsck.ext4dev logsave mount.exfat-fuse start blkdiscard fsck.fat losetup mount.fuse start-stop-daemon blkid fsck.hfs lsmod mount.lowntfs-3g status blockdev fsck.hfsplus lspcmcia mount.ntfs stop brctl fsck.jfs lvchange mount.ntfs-3g sulogin bridge fsck.minix lvconvert mount.vboxsf swaplabel brltty fsck.msdos lvcreate nameif swapoff brltty-setup fsck.nfs lvdisplay ntfsclone swapon capsh fsck.reiserfs lvextend ntfscp switch_root casper-getty fsck.vfat lvm ntfslabel sysctl casper-login fsck.xfs lvmchange ntfsresize tc casper-new-uuid fsfreeze lvmconf ntfsundelete telinit casper-snapshot fstab-decode lvmconfig on_ac_power tipc casper-stop fstrim lvmdiskscan pam_extrausers_chkpwd tune2fs cfdisk gdisk lvmdump pam_extrausers_update u-d-c-print-pci-ids cgdisk getcap lvmetad pam_tally udevadm cgmanager getpcaps lvmpolld pam_tally2 umount.ecryptfs cgproxy get-quirk-options lvmsadc parted umount.ecryptfs_private chcpu getty lvmsar partprobe umount.udisks2 crda halt lvreduce pccardctl unix_chkpwd create-uvm-dev-node hdparm lvremove pivot_root unix_update cryptdisks_start hwclock lvrename plipconfig upstart cryptdisks_stop ifconfig lvresize plymouthd upstart-dbus-bridge cryptsetup ifdown lvs poweroff upstart-event-bridge cryptsetup-reencrypt ifquery lvscan prime-offload upstart-file-bridge ctrlaltdel ifup MAKEDEV prime-switch upstart-local-bridge debugfs init mii-tool pvchange upstart-socket-bridge debugreiserfs initctl mkdosfs pvck upstart-udev-bridge depmod insmod mke2fs pvcreate ureadahead dhclient installkernel mkexfatfs pvdisplay veritysetup dhclient-script ip mkfs pvmove vgcfgbackup dmeventd ip6tables mkfs.bfs pvremove vgcfgrestore dmraid ip6tables-restore mkfs.cramfs pvresize vgchange dmraid-activate ip6tables-save mkfs.exfat pvs vgck dmsetup ipmaddr mkfs.ext2 pvscan vgconvert dosfsck iptables mkfs.ext3 rarp vgcreate dosfslabel iptables-restore mkfs.ext4 raw vgdisplay dumpe2fs iptables-save mkfs.ext4dev reboot vgexport dumpexfat iptunnel mkfs.fat regdbdump vgextend e2fsck isosize mkfs.hfs reiserfsck vgimport e2image iw mkfs.hfsplus reiserfstune vgimportclone e2label iwconfig mkfs.jfs reload vgmerge e2undo iwevent mkfs.minix request-key vgmknodes ebtables iwgetid mkfs.msdos resize2fs vgreduce ebtables-restore iwlist mkfs.ntfs resize_reiserfs vgremove ebtables-save iwpriv mkfs.reiserfs resolvconf vgrename ethtool iwspy mkfs.vfat restart vgs exfatfsck jfs_debugfs mkfs.xfs rmmod vgscan exfatlabel jfs_fsck mkhomedir_helper route vgsplit fatlabel jfs_fscklog mkntfs rtacct wipefs fdisk jfs_logdump mkreiserfs rtmon wpa_action findfs jfs_mkfs mkswap runlevel wpa_cli fixparts jfs_tune mntctl runuser wpa_supplicant fsadm kbdrate modinfo setcap xfs_repair fsck key.dns_resolver modprobe setvtrgb xtables-multi fsck.cramfs killall5 mountall sfdisk zramctl /srv: dfdf23546 /sys: block bus class dev devices firmware fs hypervisor kernel module power /tmp: flashgot.mwad0hks.default qBittorrent.TT2674 hsperfdata_andryuhan qBittorrent.wX2674 hsperfdata_mdm qBittorrent.wZ2674 icedteaplugin-mdm-bine4I qBittorrent.XM2674 mc-andryuhan qBittorrent.yJ2674 mintUpdate qBittorrent.ZK2674 orbit-andryuhan qtsingleapp-qBitto-1809-3e8 pulse-PKdhtXMmr18n qtsingleapp-qBitto-1809-3e8-lockfile qBittorrent.BC2674 ssh-sMWsJ4QNnrs8 qBittorrent.Hf2674 systemd-private-169f499e565f4c25a8e07caaf8b2e6a6-colord.service-ShFNMR qBittorrent.jd2674 systemd-private-169f499e565f4c25a8e07caaf8b2e6a6-rtkit-daemon.service-CjgLDP qBittorrent.kn2674 yandex-disk-ac17e1dea782d2b82f4249c31f4c22f74fa6417fs /usr: bin games include lib lib32 libexec local sbin share src /var: backups cache games lib local lock log mail opt run spool tmp andryuhan@Linuxoid-komp / $ |
Также вы можете сделать запуск всех скриптов в текущей директории, запустив.
1 |
./*.sh |
Или выполнить открытие всех файлов, в текущей директории, с расширением pdf через просмоторщик.
1 |
xreader *.pdf |
Или выполнить открытие всех файлов, в текущей директории, с расширение png в Gimp.
1 |
gimp *.png *.PNG |
1 |
xed *.txt |
В этом случае, будет происходить открытие всех файлов с расширение «png» и «PNG». Если не будет файлов с расширением «PNG», то вам попросту будет дано маленькое диалоговое сообщение о том, что такого файла не существует, однако это не закроет программу, что является нормальной реакцией программы, которая принимает запуск программы с открытие файла на момент своего запуска. Учитывая при этом, что программа GIMP является графическим редактором, которая способна принимать сразу несколько файлов для открытия, то результат ее реакции нормален сам по себе — открывается несколько окошек с картинками, без открытия всех окон с равным кол-вом раз. Однако, программа xreader открывает их в отдельных окнах в виду простоты свое реализации. Аналогично, простой текстовый редактор xed откроет требуемое кол-во вкладок соизмеримое кол-во имен файлов в полученном списке. Однако, несмотря на все эти удобства, есть свое не удобство в работе с программами не применяющими возможности командной строки Линукс, например программа djview не будет ничего открывать, сославшись на неправильный аргумент, т.к. она ориентирована больше на ГИП, поэтому в проводнике можно открыть несколько документов ее формата через контекстное меню при щелчке правой кнопкой по одному из выделенных файлов и выборе запуска данной программы или «открыть с помощью», что является всем знакомым инструментом ГИП. Так что, если у вас есть неудобства от подобного подхода, однако такой подход через командную строку востребован, то ищите программы с такими возможностями. Те, кто с таким сталкивался, поймут автора данной статьи, т.к. такие возможности, абы просто так, не создаются.
Так что, таким не сложным способом можно не набирать целый список имен файлов, задав его через простой шаблон, возможности которого хватает для большинства потребностей в таких инструментах. Однако, не стоит этого ожидать от программ не ориентированных на такой подход.
Подстановка результатов выполнения команды в качестве аргумента другой команды.
Подстановка команд чаще всего применяется в сценариях (скриптах), однако не смотря на это она может быть практична для вас в обычном применении. Так что поясню ее вкратце, т.к. когда дело дойдет до сценариев, тогда стоит ее проявить, а пока что, достаточно малого. Поэтому, от себя скажу то, что команда выполняется в дополнительном процессе, связанным с текущим Баш, который применяется для выполнения такой, составной, команды, а результат возвращается в место текущей, выполняемой команды, где была указана подстановка, чтобы после продолжить дальнейшую обработку аргументов текущей команды и выполнить саму текущую команду в конечном итоге. Это, все, что можно сказать в общем и целом об этой возможности в командной строке Линукс в Баш. А теперь, рассмотрим, как это делается на общем виде и примерах, чтобы вам была понятна в общем и целом суть и смысл данной возможности.
Подстановка, в общем и целом, делается таким способом.
1 2 3 4 5 |
команда $(команда) или команда `команда` |
Второй способ подстановки, чаще всего не рекомендуют применять из-за засилья кавычек в командной строке, чтобы вы их не путали с другими, однако вы их можете применять, когда они вам подходят и не мешают (символ таких кавычек находиться на клавише с тильдой «~»).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
andryuhan@Linuxoid-komp ~ $ mkdir test andryuhan@Linuxoid-komp ~ $ cd test andryuhan@Linuxoid-komp ~/test $ touch t andryuhan@Linuxoid-komp ~/test $ echo mkdir tt; > t andryuhan@Linuxoid-komp ~/test $ echo cd tt; >> t andryuhan@Linuxoid-komp ~/test $ echo touch t2; >> t andryuhan@Linuxoid-komp ~/test $ echo ls; >> t andryuhan@Linuxoid-komp ~/test $ echo cd .. >> t andryuhan@Linuxoid-komp ~/test $ cat t mkdir tt; cd tt; touch t2; ls; cd .. andryuhan@Linuxoid-komp ~/test $ ls t andryuhan@Linuxoid-komp ~/test $ echo 'ls' ls andryuhan@Linuxoid-komp ~/test $ echo `ls` t andryuhan@Linuxoid-komp ~/test $ echo `$(ls)` t: команда не найдена andryuhan@Linuxoid-komp ~/test $ echo `$(cat t)` mkdir: невозможно создать каталог «..»: Файл существует mkdir: невозможно создать каталог «cd»: Файл существует mkdir: невозможно создать каталог «..»: Файл существует andryuhan@Linuxoid-komp ~/test $ |
Однако, несмотря на такие рекомендации, всегда практично применение обоих вариантов для конструкций своих команд. В основном это все применяется в сценариях.
Я бы показал, вам, несколько интересных моментов, однако оставим их для статей уровня Линуксоид-Любитель. А пока что, запомните для себя то, что подстановка результатов выполнения одной команды (в том числе сложной), в качестве входного аргумента делается вышеобозначенными способами, которые чаще всего применяются оба.
Также соглашусь с тем, что можно подать выход одной команды на вход другой (о чем в следующих статьях), однако всегда есть момент, когда нужно передать результат одной команды (выход команды) в качестве аргумента, наравне с другими аргументами, которые будут также переданы команде. Так что, всему свое место.
Выполнение нескольких команд одной строкой.
Бывают моменты, когда требуется запустить несколько команд, которые не зависят друг от друга или это не имеет значения, однако не хочется или не удобно делать это несколькими запусками. В таких случаях применяют символ разграничения команд между командами.
1 |
<имя команды1>; <имя команды2>; <имя команды3>; |
Для наглядности, посмотрите на этот пример.
1 2 3 4 5 6 |
andryuhan@Linuxoid-komp ~ $ mkdir test; cd test; touch 1; ls -l; cd ..; rm -rf test итого 0 -rw-r--r-- 1 andryuhan andryuhan 0 ноя 17 06:50 1 andryuhan@Linuxoid-komp ~ $ ls test ls: невозможно получить доступ к 'test': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ |
Здесь, было задано несколько команд на исполнение, вне зависимости от результата выполнения предыдущей команды, в виде одной команды. При этом, заметьте, что в конце не обязательно ставить символ разграничения команд.
Выполнение команды после выполнения другой команды без ошибок.
Чаще всего требуются объединения команд, которые обязаны быть выполнены в случае «хорошего выполнения» команды, т.е. без ошибок, что говорит о том, что выполнение следующей команды имеет смысл. Например, для выполнения команды удаления или обновления через консоль в ГИП/ПГИПе.
1 |
<имя команды1> && <имя команды2> && <имя команды3> |
Например.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
andryuhan@Linuxoid-komp ~ $ ls test ls: невозможно получить доступ к 'test': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ ls test && rm test ls: невозможно получить доступ к 'test': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ mkdir test andryuhan@Linuxoid-komp ~ $ ls test && rm test rm: невозможно удалить 'test': Это каталог andryuhan@Linuxoid-komp ~ $ ls test && rmdir test andryuhan@Linuxoid-komp ~ $ ls test && rmdir test ls: невозможно получить доступ к 'test': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ ls test && rm test ls: невозможно получить доступ к 'test': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ |
Выполнение команды после выполнения другой команды с ошибками.
Однако, также бывают ситуации, когда требуется выполнить команду только после получения ошибочного результата выполнения предыдущей команды. Например, когда вам нужно выполнить ряд действий, среди которых требуется создать новую директорию, которая уже может быть, в том числе может оказаться файлом.
1 |
<имя команды1> || <имя команды2> |
Например.
1 2 3 4 5 6 7 8 9 10 |
andryuhan@Linuxoid-komp ~ $ mkdir text andryuhan@Linuxoid-komp ~ $ sudo chmod 222 text andryuhan@Linuxoid-komp ~ $ ls text || echo tttt ls: невозможно открыть каталог 'text': Отказано в доступе tttt andryuhan@Linuxoid-komp ~ $ sudo chmod 777 text andryuhan@Linuxoid-komp ~ $ rmdir text andryuhan@Linuxoid-komp ~ $ ls text ls: невозможно получить доступ к 'text': Нет такого файла или каталога andryuhan@Linuxoid-komp ~ $ |
В примере, видна попытка обращения к директории в плане чтения, т.к. везде в правах доступа стояла только запись и ничего более, поэтому мы получили не нулевое значение команды «ls», что привело ее к состоянию ошибки и невыполнения, что в свою очередь запустила команду «echo».
В заключение.
Понятное дело, что такими примерами мало что покажешь интересного по данным моментам, однако, этого достаточно для ознакомления Начинающему в командной строке. Остальное раскрывается со временем, не только при применении этих объединений команд в одну команду вводимую в одну командную строку, также эти объединения находят применение в сценариях.
В следующей статье, будет такая же краткая информация о каналах ввода/вывода и применение команд-фильтров. А в данной статье, мы с вами, немного ознакомились с применением шаблона имен файлов, а также с различного рода объедиенениями команд в Баше, которые он нам предоставляет.
Спасибо, за внимание, всего доброго.