<![CDATA[Latest posts for the topic "Chia xẻ 1 bài tập Linux tổng quát !"]]> /hvaonline/posts/list/23.html JForum - http://www.jforum.net Chia xẻ 1 bài tập Linux tổng quát ! /hvaonline/posts/list/16970.html#101985 /hvaonline/posts/list/16970.html#101985 GMT Re: Chia xẻ 1 bài tập Linux tổng quát ! Code:
#!/bin/bash
# Step 1
cd /home/quanta
mkdir $1
chmod 744 $1

# Step 2
cd $1
mkdir `hostname`\ `whoami`
chmod 644 `hostname`\ `whoami`

# Step 3
cd `hostname`\ `whoami`
echo $2`hostname` | tr 'a-z' 'A-Z' >> step3.txt
cat /etc/passwd >> `cat step3.txt`

# Step 4
cd /home/quanta/$1
myname=$1
for (( i = 0 ; i < `expr length $1` ; i++ ))
do
	mkdir ${myname:$i:1}
	chmod 644 ${myname:$i:1}
done
ps: Tớ sẽ nghĩ và thử viết tiếp những phần còn lại cũng như sửa lại cho tối ưu nếu bạn cùng tham gia thảo luận. ]]>
/hvaonline/posts/list/16970.html#102028 /hvaonline/posts/list/16970.html#102028 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát ! $ và ' có ý nghĩa gì vậy bạn quanta]]> /hvaonline/posts/list/16970.html#102043 /hvaonline/posts/list/16970.html#102043 GMT Re: Chia xẻ 1 bài tập Linux tổng quát !

quanta wrote:
Không biết cái đề bài do bạn nghĩ ra hay là lấy ở đâu? Tớ thấy nó giống cái bài tập về nhà =)) =)) =)) Dù sao thì nó cũng khá hay và tổng hợp kiến thức về Bash Shell. Tớ demo một đoạn từ bước 1 đến bước 4 (Phần còn lại sẽ khó hơn, và khó nhất có lẽ là sort theo cả GUID và UID) Code:
#!/bin/bash
# Step 1
cd /home/quanta
mkdir $1
chmod 744 $1

# Step 2
cd $1
mkdir `hostname`\ `whoami`
chmod 644 `hostname`\ `whoami`

# Step 3
cd `hostname`\ `whoami`
echo $2`hostname` | tr 'a-z' 'A-Z' >> step3.txt
cat /etc/passwd >> `cat step3.txt`

# Step 4
cd /home/quanta/$1
myname=$1
for (( i = 0 ; i < `expr length $1` ; i++ ))
do
	mkdir ${myname:$i:1}
	chmod 644 ${myname:$i:1}
done
ps: Tớ sẽ nghĩ và thử viết tiếp những phần còn lại cũng như sửa lại cho tối ưu nếu bạn cùng tham gia thảo luận.  
Thì ra anh quanta thành pro linux rồi. Tưởng bắt nạt được, vầy thì thua rồi, cố gắng học để tranh luận với anh quanta vậy.]]>
/hvaonline/posts/list/16970.html#102044 /hvaonline/posts/list/16970.html#102044 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát !

minhhuy192 wrote:
$' có ý nghĩa gì vậy bạn quanta 
Nó có nghĩa là: ... ......................... Bạn nên kiếm một quyển về Bash Shell để đọc. Ví dụ như vài cuốn này. ]]>
/hvaonline/posts/list/16970.html#102046 /hvaonline/posts/list/16970.html#102046 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát ! Code:
cat /etc/passwd >> step3.txt
Bước 3 tớ đề xuất cách này, mượn cách làm của quanta và đi vòng 1 chút: Code:
cat /etc/passwd >> $(echo $2`hostname` | tr [a-z] [A-Z])
Mấy câu sau đọc thấy khoai quá, 1 số lệnh tớ vẫn chưa biết :( nên chưa làm được. Chỗ này phải cám ơn quanta đã mở mang cho mấy lệnh :).]]>
/hvaonline/posts/list/16970.html#102053 /hvaonline/posts/list/16970.html#102053 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát !

