Showing posts with label Linux commands. Show all posts
Showing posts with label Linux commands. Show all posts

HOWTO examining file (Файл хэрхэн шалгах талаар)

Ямар нэгэн файлын мэдээллийг үздэг, хардаг, мэдэж болдог олон арга байдаг, тэднээс өөрийн хэрэглэдэг хэдийг бичий гэж бодож байна.

1. “file” командаар файлын зохиогч болон бусад системийн мэдээллийг нь мэдэж болно.

# file /bin/ls
ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

2. "cat, less, more, grep, ..." командуудаар файлын доторх агуулгыг нь харж, үзэж, судалж болно.
# cat file.lst
# more file.lst
# less file.lst
# grep "" file.lst

Дээрх командууд бол текст файлын доторхийг дэлгэцэн дээр сайхан хэвлэх болно. “cat”, “less” -ээр уншиж болохгүй кодлогдсон, бие дааж гүйцэтгэгддэг файлын агуулгыг үзэж болох ч уншиж болохгүй баахан код хэвлэх болно. “more” команд нь тухайн файлын агуулгыг дэлгэц, дэлгэцээр таслан үзүүлэх, “grep” бол тухайн файл дотроос сонирхож байгаа текст, тэмдэгт байгаа мөрийг хэвлэх, том хэмжээний файлтай ажиллаж байхад “less” команд нь хамгийн хурдан ажиллана, . . . гээд л өөр өөрийн давуу талуудтай.

3. "man" командаар тухайн командын талаарх мэдээллийг, хэрхэн ашиглах заавар, .... гээд л холбоотой бүх мэдээллийг хэвлэж болно.
# man ls
LS(1) User Commands LS(1)

NAME
ls - list directory contents

SYNOPSIS
ls [OPTION]... [FILE]...

DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuSUX nor --sort.

Mandatory arguments to long options are mandatory for short options
too.

-a, --all
do not hide entries starting with .

-A, --almost-all
do not list implied . and ..
. . . . . .
. . . . . .

HOWTO Redirection

Линүксийн командууд голдуу дэлгэцэн дээр үр дүнгээ хэвлэдэг. Тэгвэл redirection (чиглүүлэх) буюу “>” тэмдэгт ашиглаад бид командын гаралтыг файлруу чиглүүж , файлд хадгалж болдог талаар хэдэн зүйл бичий гэж бодож байна.
Жишээ нь: Нөгөө хэрэглэх дуртай “ls” командаа ашиглан “root” хавтасан дах файл болон хавтаснуудыг жагсааж файл болгон хадгалж үзий даа.

# ls -ls
total 90092
drwxr-xr-x 30 root root 4096 Feb 8 08:46 .
drwxr-xr-x 30 root root 4096 Feb 8 08:46 ..
-rw-r--r-- 1 root root 0 Feb 8 08:46 .autofsck
drwxr-xr-x 2 root root 4096 Oct 27 17:24 bin
drwxr-xr-x 3 root root 4096 Dec 4 12:22 boot
drwxr-xr-x 9 root root 4200 Feb 8 08:46 dev
drwxr-xr-x 90 root root 12288 Feb 8 08:46 etc
.......

# ls -la > file.list
# more file.list
total 90092
drwxr-xr-x 30 root root 4096 Feb 8 08:46 .
drwxr-xr-x 30 root root 4096 Feb 8 08:46 ..
-rw-r--r-- 1 root root 0 Feb 8 08:46 .autofsck
drwxr-xr-x 2 root root 4096 Oct 27 17:24 bin
drwxr-xr-x 3 root root 4096 Dec 4 12:22 boot
drwxr-xr-x 9 root root 4200 Feb 8 08:46 dev
drwxr-xr-x 90 root root 12288 Feb 8 08:46 etc
.......

Дасгал болгоод доорх хэдийг туршаад үздээ
# ping localhost > ping.txt
# date > mydate.txt
# dmesg > system-mssg.txt
# cat /var/log/messages | grep "kernel" > system-kernel.msg

