Wednesday, March 07, 2007

Юникс shell-ийн командууд

Юникс орчинд ороход шел дээр ажиллах нь зайлшгүй. Шел дээр ажиллах нь эхлээд залхуутай мэт санагдаж болох ч, энэ нь командууд болон багаж хэрэгслүүдийг хир зөв, үр дүнтэй ашиглаж байгаагаас хамаардаг. Үүний тулд хийж байгаа үйлдлээ хэрхэн илүү хялбар хурдан хийх вэ гэдгийг бодож, интернэтээс туршлага судлаж, шинэ хэрэгсэл, шинэ команд байнга сурч байх хэрэгтэй. Ингээд зарим хэрэг болохуйц командуудыг сийрүүлье.

Ямар шел дээр ажиллаж байгааг харах

# echo $SHELL
/bin/bash

Командын гарын авлагыг унших
# man ls

Програм хаана байрлаж байгааг харах
# whereis cp
cp: /bin/cp /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz

Ажиллаж байгаа директори харах
# pwd
/home/ochiro

Файлын төрлийг харах
# file pauker.pau.gz
pauker.pau.gz: gzip compressed data, from MS-DOS

Файлын эхний 5 мөрийг харах
# head -n 5 ./tomcat/logs/localhost.2007-03-05.log
Mar 5, 2007 4:36:16 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Mar 5, 2007 4:36:16 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Mar 5, 2007 4:36:17 PM org.apache.catalina.core.ApplicationContext log

Файлын сүүлийн 5 мөрийг харах
# tail -n 5 ./tomcat/logs/manager.2007-03-05.log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
Mar 5, 2007 5:15:48 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: restart: Reloading web application at '/testapp'
Mar 5, 2007 5:15:48 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'

Лог файлын сүүлийн мөрүүдийг ажиглах
# tail -f ./tomcat/logs/localhost.2007-03-05.log
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)

Хоёр файлын ялгааг олох
# diff dic.txt dic-new.txt
1a2
> new line

Удаан ажиллах командыг ард ажиллуулах
# bin/backup-files.sh &
[1] 26490

Ард ажиллаж байгаа командуудыг харах
# jobs
[1]+ Stopped bin/backup-files.sh

Ажиллуулсан командуудынхаа түүхийг үзэх
# history
1 echo $SHELL
2 whereis cp
3 pwd
4 file pauker.pau.gz
5 head -n 5 TUTORIAL~
6 cp dic.txt dic-new.txt
7 cat dic.txt
8 vi dic-new.txt
9 diff dic.txt dic-new.txt
....

Файл байхгүй бол үүсгэх
# touch newfile.txt

Дискний сул зайг харах
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 13G 7.6G 4.5G 63% /
udev 506M 152K 506M 1% /dev
/dev/hda3 51G 25G 26G 49% /home
/dev/hdb1 38G 25G 2.2G 92% /mnt/FAT32

Директори доторхи файлуудыг хэмжээгээр нь буурах эрэмбээр жагсаах
# du -sh archive/* | sort -nrk 1
859M archive/nihongo
303M archive/photo
277M archive/lessons
233M archive/install
1.8G archive/books

Бичсэн скриптдээ ажиллах зөвшөөрөл тавих
# chmod u+x scripts/upload.sh

Тооны тооллыг хөрвүүлж харах
# echo 'obase=10; ibase=16; E59' | bc
3673

Олон мөр оролт
#  bc <<> A
> EOF
10

Директорын бүтцийг ганц командаар үүсгэх
# mkdir -p project/{lib/ext,bin,src,doc/{html,txt,pdf},demo/stat/a}

Директорийг архивлах
# tar cvf /tmp/archive.tar archive

Файлыг шахах
# gzip archive.tar

Архивийн файлыг сонгосон директори луу задлах
# tar xvf -C dest/to/extract archive.tar.gz

Эхний команд тэг утга буцаасан тохиолдолд дараагийн команд ажиллана
# cd directory/exists && tar xvf ~/archive.tar

Эхний команд тэг биш утга буцаавал дараагийнх ажиллана
# cd directory/not/exists || mkdir -p directory/not/exists

Директори байхгүй бол үүсгээд архивийг задлана
# cd dest/dir || mkdir -p dest/dir && tar xvf -C dest/dir ~/archive.tar

Урт командыг арагш ташуу зураасаар хуваах
# cd dest/to/extract || \
> mkdir -p est/to/extract && \
> tar xvf -C est/to/extract ~/archive.tar