learn2hack wrote:
@quanta: tớ thấy bước 3 có chút vấn đề, đề bài yêu cầu tạo ra file với tên người ghép với tên máy chứ ko phải tạo ra 1 file chứa nội dung chứa chúng. Hơn nữa, để bổ xung nội dung file /etc/passwd vào file của mình thì viết thế này mới được chứ nhỉ: Code:
cat /etc/passwd >> step3.txt
Bước 3 tớ đề xuất cách này, mượn cách làm của quanta và đi vòng 1 chút: Code:
cat /etc/passwd >> $(echo $2`hostname` | tr [a-z] [A-Z])
Mấy câu sau đọc thấy khoai quá, 1 số lệnh tớ vẫn chưa biết :( nên chưa làm được. Chỗ này phải cám ơn quanta đã mở mang cho mấy lệnh :). 
chào learn2hack, Thật ra thì đoạn code của tớ không sai nhưng bị thừa. Lúc đó viết vội nên không hiểu sao tự nhiên lại phải đi vòng qua 1 file trung gian: step3.txt (chứa nội dung là TÊN FILE yêu cầu của đề bài). Đoạn learn2hack viết là chuẩn và không có gì gọi là "đi vòng" cả. Nên lưu ý chỗ này của tớ:
cat /etc/passwd >> `cat step3.txt` 
]]>
/hvaonline/posts/list/16970.html#102066 /hvaonline/posts/list/16970.html#102066 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát ! Code:
#!/bin/bash
#phan 1

d1='hoquocanh0311048'
if [ -d $d1 ]
then
	rm -r $d1	
	cd ~ 
	mkdir $d1
else	
	cd ~
	mkdir $d1	
fi
chmod u=rwx,go=r $d1
#chmod 744 $d1

#phan 2
host=$(echo `hostname` | tr '[A-Z]' '[a-z]')
user=$(echo `whoami` | tr '[A-Z]' '[a-z]')
d3="$host $user"
# vao trong thu muc duoc tao tu phan 1
cd $d1

# kiem tra d3 co ton tai chua
if [ -d "$d3" ]
then
	rm -r "$d3"
	mkdir "$d3"
else	
	mkdir "$d3"
fi
chmod u=rwx,go=r "$d3"
#chmod 744 $d3
#phan 3
# vao thu muc duoc tao ra o phan 3
cd "$d3"

host=$(echo `hostname` | tr '[a-z]' '[A-Z]')
f4="HOQUOCANH$host"
grep $user /etc/passwd > "$f4"

# phan 4
count=$(echo -n $d1 | wc -c)
i=1
cd
cd $d1
while [ $i -le $count ]
do
	tempd=$(echo -n $d1 | cut -c$i)
	if [ -d $tempd ]
	then
		rm -r $tempd
		mkdir $tempd
	else	
		mkdir $tempd
	fi	
	chmod 744 $tempd
	i=`expr $i + 1`
done

cac bac dong gop cho em nha
]]>
/hvaonline/posts/list/16970.html#102078 /hvaonline/posts/list/16970.html#102078 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát ! /hvaonline/posts/list/16970.html#102083 /hvaonline/posts/list/16970.html#102083 GMT Re: Chia xẻ 1 bài tập Linux tổng quát !

quanghuy12 wrote:
Em xin lam theo cach sau : Code:
#!/bin/bash
#phan 1

d1='hoquocanh0311048'
if [ -d $d1 ]
then
	rm -r $d1	
	cd ~ 
	mkdir $d1
else	
	cd ~
	mkdir $d1	
fi
...
 
Những đoạn check thư mục cần tạo đã tồn tại hay chưa của bạn là hoàn toàn đúng và cần thiết.

quanghuy12 wrote:
Sẵn đây hỏi luôn cá bác : vd : ghi tên người đang chạy máy vào tập tin soyeulylich (nằm trong thư mục đã được tạo ra ỏ phần 1). Và cấp quyền read/wirte cho chủ nhân, chỉ cấp quyền read cho nhóm và cho người khác. Em lam : Code:
di='thu_muc_nguon'
 echo "Nguoi chay may : `whoami`" > $d1/soyeulylich
 chmod u=rw,g=r,o-rwx soyeulylich
 #chmod 640 soyeulylich
