Gentoo негізін салушыдан Linux-тың негіздері сабақтары. 1-бөлім (2/4):Файлдарды және папкаларды басқару
Бұл бөлімшеде файлдармен және файлдық жүйемен жұмыс жасайтын ls, mkdir, touch, mv, cp секілді командалар қарастырылады. echo және cat қолданылулары келтіріледі. Файлдық жүйедегі инодтар туралы айтып өтіледі.
Бұл мақала аударма, түпнұсқасы мына жерде орналасқан.
Linux командаларын пайдалану
ls командасымен танысу
Енді, ls командасын тез қарастырып өтейік. Linux-пен алдын кездескен болсаңыз, ол қазіргі папканың ішін тізімге шығаратынын білетін болуыңыз керек:
$ cd /usr
$ ls
X11R6 doc i686-pc-linux-gnu lib man sbin ssl
bin gentoo-x86 include libexec portage share tmp
distfiles i686-linux info local portage.old src
-a кілтін көрсету арқылы, сіз толық тізімді көре аласыз. Толық тізім деп отқанымыз жай папкалар мен файлдарға қоса "." белгісінен басталатын жасырын файлдар мен папкалар. Келесі мысалда көретініміздей ls -a "." және ".." секілді арнайы папкаларды да тізімге шығарады:
$ ls -a
. bin gentoo-x86 include libexec portage share tmp
.. distfiles i686-linux info local portage.old src
X11R6 doc i686-pc-linux-gnu lib man sbin ssl
Папканың кеңейтілген тізімі
Сіз ls командасына бір немесе бірнеше папкалар немесе файлдарды көрсете аласыз. Егер сіз тек қана файл көрсетсеңіз, ls сізге тек сол файлды көрсетеді. Ал егер папканы көрсетсеңіз, онда ls папканың ішінің тізімін шығарып береді. Тағы бір пайдалы кілт ол -l. Ол арқылы сіз файлдың иесін, соңғы өзгертілген уақытын, өлшемін және файлдың қол жетімділік құқықтарын көре аласыз.
Келесі мысалда біз -l кілтін менің /usr папкамның ішін көру үшін пайдаландық:
$ ls -l /usr
drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6
drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin
drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles
lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc
drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86
drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux
drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu
drwxr-xr-x 54 root root 5992 Dec 24 22:30 include
lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info
drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib
drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec
drwxr-xr-x 8 root root 240 Dec 22 20:57 local
lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man
lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/
drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old
drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin
drwxr-xr-x 46 root root 1144 Dec 24 15:32 share
drwxr-xr-x 8 root root 328 Dec 26 00:07 src
drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl
lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/tmp
Бірінші баған әрбір элемент үшін қол жетімділік құқықтарын көрсетіп тұр. Кейінірек, мен оларды қалай түсіну қажет екендігін түсіндіремін. Келесі баған файлдық жүйенің әрбір элементіне сілтемелер санын көрсетеді, бұны да төменде айтып өтеміз. Үшінші және төртінші бағандар — сәйкесінше иелер мен топтар тізімдері. Бесінші баған — объект өлшемі. Алтыншы — объекті соңғы рет өзгертілген уақыт (mtime). Және ең соңғысы, объектінің аты. Егер файлдар символдық сілтемелер болса, онда сіз мына "->" түрдегі бағыттауыш пен сілтеме көрсетіп тұрған объектінің жолы көрсетіледі.
Папкаларды қараймыз
Кейде сізге папканың ішін емес, папканың өзін қарау керек болады. Мұндай жағдайда -d кілтін көрсетуге болады. Ол ls командасына кез-келген папканы, ішкі папка ретінде қарастыру керектігін айтады:
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share
drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share
drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr
drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin
drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin
Рекурсиялық және инодтық тізім
Осылай сіз -d кілтін папканы қарау үшін пайдалана аласыз, бірақ сонымен бірге сіз -R кілтін де пайдалана аласыз. Ол -d кілтіне қарама-қарсы әрекет етеді, яғни ол тек папка ішін қарап қоймай, рекурсиялы түрде оның ішіндегі папкалардың ішін де қарап шығады! Біз нұсқаулықта бұл команданы орындамаймыз, өйткені оның шығаратыны өте ауқымды болар еді, бірақ сіз өзіңіз ls -R немесе ls -Rl командаларын орындап көруіңізге болады.
Ақыры, -i кілтіне келіп жеттік. -i кілті файлдық жүйедегі объектілердің инод номерін қарау үшін пайдаланылады:
$ ls -i /usr
1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin
1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share
8316 distfiles 1517 include 776 man 23779 src
43 doc 1386 info 93892 portage 36737 ssl
70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp
Инод түсінігі
Файлдық жүйедегі әрбір объектіге инод номері деп аталатын, қайталанбайтын индекс беріледі. Инодтар түсінігі файлдық жүйедегі көптеген операцияларды түсіну үшін маңызды. Мысалыға, әрбір папкада пайда болатын "." және ".." сілтемелерін қарастырайық. ".." папкасының шын мәнінде не екенін білу үшін біз алдымен, /usr/local папкасының инодын қараймыз:
$ ls -id /usr/local
5120 /usr/local
/usr/local папкасының инод номері 5120. Ал енді /usr/local/bin/.. жолының инодын қарап көрейік:
$ ls -id /usr/local/bin/..
5120 /usr/local/bin/..
Көріп тұрғанымыздай /usr/local/bin/.. және /usr/local папкаларының инод номерлері бірдей. Мұндай таң қаларлық жайтты қалай түсінуге болатындығын қарап көрейік. Біз осыған дейін, /usr/local өзі папка екен деп ойладық. Енді болса, көріп тұрғанымыздай, шынайы папка ол 5120 номерлі инод, және біз осы инодты көрсетіп тұрған екі сілтемені таптық. Бұл инод дискта бір жерде ғана болғанымен, оған көптеген сілтемелер бар болуы мүмкін.
Біз бұл 5120 номерлі инодты көрсетіп тұрған сілтемелер санын қарай аламыз. Ол үшін ls -dl командасын пайдалану керек:
$ ls -dl /usr/local
drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local
Егер екінші бағанға мұқият қарасақ, онда /usr/local (инод 5120) папкасына 8 сілтеме бар екенін көреміз. Менің жүйемде бұл инодқа келесі сілтемелер көрсетіп тұр:
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
mkdir
Енді жаңа папкаларды құруға пайдаланылатын mkdir командасын қарап өтейік. Келесі команда /tmp папкасының ішінде орналасқан tic, tac, toe үш папкасын құрады:
$ cd /tmp
$ mkdir tic tac toe
Үнсіз келісім бойынша mkdir жолдың бастапқы жағында тұрған папкаларды құрмайды; жолда көрсетілген барлық папкалар соңғы жолға дейін (құрылатын папкаға дейін) файлдық жүйеде бар болуы қажет. Яғни, егер сіз бір-бірінің ішінде жататын үш папканы won/der/ful құрғыңыз келсе, сізге mkdir командасын үш бөлек орындауға тура келеді:
$ mkdir won/der/ful
mkdir: cannot create directory `won/der/ful': No such file or directory
$ mkdir won
$ mkdir won/der
$ mkdir won/der/ful
Бірақ mkdir командасында жолдағы файлдық жүйеде жоқ папкаларды құратын -p кілті бар:
$ mkdir -p easy/as/pie
Жалпы өте оңай. mkdir командасы туралы көбірек білгіңіз келсе man mkdir командасын орындаңыз және нұсқаулықты оқып шығыңыз. Бұл біз қарастырған барлық командаларға орынды (мысалы, man ls), тек cd-дан басқа, өйткені ол bash-тың құрамындағы команда.
touch
Енді біз файлдар мен папкаларды көшіруге және олардың орындарын ауыстыруға арналған cp және mv командаларын қарастырамыз. Бірақ біз алдымен touch командасынан бастаймыз. Ол арқылы біз /tmp папкасында файл құра аламыз:
$ cd /tmp
$ touch copyme
touch егер файл бар болса, оның mtime уақытын өзгертеді (ауд. еск. — файл соңғы рет өзгертілген уақыт) (ls -l командасы орындалғандағы алтыншы бағанды естеріңізге түсіріңіздер). Егер файл жоқ болса, онда жаңа бос файл құрылады. Сізде енді /tmp папкасында өлшемі ноль болатын /tmp/copyme файлы жатқан болуы керек.
echo
Енді, файл бар кезде оған бірнеше мәліметтер енгізейік. Оны echo командасының көмегімен істеуге болады. echo берілген аргументтерді стандартты шығаруға басып шығарады. Бірінші, echo командасының өзін көрсетейік:
$ echo "firstfile"
firstfile
Енді тура сол команданы қайта орындаймыз, бірақ шығарылуды файлға бағыттаймыз:
$ echo "firstfile" > copyme
"Үлкендік (>)" белгісі bash-қа echo-ның шығарылуын copyme файлына бағыттау керек екендігін айтады. Егер мұндай атты файл жоқ болса, ол жаңадан құрылады, егер бар болса тазаланып қайтадан жазылады. ls -l командасын орындау арқылы copyme өлшемінің 10 байтқа өскенін көре аламыз. Өйткені енді онда «firstfile» деген сөз жазылған:
$ ls -l copyme
-rw-r--r-- 1 root root 10 Dec 28 14:13 copyme
cat және cp
Файлдың ішіндегілерін терминалға шығару үшін cat командасын пайдаланыңыз:
$ cat copyme
firstfile
Енді біз cp файлын қолданып көре аламыз, copyme файлының copiedme көшірмесін құрайық:
$ cp copyme copiedme
Енді олардың шынымен де әр түрлі файлдар екендігін (сілтеме емес) тексеріп көрейік; олардың инод номерлері әр түрлі болуы керек:
$ ls -i copyme copiedme
648284 copiedme 650704 copyme
mv
Ал енді copiedme файлының атын movedme деп өзгерту үшін mv командасын пайдаланайық. Инод номері дәл сол қалпында қалады; бірақ, сол инодқа көрсетіп тұрған файл аты өзгертіледі.
$ mv copiedme movedme
$ ls -i movedme
648284 movedme
Егер барлық әрекеттер бір ғана файлдық жүйеде жасалып жатса, орын ауыстыратын файлдың инод номері өзгермей сақталып тұрады. Біз файлдық жүйелерді нұсқаулығымыздың үшінші бөлімінде толығырақ қарастырамыз.
mv командасының басқа да мүмкіншіліктерін қарастырып көрейік. Файлдардың атын өзгертуден басқа, mv командасын, бір немесе бірнеше файлдың орынын ауыстыруға да қолдануға болады.Мысалы, /var/tmp/myfile.txt файлын менің жеке /home/drobbins папкама орын ауыстыру үшін, келесі команданы пайдаланамын:
$ mv /var/tmp/myfile.txt /home/drobbins
Осыдан соң myfile.txt файлы /home/drobbins/myfile.txt жаңа орнына ауыстырылады. Егер /home/drobbins папкасы басқа файлдық жүйеде орналасқан болса, онда mv файлды бірінші жаңа файлдық жүйеге көшіріп алады да ескі жүйеден өшіреді. Өзіңіз түсінген боларсыз, біз myfile.txt файлын екі түрлі файлдық жүйе арасында орынын ауыстырсақ, онда жаңа жердегі myfile.txt файлы жаңа инод номерін алады. Бұл әрбір файлдық жүйенің өзінің инодтар номерлерінің тізімі бар екендігімен түсіндіріледі.
mv командасын бірнеше файлды бір папкаға орын ауыстыру үшін де пайдалануға болады. Мысалыға, myfile1.txt және myarticle3.txt файлын /home/drobbins папкасына орын ауыстыру үшін, келесі команданы орындау қажет:
$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins
-
+1