Thứ Bảy, 7 tháng 4, 2012

Bài tập lập trình shell trong Linux



Bài 1 . Chương trình tính tổng 1-> n                              
#!/bin/sh
echo “Chuong trinh tinh tong 1- $1”
index=0
tong=0
while [ $index -lt $1 ]
do
          index=$(($index + 1))        
          tong=$(($tong + $index))   
done
echo "Tong 1-$1= $tong"
exit 0

Bài 2 . Chương trình tính giai thức của một số
#!/bin/sh
echo “Chuong trinh tinh $1!”
index=0
gt=1
while [ $index -lt $1 ]
do
          index=$(($index + 1))        
          gt=$(($gt * $index)) 
done
echo "$1!= $gt"
exit 0

Bài 3 . Chương trình đếm số dòng của một tệp tin 
#!/bin/sh
echo “Chuong trinh dem so dong cua tap tin $1”
{
n=0
while read line
 - 22-
do
          n=$(($n + 1))
done
echo “So dong cua tap tin $1 la : $n”
}<$1
exit 0

Bài4. Chương trình đếm số từ của một tập tin
#!/bin/sh
echo “Chuong trinh dem so tu cua tap tin $1”
{
n=0
while read line
do
          for wd in $line
          do
                    n=$(($n + 1))
          done
done
echo “Tong so tu cua tap tin $1 la : $n”
}<$1
exit 0

Bài5. Chương trình tìm dòng có độ dài lớn nhất trong một tập tin
#!/bin/sh
echo “Chuong trinh tim dong dai nhat trong tap tin $1”
{
n=0
max=0
dong=””
while read line
do
          n=`expr length “$line”`
          if [ $n –gt $max ]
          then
                    dong=”$line”

                    max=$n
          fi        
done
echo “Dong trong tap tin $1 co do dai max = $max la : $dong”
}<$1
exit 0