Cho thực thi, nó đã ghi dữ liệu đúng vào tập tin soyeulich ,nhưng lại báo là :: chmod: cannot access `soyeulylich': No such file or directory nghĩa là sao các bác 
Nghĩa là bạn cần xem lại xem đang đứng ở đâu, bằng lệnh pwd Xin được viết tiếp Phần 5 và 6: Code:
#!/bin/bash
# Step 5
cat /etc/passwd | while read line
do
	uid=$(echo $line | cut -d: -f3)
	if [ `expr $uid` -ge 500 ] && [ `expr $uid` -le 1000 ]; then
		echo $line | cut -d: -f1,3,7 >> temp
	fi
done
sed 's/:/\t/g' temp >> thongtin
rm -fr temp

# Step 6
chmod 664 thongtin
ps: chưa làm thế nào để "sed" luôn file thongtin được, đành lưu tạm ra file temp]]>
/hvaonline/posts/list/16970.html#102093 /hvaonline/posts/list/16970.html#102093 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát ! /hvaonline/posts/list/16970.html#102098 /hvaonline/posts/list/16970.html#102098 GMT Re: Chia xẻ 1 bài tập Linux tổng quát ! /hvaonline/posts/list/16970.html#102101 /hvaonline/posts/list/16970.html#102101 GMT Re: Chia xẻ 1 bài tập Linux tổng quát ! man sort mãi mới làm được =))) Code:
# Step 8
cat /etc/passwd | while read line
do
	echo $line | cut -d: -f1,3,4 >> $(echo $line | cut -d: -f4)
	sort -n -t: --key=2 $(echo $line | cut -d: -f4) -o $(echo $line | cut -d: -f4)
done

# Step 9
cat /etc/passwd | while read line
do
	echo $line >> passwd
	sort -n -t: --key=4 --key=3 passwd -o passwd
done
ps: Sau bài tập này có lẽ phải lập cái topic chuyên dành cho viết bash shell script. Cảm ơn quanghuy12]]>
/hvaonline/posts/list/16970.html#102125 /hvaonline/posts/list/16970.html#102125 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát !

quanta wrote:

minhhuy192 wrote:
$' có ý nghĩa gì vậy bạn quanta 
Nó có nghĩa là: ... ......................... Bạn nên kiếm một quyển về Bash Shell để đọc. Ví dụ như vài cuốn này.  
thanks quanta]]>
/hvaonline/posts/list/16970.html#102267 /hvaonline/posts/list/16970.html#102267 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát !

quanta wrote:
Xin được viết tiếp Phần 5 và 6: Code:
#!/bin/bash
# Step 5
cat /etc/passwd | while read line
do
	uid=$(echo $line | cut -d: -f3)
	if [ `expr $uid` -ge 500 ] && [ `expr $uid` -le 1000 ]; then
		echo $line | cut -d: -f1,3,7 >> temp
	fi
done
sed 's/:/\t/g' temp >> thongtin
rm -fr temp
ps: chưa làm thế nào để "sed" luôn file thongtin được, đành lưu tạm ra file temp 
Chỗ này dùng tr là ổn thôi quanta à: Code:
echo $line | cut -d: -f1,3,7 | tr : '\t' >> thongtin
@quanghuy12: Bạn tối ưu và sắp xếp lại code cho nó gọn nhẹ và đẹp mắt hơn, sẽ dễ theo dõi hơn đấy.]]>
/hvaonline/posts/list/16970.html#102896 /hvaonline/posts/list/16970.html#102896 GMT
Re: Chia xẻ 1 bài tập Linux tổng quát !

quanta wrote:
ps: chưa làm thế nào để "sed" luôn file thongtin được, đành lưu tạm ra file temp 
Hề, xài thêm thằng -i là ổn: Code:
sed -i 's/:/\t/g' temp
]]>
/hvaonline/posts/list/16970.html#102932 /hvaonline/posts/list/16970.html#102932 GMT