Дүгнэлт:
- “|”, “>” 2 хамтдаа хоршоод байдаг байх нээ.
- “>” бол файл шинээр үүсгэх ба урд байсан бол устгаад шинээр үүсгэдэг бол “>>” гээд ашиглавал өмнөх файл дээр залгаад бичилт хийнэ.
- “>” -ыг “<” ингээд үзвэл бас өөр үйлдэл болно шуу. “<” бол ямар нэг файл болон командын агуулгыг нь өөр нэг командын оролт болгоход хэрэглэнэ. Жишээ нь дээр үүсгэсэн байгаа “file.list” гээд файл байгаа даа. “wc” команд ашиглан файл хэдэн мөртэй, хэдэн үгтэй, хэдэн бит мэдээлэл байгааг тодорхойлбол. Энд “file.list” гээд файлын агуулгыг нь “wc” командын оролт болгон ашиглаж байна.
# wc < file.lst
31 272 1527 file.lst

- "wc" командийг ашиглан адилхан үр дүн үзүүлэхээр 3 янзаар бичилт хийж үзий.
# wc file.lst
# cat file.lst | wc
# wc < file.lst

HOWTO pipeline

Линукс системтэй ажиллаж байхад хамгийн хэрэгтэй үйлдэл бол pipeline (өгөгдөл дамжуулах) хийх юм. "|" гэсэн тэмдэгтээр хэрэглэнэ. Товчхондоо бол нэг командын гаралтыг нөгөө командын оролт болгоход хэрэглэдэг. Өөрөөр хэлбэл 2 өөр командыг ашиглан, нийлүүлэн нэг үр дүн гаргах тун хэрэгтэй үйлдэл юм. Жишээ нь "ls", "sort" гэсэн 2 командыг нэгтгэж нэг үр дүн гаргах тохиолдол:

# ls /
bin etc lost+found sbin sys tmp boot home media opt
initrd misc proc srv usr dev lib mnt root var

# ls / | sort
bin
boot
dev
etc
home
initrd
.........
.........
sys
tmp
usr
var

Тайлбар: "ls" командын үр дүнд ROOT хавтасны файл, хавтаснууд дэлгэцэнд хэвлэгдэх болно. Харин "|" ашиглаад "sort" командыг нэгтгээд үзвэл, сайхан эрэмблэгдээд хэвлэгдэж байгааг харж болно. "ls" командын гаралт нь "sort" командын оролт болж үр дүн хэвлэгдэж байна.

Жишээ нь доорх үйлдлүүдийн үр дүн юу гарахыг үзээрэй.
# ls /usr | sort -r
# ls -ls | wc
# man ls | grep "format"
# ls -ls | awk '{ print $10 }'
# more /var/log/message | grep "kernel"
# more /var/log/message | grep "kernel" | "Memory"


Дүгнэлт:
- Нэг командын мөрөнд хэд хэдэн pipeline ашиглаж болох юм байна.
- "|", "grep" энэ 2 команд хамтрахаараа зэрлэг юм байна.
- "awk" Энэ ёстой гоё доо, ... Зүгээр л "command line" дээр script бичээд элдэвлэнэ ш дээ. Дараа энэ тухай дэлгэрэнгүй бичнэ ээ.

Ойр зуур хэрэглэдэг командууд

# bind control-p:history-search-backward
Энэ командын дараа "Ctrl+p" даралтаар урьд ашиглаж байсан history-д хадгалагдсан командуудыг дуудах болно. Жишээ нь командын мөрөнд "h" оруулаад "Ctrl" товч дарж байгаад "p" товчийг дараад байхад "h" -ээр эхэлсэн (history, ...etc) , урьд таны хэрэглэж оруулж байсан командууд гарч ирэх болно.

# du -hs foo
( foo хавтасний нийт хэмжээг эмхэтгэсэн хэлбэрээр үзүүлэх.)
# du -hs *
( Тухайн идэвхтэй байгаа хавтасны дотор байгаа файл хавтаснуудын хэмжээг эмхэтгэсэн хэлбэрээр жагсаах.)

# ls -lst
# ls -lsS
# ls -1 | wc -l

