Gentoo негізін салушыдан Linux-тың негіздері сабақтары. 1-бөлім (4/4): Glob-қойылымдар



Бұл бөлімшеде жолдарды үлгі бойынша қоюға мүмкіндік беретін *, [] және? джокерлері (wild cards) қарастырылады. Сонымен бірге, бірінші бөлім қорытындылады.


Бұл мақала аударма, түпнұсқасы мына жерде орналасқан.


Джокерлерді қолдану


Джокерлермен танысу

Linux-ты күнделікті пайдалану кезінде rm командасын файлдық жүйедегі көптеген объектілерге бірден қолдану қажеттілігі туындайды. Мұндай жағдайларда бүкіл файлдар тізімін аргумент ретінде жазып шығу, өте жалықтыратын іс:

$ rm file1 file2 file3 file4 file5 file6 file7 file8

Мұндай қиындықтарды жеңілдету үшін Linux-тың қолдауына енген джокерлерді пайдалана аласыз. Бұл қолдау басқаша «globbing» деп те аталады (тарихи себептерге байланысты). Ол көптеген файлдарды бір дегеннен көрсетуге мүмкіндік береді. Bash және басқа да Linux командалары орындалу кезінде дисктен үлгіге сәйкес келетін файлдарды қарайды. Мысалы, егер сіздің қазіргі жұмыс папкаңызда file1, file2, ..., file8 файлдары болса, онда оларды келесі түрде жоюға болады:

$ rm file[1-8]

Немесе, егер аты file сөзінен басталатын барлық файлдарды (file атты файлдың өзін де) жойғыңыз келсе, келесідей команда орындай аласыз:

$ rm file*

"*" үлгісі кез-келген символдар қатарына және символдың жоқ болуына сәйкес келеді (ауд. еск. мысалы, «file*» үлгісі «file», «fileAbdnch.txt», «file15dd21c5», «file2» аттарымен сәйкестікке қойыла алады). Әрине, джокерлердің мүмкіндіктері тек файлды жою үшін ғана қолданылмайды, оның басқа да қолданылуларын төменде көреміз.

Сәйкес келмейтін үлгілер

Егер сізге /etc папкасында жатқан «g» әрпінен басталатын және де «g» әрпінің өзінен тұратын файлдар тізімін көру керек болса, команданы былай орындауға болады:

$ ls -d /etc/g*
/etc/gai.conf     /etc/gimp                   /etc/groff   /etc/gshadow
/etc/gconf        /etc/gnome                  /etc/group   /etc/gshadow-
/etc/gdb          /etc/gnome-settings-daemon  /etc/group-  /etc/gtk-2.0
/etc/ghostscript  /etc/gnome-vfs-2.0          /etc/grub.d  /etc/gtk-3.0

Ал енді, біз бірде-бір файлға сәйкес келмейтін үлгіні пайдалансақ не болар екен.Төмендегі мысалда біз /usr/bin папкасындағы «asdf» әріптерімен басталатын және «jkl» әріптеріне аяқталатын объектілер тізімін шығаруға әрекет жасадық:

$ ls -d /usr/bin/asdf*jkl
ls: cannot access /usr/bin/asdf*jkl: No such file or directory

Міне осылай болды. Әдетте, егер біз файлдық жүйедегі бірнеше объектілермен сәйкес келетін үлгіні қолдансақ, bash біздің үлгімізді үлгіге сәйкес келетін барлық объектілер тізімімен ауыстырады. Бірақ, үлгімен сәйкестік болмаса, bash бағдарламаға үлгіні сол күйі өзгертпей береді. Сөйтіп, ls папкада /usr/bin/asdf*jkl деген файлды таба алмай бізге қате туралы жазады. Мұндағы негізгі ереже мынандай: glob-үлгілер тек файлдық жүйедегі файлдармен сәйкестік болса ғана файлдар тізімімен ауыстырылады. Керісінше жағдайда, өзгертілмей қалдырылады және бағдарламаға сол қалпы беріледі.

Джокерлер синтаксисі: * және ?

Сонымен, біз globbing қалай жұмыс істейтінін көрдік, енді джокерлердің синтаксисін қарастырайық. Джокерлер ретінде арнайы символдар қолданылады:

* — нөл немесе одан көп символдар санымен сәйкес келеді. Бұл мынаны білдіреді: «мұнда кез-келген санды символдар болуы мүмкін, сонымен қоса ештеңе де». Мысалдар:
  • /etc/g* g символынан басталатын және g символынан тұратын барлық файлдармен сәйкес келеді;
  • /tmp/my*1 my-дан басталатын және 1-ге аяқталатын /tmp папкасындағы файлдар кіреді, сонымен қоса my1 файлы да