Зарим командуудыг дэд шелд ажиллуулаад гаралтыг admin руу мэйлдэх
# ( cd dest/to/extract/ || mkdir -p dest/to/extract && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

Зарим командуудыг бүлэглэж ажиллуулаад гаралтыг admin руу мэйлдэх
# { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"

Эхний командаар гарч ирэх жагсаалтууд дээр өөр команд ажиллуулах
# ls -1 | xargs file
bin: directory
desk-books: directory
Desktop: directory
diagrams: directory
dic-new.txt: UTF-8 Unicode text
dic.txt: UTF-8 Unicode text

Файл дотроос текст хайх
# grep implement TUTORIAL.txt
On systems which do not implement suspending, C-z creates a subshell
function which implements the C-p command.

Файл дотроос хайхдаа regular expression ашиглах
# grep ^The TUTORIAL.txt
The characters ">>" at the left margin indicate directions for you to
The first thing that you need to know is how to move around from place
The following commands are useful for viewing screenfuls:
There are several ways you can do this. You can use the arrow keys,
The location of the cursor in the text is also called "point". To
There is a whole series of commands that start with CONTROL-x; many of
.......

wc хэрэглэлгүйгээр файл дотор хайсан текст хэдэн мөрөнд байгааг тоолох
# grep -c ^The TUTORIAL.txt
30

awk ашиглаж багана сонгож харах
# ls -l | awk '{print $3 " " $8 }'

ochiro bin
ochiro desk-books
ochiro Desktop
ochiro diagrams
ochiro dic-new.txt
ochiro dic.txt
........


Сонгосон баганаас хайх
# ls --time-style=locale -l | awk '$6 == "Mar"'
drwxr-xr-x 11 ochiro users 3064 Mar 1 14:34 desk-books
drwxr-xr-x 2 ochiro users 784 Mar 2 09:53 Desktop
-rw-r--r-- 1 ochiro users 13 Mar 7 13:55 dic-new.txt
drwxr-xr-x 5 ochiro users 2664 Mar 6 10:43 downloads
drwxr-xr-x 2 ochiro users 48 Mar 5 13:55 ftpserver
drwxrwxrwx 7 ochiro users 400 Mar 5 18:03 wbt

Файл дотроос текст хайж(cursor) солиод(pointer) шинэ файлд хадгалах
# sed s/cursor/project_name/g TUTORIAL.txt > TUTORIAL_new.txt

Олон файлаас(*.txt) текст хайж(searchtext) солих(replacetext)
# find ./ -name *.txt -type f -exec sed -i 's/searchtext/replacetext/' {} \;

Хамгийн их хэрэглэсэн 10 командаа харах
# history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}' \
> |sort|uniq -c|sort -nr|head -10
125 ls
32 su
32 cd
26 vi
25 sudo
23 cat
19 ping
19 netstat
19 exit
18 ps

Сүүлийн нэг цагийн дотор өөрчөгдсөн файлууд
#  find ~ -mmin -60 \! -type d
/home/ochiro/.thunderbird/Mail/Junk
/home/ochiro/.thunderbird/Mail/Sent
/home/ochiro/.thunderbird/Mail/Inbox.msf
/home/ochiro/.thunderbird/Mail/Drafts
/home/ochiro/.thunderbird/Mail/Inbox
/home/ochiro/.thunderbird/Mail/Junk.msf
/home/ochiro/.thunderbird/Mail/Sent.msf
/home/ochiro/.thunderbird/Mail/Drafts.msf
/home/ochiro/TUTORIAL_new.txt
/home/ochiro/dic.txt


Эх сурвалжууд:

1 comments:

Erdenee said...

Сайхан гарын авлага болжээ. Цаашид ч гэсэн Юникс програмчлалын талаар илүү их зүйл оруулж байхыг хүсэж байна. Баярлалаа. Энэ програмчлалыг сонирхогчид дээрх авлага дээрх нэг командыг хэрхэн ажиллахыг тайлбарлая. Нилээн сүүл хэсэгт байгаа sed 's/cursor/project_name/g' TUTORIAL.txt >TUTORIAL_new.txt
код ингэж бичвэл ажиллаж байна.Тайлбарлавал TUTORIAL.txt файл дотор орших cursor гэсэн үг бүрийг project_name гэсэн нэрээр солиод TUTORIAL_new.txt файл шинээр үүсгэж дотор нь хадгалж байгаа юм.