# grep -i "search text" *
# grep "search text" *.c
# grep -R "search text" *
( Ажилын хавтасан дах файлууд дотроос текст хайх, subfolder -оролцуулж хайна, хайх файлыг зааж өгч болно.)

# ps -aux

# kill PID
# kill -9 PID
# killall file_name/command_name

# top

# tail -f /var/log/message
( Ямар нэг болохгүй бүтэхгүй төхөөрөмж,... суулгах гэж оролдож байхдаа доорхи командыг идэвхжүүлээд тэгээд системийн LOG мэдээлэлүүдийг монитор хийнгээ ажиллах нь хамгийн үр дүнтэй байдаг)

# ssh root@IP
# scp file root@IP:/tmp
( SSH командаар Remote компьютерт нэвтрэх, Remote компьютерт файл хуулах)

# tar -zxvf *.tar.gz
# tar -zcvf *.tar.gz file/folder

# rpm -ivh *.rpm

# shutdown -h now
# shutdown -r now

Alias
Байнга оруулдаг командууд урт бичлэгтэй бол доорх байдлаар зохиомол нэр өгч ашиглаж болно. Жишээ нь "home/bayar" гэдэг хавтсанд байнга орох хэрэгтэй байдаг бол "q" гэсэн Alias үүсгээд, "q" гэсэн даралтаар л нөгөө хавтсандаа орно.
# alias q="cd /home/bayar"
# alias

GCC compile CGI file.
# gcc -o name.cgi name.c

GCC compile C file.
# gcc -o name name.c

Файлууд болон тухайн заасан хавтасуудыг бүхлээр нь харьцуулах, (-p) "c" төрөлийн файл бол функцийн нэрийг хэвлэнэ.
# diff -Naursp *.c *.c
# diff -Naursp foo1 foo2

mount - Линукс системд файл систем нэмэх

Линукс системийн file tree -д шинээр төхөөрөмж (floppy, CDROM, USB ... диск төхөөрөмжүүд) нэмэхэд "mount" командыг ашиглана.
mount коммандын ерөнхий бичлэг :

# mount -t type device-name director-name
-t : файл системийн төрөл (ext2, ext3, iso9660, msdos, nfs, nfs4, ...)
device-name : Төхөөрөмжийн нэр
director-name : Төхөөрөмжрүү хандах зам

Дэлгэрэнгүй мэдээлэлийг : http://linux.die.net/man/8/mount

Зарим нэг жишээ :

CDROM
mount /mnt/cdrom

Уян диск
mount /mnt/floppy

USB flash диск төхөөрөмж
mount /dev/sda1 /mnt/usb

(Өргөн хэрэглэгддэг төхөөрөмж болон түүний файл системийн мэдээлэл системийн файл "/etc/fstab"-д хадгалагдсан байдаг тул дээрх байдлаар шаардлагатай параметерүүдыг бичихгүйгээр командыг амжилттай гүйцэтгэж болно)

"/dev/hda5" бүхий диск драйверыг EXT3 файл системээр нэмэх:
mount -t ext3 /dev/hda5 /mnt/d

"/dev/hda5" бүхий диск драйверыг FAT32 файл системээр нэмэх:
mount -t vfat /dev/hda5 /mnt/d

"/dev/hda5" бүхий диск драйверыг NTFS файл системээр нэмэх:
mount -t ntfs /dev/hda5 /mnt/d

Нэмсэн төхөөрөмжийг системээс хасах :
umount /dev/device-name
umount /mnt/device-dir

Хамгийн ихээр хэрэглэж буй USB flash диск төхөөрөмжийг хэрхэн нэмэхийг дэлгэрэнгүй бичвэл :

1. USB flash диск төхөөрөмжийг залга.
2. Системийн LOG бичлэгийн файл "/var/log/message" -ийг шалгах. Эндээс бид систем автоматаар шинэ төхөөрөмжийг
ямар төхөөрөмж гэж танисан болохыг харж болно. Доорх командыг ашиглана.

# tail /var/log/messages