? — кез-келген бір символға сәйкес келеді. Мысалдар:
  • myfile? аты myfile-мен одан кейінгі кез-келген бір символ тұратын файл атымен сәйкес келеді (ауд.еск. — myfile1, myfilea, myfileF, бірақ myfile-нің өзі кірмейді)
  • /tmp/notes?txt мысалы, /tmp/notes.txt және /tmp/notes_txt аттарымен сәйке келеді, әрине, егер олар бар болса

[] джокерін пайдалану

Бұл джокер ?-ға ұқсас, бірақ одан да нақтырақ. Оны қолдану үшін сізге қажет символдар тізімін [] ішіне жазыңыз. Алынған үлгі осы символдардың кез-келген біреуіне сәйкес келетін болады. Сіз "-" символын да пайдалана аласыз, ол арқылы диапазон және диапазондар комбинациясын көрсетуге болады. Мысалдар:
  • myfile[12] myfile1 және myfile2 екі файл атымен сәйкес келеді. Джокер бұл екі файлдың ең болмағанда біреуі папкада болса жұмыс жасайды.
  • [Cc]hange[Ll]og Changelog, ChangeLog, changeLog және changelog файлдармен сәйкес келеді. Байқағаныңыздай, тік жақшалы джокерлерді пайдалану бас әріпті варианттарды көрсеткенде өте ыңғайлы.
  • ls /etc/[0-9]* /etc папкасындағы ондық цифрдан басталатын файлдарды көрсетеді
  • ls /tmp/[A-Za-z]* /tmp папкасындағы үлкен немесе кіші латын әрпінен басталатын файлдарды көрсетеді.

[!] конструкциясы [] конструкциясы секілді жұмыс атқарады, бірақ ол [! және ] арасындағы көрсетілМЕГЕН кез-келген символға сәйкес келеді (яғни, жоқтау). Мысалы:
  • rm myfile[!9] аттары myfile плюс бір символ болатын myfile9 файлынан басқа барлық файлдарды жояды.


Джокерлер туралы ескертпелер

Енді джокерлерді пайдаланған кезде сақ болу үшін бірнеше ескертпелер келтіреміз. bash джокер символдарын (?, [, ] және *) ерекше қабылдағандықтан, бағдарламаға осы символдар құрамында болатын аргументтер жазып жатсақанда, өте сақ болуыңыз қажет. Мысалы: егер сіз "[fo]*" сөзі жазылған файл құрмақшы болсаңыз, онда келесі команда сіз күткен нәтиже бермеуі мүмкін:

$ echo [fo]* > /tmp/mynewfile.txt

Егер "[fo]*" үлгісі папкадағы кез-келген бір файлмен сәйкес келсе сіз /tmp/mynewfile.txt файлының ішінде [fo]* қатарының орнына файлдар тізімін көресіз. Шешім? Шешімдердің бірі сіздің символдарыңызды бірлік тырнақшаға алу болады, ол bash-қа тырнақша ішіндегі джокер символдарымен ештеңе жасамау керектігін айтады:

$ echo '[fo]*' > /tmp/mynewfile.txt

Бұл әдісті қолданған соң, күтілгендей, файлға [fo]* сөзі жазылады. Сонымен бірге, bash-қа [, ] және * әріп ретінде қабылдануы керектігін айту үшін кері слэш символын пайдалануыңызға болады:

$ echo \[fo\]\* > /tmp/mynewfile.txt

Екі тәсіл де (жалғыз тырнақшалар және кері слэш) бірдей нәтиже береді. Тағы айта кететіні, егер сізге \-тің өзін жазу керек болса, оның өзін бірлік жақшаға алуыңызға немесе \\ қолдануыңызға болады.

Ескертпе

Екеулік тырнақша (") да бірлік тырнақша секілді жұмыс жасайды, бірақ, сонда да bash-қа кейбір өңдеулер жасауға мүмкіндік береді. Демек, егер сіз бағдарламаға аргументті сөзбе-сөз бергіңіз келсе бірлік тырнақша өте жақсы таңдау. Джокерлер туралы көбірек мәліметті man 7 glob командасын теру арқылы қарауға болады. Тырнақшалар туралы көбірек мәлімет алғыңыз келсе man 1 bash теріңіз және QUOTING атты бөлімді қараңыз.

Қорытынды


Құттықтаймыз! Сіз Linux негіздерін аяқтадыңыз. Бұл мақалалар сіздің Linux туралы түсініктеріңізді нығайтты деген үміттемін. Осыған дейінгі қарастырылған тақырыптар: bash негіздері, linux негізгі командалары, сілтемелер және джокерлер — біздің келесі linux-ты әкімшілендіру негіздері нұсқаулығымызға ірге қалады. Біз онда пайдаланушылар акаунттарын басқару, қол жетімділік құқықтары, регулярлы үлгілер секілді тақырыптарды қарастырамыз.

  • +1
0 пікір
Тек тіркелген қолданушылар ғана пікір қалдыра алады.