Bài 6.Chương trình tìm một xâu trong một tập tin
#!/bin/sh
echo “Chuong trinh tim xau $1 trong tap tin $2”
{
wordlen=`expr length “$1”`                               # Do dai tu can tim
while read textline
do
          textlen=`expr length “$textline”`             # Do dai cua dong vua doc
          end=$(($textlen – wordlen + 1”
          index=1
          while [ $index –le $end ]
          do
                    temp=`expr substr “$textline” $index $wordlen
                    if [ “$temp” = $1 ]
                    then
                              echo “Tim thay $1 tai dong $textline”
                              break
                    fi
                    index=$(($index + 1))
          done
done
}<$2
exit 0

Bài 7. Tìm số lớn nhất trong dãy số nhập vào
#/bin/bash
# input an array of elements
function input()
{
echo -n "n= "
read n

for ((i=0; i<n; i++))
do
echo -n "a[$i] " =
read a[$i]
done
}
#max of two numbers
function max2nums()
{
if [ "$1" -gt "$2" ]; then
max1=$1
echo $1
else
max1=$2
echo $2
fi
return $max1
}
#max of an array
function maxs()
{
max=${a[0]}
for ((i=1; i<n; i++))
do
max=$(max2nums ${a[$i]} $max)
done
echo "max = $max"
}
input
maxs
exit $?

Bài 8. Viết 1 chương trình Shell đọc từng dòng trong 1 file văn bản. Giữa mỗi lần hiển thị dòng text thì có 1 câu hỏi từ Shell: “bạn có muốn đọc dòng kế tiếp ko ? y/n” nếu trả lời là “y” hoặc “Y” thì in dòng kế tiếp,trong trường hợp ngược lại thì kết thúc chương trình
#!/bin/sh
echo – e “ nhap ten file:”
read filename
if [ ! –f “$filename” ]; then
echo “ $filename not exists”
exit 1
fi
answer=””
count=0
numlines=`wc –l $filename|sed ‘s/^ *//’|cut –d “ “ –f 1`
echo “ so dong: $numlines”
while [ “$answer”!=”n”]
do
echo –e “tiep tuc(y/n)?”
read answer
if [ “answer” = “y” ]; then
echo “doc het file rui”
exit 0
fi
count=$(($count+1))
sed –n ${count}p $filename
done
exit 0

Bài 9. Viết 1 chương trình trong Shell sao cho với tham số thứ nhất là tên file 
text và nó sẽ in ra màn hình nội dung file này, nhưng với tất cả ký tự đều viết
hoa
#!/bin/sh
echo – e “ nhap ten file:”
read filename
if [ ! –f “$filename” ]; then
echo “ $filename not exists”
exit 1
fi
echo “file sau khi chuyen doi:”
tr ‘[a-z]’ ‘[A-Z]’ <$filename
exit 0

Bài 10. Viêt́ chương triǹ h shell giaỉ phương triǹ h bâc̣ hai :  ax2 + bx +c =0 với các tham số a,b,c nhập từ bàn phiḿ va ̀ cać kêt́ qua chińh xać đêń hai chữ số.
#!/bin/bash
echo -n "a= "
read a
echo -n "b= "
read b
echo -n "c= "
read c
delta=$(echo "$b^2 - 4*$a*$c" | bc)
if [ $delta -lt 0 ]
then
echo "pt vo nghiem"
elif [ "$delta" -eq 0 ]
then
echo -n "pt co nghiem kep x= "
x=$(echo "scale=2; -$b/(2*$a)" | bc)
echo "$x"
else
echo "phuong trinh co 2 nghiem"
x1=$(echo "scale=2; -($b + sqrt($delta))/(2*$a)" | bc)
echo "x1= $x1"
x2=$(echo "scale=2; -($b - sqrt($delta))/(2*$a)" | bc)
echo "x2= $x2"
fi
exit 0









Chủ Nhật, 1 tháng 4, 2012

Biên dịch kernel trên CentOS


B1. Download và giải nén kernel từ trang http://www.kernel.org/
[root@localhost ~]# tar -xvf linux-3.2.13.tar.bz2
[root@localhost ~]# cd linux-3.2.13

B2. Tạo file .config
[root@localhost linux-3.2.13]# cp /boot/config-`uname -r` ./.config

B3.Tiếp theo ta sẽ sử dụng lệnh make menuconfig,một màn hình xuất hiện để ta hiệu chỉnh các thông số trong kernel
[root@localhost linux-3.2.13]#make menuconfig
Để hiệu chỉnh các thông số trong kernel ta có thể check hoặc uncheck các mục trong màn hình menuconfig
Sau khi hiệu chỉnh xong chọn Exit để thoát ra và chọn Yes để lưu lại cấu hình
Sau đó các lệnh sau để bắt đầu biên dịch
[root@localhost linux-3.2.13]#make all
[root@localhost linux-3.2.13]#make modules_install
[root@localhost linux-3.2.13]#make install
- Quá trình trên sẽ tốn khá nhiều thời gian tùy thuộc vào cấu hình máy tính và file cấu hình của kernel.

B4. Hiểu chỉnh file grub.conf
[root@localhost linux-3.2.13]# vi /boot/grub/grub.conf
và thêm vào một số dòng sau
title CentOS (3.2.13-default)
        root (hd0,0)
        kernel /vmlinuz-3.2.13-default ro
root=/dev/VolGroup00/LogVol00
        initrd /initrd-3.2.13-default.img

- Cuối cùng ta tiến hành reboot lại và chọn boot vào kernel mới.

IP header


TCP header



Cách tìm hiểu TCP/IP


-Để nắm vững bộ giao thức này thì bạn cần phải thực hành. Thực hành đi đôi với lý thuyết, học lý thuyết mà cố nhớ lý thuyết thì thật khó:
+Lý thuyết: Nắm tất các các chức năng của từng tầng cũng như nguyên tắc hoạt động của từng giao thức trong các tầng đó. Và cuốn sách mà tôi chọn là TCPIP_Illustrated
+Công cụ phân tích: Wireshark.
+Cách thực hành: Sniff packets trên nhiều môi trường mạng, nhiều hệ điều hành, nhiều giao thức khác nhau. Đối chiếu với lý thuyết xem thử có đúng không
Nhưng quan trọng nhất là bạn phải kiên nhẫn và chịu khó

Script backup mysql to FTP Server


#!/bin/bash
### MySQL Server Login Info ###
MUSER="triit"
MPASS="triit"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
BAK="/backup/mysql"
GZIP="$(which gzip)"
### FTP SERVER Login info ###
FTPU="triit"
FTPP="triit"
FTPS="1.2.3.4"
NOW=$(date +"%d-%m-%Y")
[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*
#DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
DBS="test"
for db in $DBS
do
# FILE=$BAK/$db.$NOW-$(date +"%T").gz 
FILE=$BAK/$db.$NOW.gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
lftp -u $FTPU,$FTPP -e "mkdir mysql/$NOW;cd mysql/$NOW; mput /backup/mysql/*; quit" $FTPS