3. Төхөөрөмжийн талаарх "sda:sba1, ..." мэдээллийг бид харах болно.
4. Олж авсан "sda1" төхөөрөмжийн нэрийг ашиглан USB flash диск төхөөрөмжийг систэмд нэмэх.
# mount /dev/sda1 /mnt/usb

5. "df" командаар нэмэгдсэн эсэхийг нь шалга.

DF

GZIP / TAR , Архив файлтай ажиллах

Линүкс үйлдлийн систем дээр "gzip, zip, tar, gunzip, unzip" зэрэг коммандуудаар архив файл үүсгэх ба архив файлыг задлана (compress /uncompress). Архив файлуудын ерөнхий форматууд : tar, shar, zip, tar.gz, tar.Z. Доорхи веб хуудаснаас дэлгэрэнгүй мэдээлэл аваараа.

http://www.gzip.org
http://linux.die.net/man/1/tar

Өөрийн гараар тест хийсэн гэдэг юмуу, байнга хэрэглэдэг гэхээр коммандууд бичвэл:

1. Архив файл задлах :

# tar -zxvf Аrchive-file.tar.gz
# tar -xvf Аrchive-file.tar
# gunzip ( Archive-file.tar.gz | tar xvf -
# gunzip ( Archive-file.tgz | tar xvf -

2. Архив файл үүсгэх :
# tar -zcvf Archive-file.tar.gz filenames/folder
# tar -cvf Archive-file.tar filenames/folder
# gtar cvzf Archive-file.tar.gz filenames/folder
# tar cvf - filenames/folder | gzip > Archive-file.tar.gz

3. Жишээнүүд
# tar -cjf Archive-file.tar.bz2 bar/
("*.tar.bz2" архив файл үүсгэх)
# tar -xjf Archive-file.tar.bz2 -C bar/
("*.tar.bz2" архив файл задлах)
# zcat Archive-file.tar.Z | tar xvf -
("*.tar.Z" архив файл задлах)
# unzip Archive-file.zip
("*.tar" архив файл задлах)

Анхаар :
gunzip "*.zip" архив файлыг задалж дийлэхгүй, unzip -ээр задлана.
"*.tar.gz, *.tar" архив файлуудыг MS Windows дээр задлахдаа PowerArchiver, Winrar зэргийг ашиглана.

Sample subversion commands

SVN:Subversion Source Code Management System :
http://svn.subversion.com/
Subversion document folder:
http://subversion.tigris.org/servlets/ProjectDocumentList
-------

Get info on particular folder or file

# svn info
# svn info myfile.c

List folder:
# svn ls -v svn://address/branches/myfolder

Create new folder on the SVN server, branches folder:
# svn mkdir -m "Make dir ... mesages" svn://address/branches/myfolder

Copy local folder to SVN server, branches folder:
# svn copy -m "Copy ... messages" myfolder svn://address/branches/myfolder
(copy from/to repository)
# svn copy -m "Copy ... messages" svn://address/branches/myfolder svn://address/branches/myfolder/myfile.c

Delete current folder/files:
# svn delete -m "delete ... messages" svn://address/branches/myfolder
# svn delete -m "delete ... messages" svn://address/branches/myfolder/myfile.c
# svn rm -m "delete ... messages" svn://address/branches/myfolder/myfile.c
# svn rm -m "delete ... messages" myfile1.c myfile2.c

Display log message of the current folder, files
# svn log svn://address/branches/myfolder/
# svn log svn://address/myfolder/myfile.c
(from working folder/checkout folder)
# svn log myfile.c
# svn log -r RANGE_NO

Download current folder,files from SVN repository
# svn export svn://address/branches/myfolder myfolder

Checkout folder -> Change -> Commit it to SVN repository
# svn checkout svn://address/branches/myfolder ./myfolder
# vi myfile.c
# svn commit -m "Commit ... messages"

Examine your changes/Show your modifications
# svn diff myfile.c
(between myfile.c and current revision of myfile.c)
# svn diff (diff for all files)
# svn diff -r 114 (diff between revision 114 and local working folder file)
# svn diff -r 114:115 (diff between revisions 114 and 115)

Examine/display SVN status
# svn status -u (-u, -v : more information)
# svn status -u -v