[Question] thắc mắc về io wwwect với bash |
30/12/2008 15:46:43 (+0700) | #1 | 164524 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
chào các bác, em đang thử cái lệnh bash này mà thấy lạ ghê, ý định của em là muốn khi đánh 1 lệnh thì nó vừa output ra stdout, vừa ghi vào file để sau này cần thì coi lại kết quả.
Code:
[secmask@secmask-home ~]$ pwd 8>& 8<log
/home/secmask
điều lạ là cái lệnh này hôm qua em chạy ngon lành, hôm nay chạy nó lại báo là không tìm thấy file log. Loay hoay thử đi thử lại vài lần, vẫn cái lệnh đó thì có lần được, lần lại lỗi như trên , chắc không có chuyện em gõ nhầm lệnh vì em dùng history của bash, vẫn cái lệnh hôm qua. Bác nào giải thích giùm em vụ này với |
|
|
|
|
[Question] thắc mắc về io wwwect với bash |
30/12/2008 17:54:34 (+0700) | #2 | 164531 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
secmask wrote:
chào các bác, em đang thử cái lệnh bash này mà thấy lạ ghê, ý định của em là muốn khi đánh 1 lệnh thì nó vừa output ra stdout, vừa ghi vào file để sau này cần thì coi lại kết quả.
Code:
[secmask@secmask-home ~]$ pwd 8>& 8<log
/home/secmask
điều lạ là cái lệnh này hôm qua em chạy ngon lành, hôm nay chạy nó lại báo là không tìm thấy file log. Loay hoay thử đi thử lại vài lần, vẫn cái lệnh đó thì có lần được, lần lại lỗi như trên , chắc không có chuyện em gõ nhầm lệnh vì em dùng history của bash, vẫn cái lệnh hôm qua. Bác nào giải thích giùm em vụ này với
Còn em thử chạy thì không có báo lỗi gì cả nhưng file log cũng chẳng có nội dung gì. Theo em thì câu lệnh trên không thể thực hiện công việc như anh nói được. Có lầm lẫn gì chăng?
Để thực hiện yêu cầu như anh nói, em làm như vậy thôi:
Code:
zerozeroone@home:~$ pwd | tee log
/home/zerozeroone
zerozeroone@home:~$ cat log
/home/zerozeroone
zerozeroone@home:~$
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 00:20:14 (+0700) | #3 | 164555 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
chào zerozeroone, cảm ơn bạn đã reply.
Cái lệnh của tớ là hôm trước tớ đang đọc lại quyển Learning bash shell - O'reilly thấy có phần này
Code:
n> file Direct file descriptor n to file
n< file Take file descriptor n from file
n>& Duplicate standard output to file descriptor n
n<& Duplicate standard input from file descriptor n
pwd 8>& 8<log --> mở file log và đặt vào file descriptor 8, duplicate file descriptor 8 vào stdout, tớ đã thử lệnh này trên máy tớ và một máy nữa ở cơ quan đều dùng centos thấy được luôn nên chẳng để ý nữa. Hôm qua gõ lại tự dưng nó lại báo lỗi không thấy file, cái máy trên cơ quan thì vẫn chưa tắt từ hôm đó giờ, mở history của nó ra lệnh vẫn còn mà lại báo lỗi tương tự lạ thật.
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 03:50:43 (+0700) | #4 | 164574 |
trongltx
Member
|
0 |
|
|
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
|
|
secmask wrote:
chào zerozeroone, cảm ơn bạn đã reply.
Cái lệnh của tớ là hôm trước tớ đang đọc lại quyển Learning bash shell - O'reilly thấy có phần này
Code:
n> file Direct file descriptor n to file
n< file Take file descriptor n from file
n>& Duplicate standard output to file descriptor n
n<& Duplicate standard input from file descriptor n
pwd 8>& 8<log --> mở file log và đặt vào file descriptor 8, duplicate file descriptor 8 vào stdout, tớ đã thử lệnh này trên máy tớ và một máy nữa ở cơ quan đều dùng centos thấy được luôn nên chẳng để ý nữa. Hôm qua gõ lại tự dưng nó lại báo lỗi không thấy file, cái máy trên cơ quan thì vẫn chưa tắt từ hôm đó giờ, mở history của nó ra lệnh vẫn còn mà lại báo lỗi tương tự lạ thật.
Mình chạy rất nhiều lần đều không có lỗi gì cả,và file log cũng đúng(cat ra có nội dung như hiển thị) mà. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:05:19 (+0700) | #5 | 164575 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
secmask wrote:
pwd 8>& 8<log --> mở file log và đặt vào file descriptor 8, duplicate file descriptor 8 vào stdout, tớ đã thử lệnh này trên máy tớ và một máy nữa ở cơ quan đều dùng centos thấy được luôn nên chẳng để ý nữa. Hôm qua gõ lại tự dưng nó lại báo lỗi không thấy file, cái máy trên cơ quan thì vẫn chưa tắt từ hôm đó giờ, mở history của nó ra lệnh vẫn còn mà lại báo lỗi tương tự lạ thật.
Anh có thể đưa thông báo lỗi lên để xem thử?
trongltx wrote:
Mình chạy rất nhiều lần đều không có lỗi gì cả,và file log cũng đúng(cat ra có nội dung như hiển thị) mà.
Bạn có thể đưa kết quả lên? |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:05:51 (+0700) | #6 | 164576 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
trongltx wrote:
secmask wrote:
chào zerozeroone, cảm ơn bạn đã reply.
Cái lệnh của tớ là hôm trước tớ đang đọc lại quyển Learning bash shell - O'reilly thấy có phần này
Code:
n> file Direct file descriptor n to file
n< file Take file descriptor n from file
n>& Duplicate standard output to file descriptor n
n<& Duplicate standard input from file descriptor n
pwd 8>& 8<log --> mở file log và đặt vào file descriptor 8, duplicate file descriptor 8 vào stdout, tớ đã thử lệnh này trên máy tớ và một máy nữa ở cơ quan đều dùng centos thấy được luôn nên chẳng để ý nữa. Hôm qua gõ lại tự dưng nó lại báo lỗi không thấy file, cái máy trên cơ quan thì vẫn chưa tắt từ hôm đó giờ, mở history của nó ra lệnh vẫn còn mà lại báo lỗi tương tự lạ thật.
Mình chạy rất nhiều lần đều không có lỗi gì cả,và file log cũng đúng(cat ra có nội dung như hiển thị) mà.
Mình cũng từng chạy được
giờ thì trên cả 2 máy đều báo chính xác là thế này:
Code:
[secmask@home ~] pwd 8>& 8<log
-bash: log: No such file or directory
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:12:27 (+0700) | #7 | 164578 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
secmask wrote:
Mình cũng từng chạy được smilie
Em chạy vẫn không có kết quả. Chỉ output lên sdtout còn file log thì trống rỗng.
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:14:14 (+0700) | #8 | 164579 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
secmask wrote:
Code:
[secmask@home ~] pwd 8>& 8<log
-bash: log: No such file or directory
Anh secmask đã có kiểm tra cái file log đã tồn tại không? Hình như nếu không có thì nó không tự động tạo mà thông báo lỗi. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:14:30 (+0700) | #9 | 164580 |
trongltx
Member
|
0 |
|
|
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
|
|
Sorry,Code đây.
Code:
tronglt@ubuntu:~$ echo `date` 2>& 2<log
Tue Dec 30 13:45:13 EST 2008
tronglt@ubuntu:~$ cat log
Tue Dec 30 13:43:05 EST 2008
Đúng là lạ thật đấy,bây giờ nó lại báo giống như trên. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:16:01 (+0700) | #10 | 164581 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
trongltx wrote:
Đúng là lạ thật đấy,bây giờ nó lại báo giống như trên.
Báo thế nào vậy? Lại báo là không tìm được file sao? |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:24:08 (+0700) | #11 | 164584 |
trongltx
Member
|
0 |
|
|
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
|
|
Đúng là file log chẳng có cái gì,nếu tồn tại file log rồi thì nó ko báo No such file or..còn nếu có file log rồi thì cat ra chẳng có cái gi cả,file log ở trên của mình là dữ liệu của command trước.sorry |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:24:17 (+0700) | #12 | 164585 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
Lần trước tớ chạy nó tự tao file log mà, bây giờ thì nếu tạo file log trước thì nó không báo lỗi file nữa tuy nhiên output từ stdout không được ghi vào file. Tớ cũng mới test thử trên slax, kết quả vẫn lỗi như trên. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:27:55 (+0700) | #13 | 164587 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
trongltx wrote:
Code:
tronglt@ubuntu:~$ echo `date` 2>& 2<log
Tue Dec 30 13:45:13 EST 2008
tronglt@ubuntu:~$ cat log
Tue Dec 30 13:43:05 EST 2008
Hai cái thời gian khác nhau mà.
secmask wrote:
Lần trước tớ chạy nó tự tao file log mà, bây giờ thì nếu tạo file log trước thì nó không báo lỗi file nữa tuy nhiên output từ stdout không được ghi vào file. Tớ cũng mới test thử trên slax, kết quả vẫn lỗi như trên.
trongltx wrote:
Đúng là file log chẳng có cái gì,nếu tồn tại file log rồi thì nó ko báo No such file or..còn nếu có file log rồi thì cat ra chẳng có cái gi cả,file log ở trên của mình là dữ liệu của command trước.sorry
Em thì cũng vậy, lần đầu làm thì nó tự động tạo, xóa rồi làm lại thì bắt buộc phải tạo trước khi làm. Còn cái file log thì lúc nào cũng trống rỗng không có gì.
Vậy là chỉ có anh secmask làm được nhưng cũng chỉ có 1 lần thành công. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
31/12/2008 04:37:55 (+0700) | #14 | 164588 |
trongltx
Member
|
0 |
|
|
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
|
|
Cái này phải tìm hiểu tiếp,nhưng mình search thì thấy có thể dùng tee để thực hiện yêu cầu đó.
Code:
Code:
tronglt@ubuntu:~$ date|tee log
Tue Dec 30 14:36:24 EST 2008
tronglt@ubuntu:~$ cat log
Tue Dec 30 14:36:24 EST 2008
tronglt@ubuntu:~$
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
01/01/2009 11:33:09 (+0700) | #15 | 164774 |
|
Xfire
Member
|
0 |
|
|
Joined: 15/12/2008 19:36:52
Messages: 6
Offline
|
|
Để thực hiện ý định của secmask, sửa lại lệnh như sau:
Code:
secmask có lẽ nhầm 1 chút giữa 2 dấu wwwect: ">", "<".
Trong trường hợp lần đầu bạn làm "thành công" thì tôi nghĩ có thể do trước đó bạn đã run lệnh "đúng" ở trên rồi (vừa đọc sách xong test thử mấy câu lệnh đã) sau đó run câu lệnh "nhầm" thì file log vẫn ko đổi khiến bạn hiểu nhầm là mình đã run đúng |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
01/01/2009 11:40:40 (+0700) | #16 | 164777 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
Xfire wrote:
Để thực hiện ý định của secmask, sửa lại lệnh như sau:
Code:
secmask có lẽ nhầm 1 chút giữa 2 dấu wwwect: ">", "<".
Trong trường hợp lần đầu bạn làm "thành công" thì tôi nghĩ có thể do trước đó bạn đã run lệnh "đúng" ở trên rồi (vừa đọc sách xong test thử mấy câu lệnh đã) sau đó run câu lệnh "nhầm" thì file log vẫn ko đổi khiến bạn hiểu nhầm là mình đã run đúng
Bạn đọc lại từ đầu topic nhé. Đọc kỹ yêu cầu anh secmask đưa ra.
Câu lệnh của bạn chỉ đưa kết quả output vào file log thôi mà không xuất ra stdout (mình đã thử trên Ubuntu, CentOS và Fedora).
Nếu bạn chạy thành công, vừa xuất ra stdout vừa xuất ra file được (bằng câu lệnh bạn ghi phía trên, chứ vẫn có thể làm theo yêu cầu bằng cách sử dụng "tee") thì đưa kết quả lên mọi người xem thử. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
01/01/2009 11:58:11 (+0700) | #17 | 164780 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
Xfire wrote:
Để thực hiện ý định của secmask, sửa lại lệnh như sau:
Code:
secmask có lẽ nhầm 1 chút giữa 2 dấu wwwect: ">", "<".
Trong trường hợp lần đầu bạn làm "thành công" thì tôi nghĩ có thể do trước đó bạn đã run lệnh "đúng" ở trên rồi (vừa đọc sách xong test thử mấy câu lệnh đã) sau đó run câu lệnh "nhầm" thì file log vẫn ko đổi khiến bạn hiểu nhầm là mình đã run đúng
cũng có thể lắm, bây giờ tớ không thể tạo lại tình huống đó được nữa, không thì chắc máy tớ nó bị .... ma ám |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
01/01/2009 12:04:35 (+0700) | #18 | 164782 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
secmask wrote:
cũng có thể lắm, bây giờ tớ không thể tạo lại tình huống đó được nữa, không thì chắc máy tớ nó bị .... ma ám
Anh có còn nhớ rõ là lúc đó nó hiện lên stdout và cả log file không? Nghi ngờ quá . Em thử trên 3,4 cái distro không có cái nào được. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
01/01/2009 12:20:56 (+0700) | #19 | 164785 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
tớ đã thử khá nhiều kiểu wwwect trên máy tớ, nên chuyện nhầm lẫn như Xfire hoàn toàn có thể xảy ra, có điều là khi tớ thử lệnh : pwd 8>& 8<log , thấy ok (cứ cho là do nhầm lẫn) nên chuyển sang máy desktop trên cơ quan type một lèo: nmap xyz.. 8>& 8<nmap-result. nmap chạy được một ít thì đứng đơ ra nên tớ Ctrl C, tuy nhiên cat nmap-result vẫn ra được kết quả mà nmap hiện ra trên stdout trước đó, sau đó tớ delete luôn file nmap-result . Giờ thì không biết đâu mà lần nữa rồi |
|
|
|
|
[Question] thắc mắc về io wwwect với bash |
03/01/2009 21:37:38 (+0700) | #20 | 165034 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
secmask wrote:
chào các bác, em đang thử cái lệnh bash này mà thấy lạ ghê, ý định của em là muốn khi đánh 1 lệnh thì nó vừa output ra stdout, vừa ghi vào file để sau này cần thì coi lại kết quả.
Cái này thì dùng lệnh tee (như nhiều bạn bên trên đã nói), mình sẽ không bàn đến nữa.
secmask wrote:
Code:
[secmask@secmask-home ~]$ pwd 8>& 8<log
/home/secmask
điều lạ là cái lệnh này hôm qua em chạy ngon lành, hôm nay chạy nó lại báo là không tìm thấy file log. Loay hoay thử đi thử lại vài lần, vẫn cái lệnh đó thì có lần được, lần lại lỗi như trên , chắc không có chuyện em gõ nhầm lệnh vì em dùng history của bash, vẫn cái lệnh hôm qua. Bác nào giải thích giùm em vụ này với
- Trước mỗi lần chạy đảm bảo rằng đã xóa file log
- "Lại lỗi như trên" nghĩa là "bash: log: No such file or directory" ?
zerozeroone wrote:
Còn em thử chạy thì không có báo lỗi gì cả nhưng file log cũng chẳng có nội dung gì. Theo em thì câu lệnh trên không thể thực hiện công việc như anh nói được. Có lầm lẫn gì chăng?
Bạn cho xem bằng chứng, trước đó nhớ 'ls' nhé.
secmask wrote:
chào zerozeroone, cảm ơn bạn đã reply.
Cái lệnh của tớ là hôm trước tớ đang đọc lại quyển Learning bash shell - O'reilly thấy có phần này
Code:
n> file Direct file descriptor n to file
n< file Take file descriptor n from file
n>& Duplicate standard output to file descriptor n
n<& Duplicate standard input from file descriptor n
pwd 8>& 8<log --> mở file log và đặt vào file descriptor 8, duplicate file descriptor 8 vào stdout, tớ đã thử lệnh này trên máy tớ và một máy nữa ở cơ quan đều dùng centos thấy được luôn nên chẳng để ý nữa. Hôm qua gõ lại tự dưng nó lại báo lỗi không thấy file, cái máy trên cơ quan thì vẫn chưa tắt từ hôm đó giờ, mở history của nó ra lệnh vẫn còn mà lại báo lỗi tương tự lạ thật.
- Rất có thể sách viết sai. Đúng ra phải là:
>&n duplicate stdout to file descriptor n
- Đoạn diễn giải màu cam bị sai
trongltx wrote:
Sorry,Code đây.
Code:
tronglt@ubuntu:~$ echo `date` 2>& 2<log
Tue Dec 30 13:45:13 EST 2008
tronglt@ubuntu:~$ cat log
Tue Dec 30 13:43:05 EST 2008
Đúng là lạ thật đấy,bây giờ nó lại báo giống như trên.
Trước khi chạy, thử 'ls' xem nào.
Vài links đọc thêm về Redirecting and File Descriptor:
http://docstore.mik.ua/orelly/unix2.1/ksh/ch07_01.htm
http://www.ms.itb.ac.id/buku/programming/Unix%20Script%20Writing/fsld.502.html
http://mixedvolume.blogspot.com/2004/12/file-descriptors-in-bourne-shell.html
http://blogmag.net/blog/read/48/File_descriptors_in_shell
|
|
Let's build on a great foundation! |
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
04/01/2009 11:40:19 (+0700) | #21 | 165094 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
quanta wrote:
zerozeroone wrote:
Còn em thử chạy thì không có báo lỗi gì cả nhưng file log cũng chẳng có nội dung gì. Theo em thì câu lệnh trên không thể thực hiện công việc như anh nói được. Có lầm lẫn gì chăng?
Bạn cho xem bằng chứng, trước đó nhớ 'ls' nhé.
Ở trên em đã có nói:
zerozeroone wrote:
trongltx wrote:
Code:
tronglt@ubuntu:~$ echo `date` 2>& 2<log
Tue Dec 30 13:45:13 EST 2008
tronglt@ubuntu:~$ cat log
Tue Dec 30 13:43:05 EST 2008
Hai cái thời gian khác nhau mà.
secmask wrote:
Lần trước tớ chạy nó tự tao file log mà, bây giờ thì nếu tạo file log trước thì nó không báo lỗi file nữa tuy nhiên output từ stdout không được ghi vào file. Tớ cũng mới test thử trên slax, kết quả vẫn lỗi như trên.
trongltx wrote:
Đúng là file log chẳng có cái gì,nếu tồn tại file log rồi thì nó ko báo No such file or..còn nếu có file log rồi thì cat ra chẳng có cái gi cả,file log ở trên của mình là dữ liệu của command trước.sorry
Em thì cũng vậy, lần đầu làm thì nó tự động tạo, xóa rồi làm lại thì bắt buộc phải tạo trước khi làm. Còn cái file log thì lúc nào cũng trống rỗng không có gì.
Vậy là chỉ có anh secmask làm được nhưng cũng chỉ có 1 lần thành công.
Bởi thế nên bây giờ nó bắt phải tạo file log trước khi thực hiện. Chỉ khi làm lúc đầu tiên là được. Em xin đảm bảo là lúc đầu tiên đó chưa có file log và sau khi thực hiện xong cũng không có gì trong file log.
Thế này đây:
Code:
[zerozeroone@fedora ~]$ ls
Desktop Documents Download Music Pictures Public Templates Videos
[zerozeroone@fedora ~]$ pwd 8>& 8<log
bash: log: No such file or directory
[zerozeroone@fedora ~]$ touch log
[zerozeroone@fedora ~]$ pwd 8>& 8<log
/home/zerozeroone
[zerozeroone@fedora ~]$ cat log
[zerozeroone@fedora ~]$
[zerozeroone@fedora ~]$
quanta wrote:
- Rất có thể sách viết sai. Đúng ra phải là:
>&n duplicate stdout to file descriptor n
Chắc đúng là vậy. Các tài liệu trên Korn Shell thì nói vậy. Và em làm thế này:
Code:
[zerozeroone@fedora ~]$ ls
Desktop Documents Download Music Pictures Public Templates Videos
[zerozeroone@fedora ~]$ 8>log pwd >&8
[zerozeroone@fedora ~]$ ls
Desktop Documents Download log Music Pictures Public Templates Videos
[zerozeroone@fedora ~]$ cat log
/home/zerozeroone
[zerozeroone@fedora ~]$
Kết quả vẫn không thể vừa output ra stdout vừa ra file.
Theo em nghĩ thì ngoài cách dùng "tee" hoặc dùng script thì không còn cách nào để có thể vừa xuất output ra stdout và file trong cùng một câu lệnh.
P/S: cám ơn anh quanta về mấy cái link, nhưng hình khi nói về file descriptor nó minh họa trên Korn Shell. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
04/01/2009 13:02:00 (+0700) | #22 | 165101 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
zerozeroone wrote:
...
Bởi thế nên bây giờ nó bắt phải tạo file log trước khi thực hiện. Chỉ khi làm lúc đầu tiên là được. Em xin đảm bảo là lúc đầu tiên đó chưa có file log và sau khi thực hiện xong cũng không có gì trong file log.
- Lần đầu tiên (chưa có file log), chạy cái lệnh trên mà nó tạo ra được file log thì cũng tài thật?
- Lệnh 8<log làm cái gì mà bạn đòi trong log có output của `pwd`?
Ngoài ra, tớ muốn bàn thêm về subprocess và open file descriptors? |
|
Let's build on a great foundation! |
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
04/01/2009 13:22:17 (+0700) | #23 | 165105 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
quanta wrote:
- Lần đầu tiên (chưa có file log), chạy cái lệnh trên mà nó tạo ra được file log thì cũng tài thật?
Cái này thì không có bằng chứng nên cũng không bàn nữa. Chắc có lẽ do nhầm lẫn.
quanta wrote:
- Lệnh 8<log làm cái gì mà bạn đòi trong log có output của `pwd`?
Cái này thì sẽ lấy cái log làm input cho cái file descriptor 8. Tức là file descriptor 8 tham chiếu đến một file có nội dung như trong file log. Ở trên em chỉ thực hiện theo như câu lệnh mà anh secmask đưa ra để kiểm chứng chứ không phải ý kiến của em là sẽ giống anh secmask.
Theo như:
quanta wrote:
- Rất có thể sách viết sai. Đúng ra phải là:
>&n duplicate stdout to file descriptor n
Em thực hiện:
Code:
[zerozeroone@fedora ~]$ ls
Desktop Documents Download Music Pictures Public Templates Videos
[zerozeroone@fedora ~]$ 8>log pwd >&8
[zerozeroone@fedora ~]$ ls
Desktop Documents Download log Music Pictures Public Templates Videos
[zerozeroone@fedora ~]$ cat log
/home/zerozeroone
[zerozeroone@fedora ~]$
Như vậy thì cái từ "duplicate" ở trên chắc không thể dịch là "nhân bản" vì nó cũng thật sự là wwwect thôi. |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
04/01/2009 13:37:09 (+0700) | #24 | 165109 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
zerozeroone wrote:
Như vậy thì cái từ "duplicate" ở trên chắc không thể dịch là "nhân bản" vì nó cũng thật sự là wwwect thôi.
anh cũng thấy thế, trước giờ quen duplicate là "make a copy" và trở thành một phiên bản độc lập, nhưng có vẻ với bash nó giống với "make reference" hơn.
@quanta: về open file descriptor em thấy thế này
m>file : open "file" để output, đặt vào file descriptor m
m<file : open "file" để input, đặt vào file descriptor m
m<>file : open "file" để input và output, đặt vào file descriptor m
chỗ 8<log hôm trước em đã diễn giải sai |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
05/01/2009 03:09:14 (+0700) | #25 | 165131 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
File descriptor
-File descriptor được sử dụng để thực hiện, vận dụng, thao tác cùng lúc trên nhiều dữ liệu đầu vào(input) và dữ liệu ra(output) và tăng tốc độ xử lý trên shell.
-File descriptor có thể được tạo ra và sử dụng trong cùng một dòng lệnh với một lệnh bất kỳ, sau khi kết thúc dòng lệnh thì mất tác dụng(file descriptor sẽ được đóng lại-tức là không còn "tham chiếu" đến file nào nữa.).
Code:
n>filename //mở filename để đưa output từ file descriptor n vào. Nếu filename chưa tồn tại thì tạo mới, nếu đã tồn tại thì tạo lại.
n<filename //mở filename để lấy input vào file descriptor n. filename bắt buộc phải tồn tại.
Hoặc thực hiện thông qua lệnh exec sẽ có tác dụng trong shell cho đến khi thoát khỏi shell.
Code:
exec n>filename //mở filename để đưa output từ file descriptor n vào. Nếu filename chưa tồn tại thì tạo mới, nếu đã tồn tại thì tạo lại.
exec n<filename //mở filename để lấy input vào file descriptor n. filename bắt buộc phải tồn tại.
exec n>&- hoặc exec n<&- đóng file descriptor n.
-Các file descriptor mặc định được sử dụng: 0<->stdin, 1<->stdout, 2<->stderr.
-File descriptor thường được sử dụng trong lập trình, trong các script.
Vấn đề tăng tốc độ xử lý khi thao tác với file descriptor.
-Bình thường khi thực hiện một thao tác nào đó lên một file thì file đó sẽ được mở, thực hiện thao tác trên file, rồi cuối cùng đóng file lại. Khi sử dụng file descriptor thì do file descriptor tham chiếu đến file cần thao tác nên thực hiện các thao tác trên file descriptor thay vì trực tiếp trên file sẽ tránh được việc phải thực hiện liên tục việc mở và đóng file như thế.
-Nếu chỉ là một câu lệnh đơn thì có vấn đề tốc độ xử lý là như nhau khi có dùng hoặc không dùng file descriptor.
-Nhưng nếu thực hiện một vòng lặp để thao tác trên file hoặc khi viết một script có thao tác trên file nhiều lần(thao tác được đặt trong vòng lặp) thì việc mở và đóng file sau mỏi lần lặp là lãng phí và giảm hiệu suất. Nếu sử dụng file descriptor thì sẽ tăng performace một cách đáng kể.
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
05/01/2009 04:03:30 (+0700) | #26 | 165132 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
zerozeroone wrote:
...
-File descriptor có thể được tạo ra và sử dụng trong cùng một dòng lệnh với 'command', sau khi kết thúc dòng lệnh thì mất tác dụng(file descriptor sẽ được đóng lại-tức là không còn "tham chiếu" đến file nào nữa.).
- Tạo một file 'test' với nội dung là 'hello world':
Code:
$ echo "hello world" > test
- Dùng 'vim' mở file 'test' để chỉnh sửa:
Code:
- Mở một cửa sổ khác, xác định PID của process đang chỉnh sửa file 'test':
Code:
$ ps aux | grep vim
quanta 17466 0.4 0.2 12360 5616 pts/3 S+ 13:36 0:00 vim test
quanta 17504 0.0 0.0 4280 784 pts/11 S+ 13:36 0:00 grep vim
- Có bao nhiêu files đang mở:
Code:
- process 17466 đang tương tác với những file nào:
Code:
$ lsof | grep "17466"
vim 17466 quanta cwd DIR 8,5 4096 606215 /home/quanta
vim 17466 quanta rtd DIR 8,5 4096 2 /
vim 17466 quanta txt REG 8,5 1796260 934323 /usr/bin/vim
vim 17466 quanta mem REG 8,5 49704 123812 /lib/xvnkb.so.0.2.9a-1
vim 17466 quanta mem REG 8,5 108436 125863 /lib/libselinux.so.1
vim 17466 quanta mem REG 8,5 137708 122896 /lib/libncurses.so.5.6
vim 17466 quanta mem REG 8,5 28188 125876 /lib/libacl.so.1.1.0
vim 17466 quanta mem REG 8,5 57358 967094 /usr/lib/libgpm.so.2.1.0
vim 17466 quanta mem REG 8,5 2548144 92701 /usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE/libperl.so
vim 17466 quanta mem REG 8,5 92388 125652 /lib/libresolv-2.9.so
vim 17466 quanta mem REG 8,5 13208 122951 /lib/libutil-2.9.so
vim 17466 quanta mem REG 8,5 1806224 122919 /lib/libc-2.9.so
vim 17466 quanta mem REG 8,5 1351140 968345 /usr/lib/libpython2.5.so.1.0
vim 17466 quanta mem REG 8,5 208276 124779 /lib/libm-2.9.so
vim 17466 quanta mem REG 8,5 18568 124776 /lib/libdl-2.9.so
vim 17466 quanta mem REG 8,5 96520 122931 /lib/libtinfo.so.5.6
vim 17466 quanta mem REG 8,5 133780 122943 /lib/libpthread-2.9.so
vim 17466 quanta mem REG 8,5 16520 122976 /lib/libattr.so.1.1.0
vim 17466 quanta mem REG 8,5 116028 124780 /lib/libnsl-2.9.so
vim 17466 quanta mem REG 8,5 47660 122923 /lib/libcrypt-2.9.so
vim 17466 quanta mem REG 8,5 34724 156501 /usr/lib/perl5/5.10.0/i386-linux-thread-multi/auto/Opcode/Opcode.so
vim 17466 quanta mem REG 8,5 156948 122900 /lib/ld-2.9.so
vim 17466 quanta mem REG 8,5 217016 336973 /var/db/nscd/passwd
vim 17466 quanta mem REG 8,5 80621568 1145518 /usr/lib/locale/locale-archive
vim 17466 quanta 0u CHR 136,3 0t0 5 /dev/pts/3
vim 17466 quanta 1u CHR 136,3 0t0 5 /dev/pts/3
vim 17466 quanta 2u CHR 136,3 0t0 5 /dev/pts/3
vim 17466 quanta 4u REG 8,5 12288 611172 /home/quanta/.test.swp
- Tìm các file descriptors mà process 17466 đang dùng:
Code:
$ ls -l /proc/17466/fd
total 0
lrwx------ 1 quanta quanta 64 2009-01-04 13:39 0 -> /dev/pts/3
lrwx------ 1 quanta quanta 64 2009-01-04 13:39 1 -> /dev/pts/3
lrwx------ 1 quanta quanta 64 2009-01-04 13:37 2 -> /dev/pts/3
lrwx------ 1 quanta quanta 64 2009-01-04 13:39 4 -> /home/quanta/.test.swp
- Xem số lượng lớn nhất mà các file descriptors được cho phép mở trên hệ thống:
Code:
$ cat /proc/sys/fs/file-max
204632
- Có bao nhiêu file descriptors đang được sử dụng:
Code:
$cat /proc/sys/fs/file-nr
6912 0 204632
| | |__ maximum number of file descriptors allowed on the system
| |
| |__ total free allocated file descriptors
|
|__ total allocated file descriptors
- Số lượng giới hạn các file descriptors được mở cho mỗi process:
Code:
$ ulimit -aH
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 40
file size (blocks, -f) unlimited
pending signals (-i) 32617
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 20
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 32617
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
... |
|
Let's build on a great foundation! |
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
05/01/2009 04:46:58 (+0700) | #27 | 165136 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
quanta wrote:
zerozeroone wrote:
...
-File descriptor có thể được tạo ra và sử dụng trong cùng một dòng lệnh với 'command', sau khi kết thúc dòng lệnh thì mất tác dụng(file descriptor sẽ được đóng lại-tức là không còn "tham chiếu" đến file nào nữa.).
Ý em không phải là lệnh 'command'-một built-in của shell mà muốn nói là một lệnh bất kỳ nào đó. Em đã chỉnh lại phía trên.
|
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
05/01/2009 05:02:51 (+0700) | #28 | 165138 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
zerozeroone wrote:
quanta wrote:
zerozeroone wrote:
...
-File descriptor có thể được tạo ra và sử dụng trong cùng một dòng lệnh với 'command', sau khi kết thúc dòng lệnh thì mất tác dụng(file descriptor sẽ được đóng lại-tức là không còn "tham chiếu" đến file nào nữa.).
Ý em không phải là lệnh 'command'-một built-in của shell mà muốn nói là một lệnh bất kỳ nào đó. Em đã chỉnh lại phía trên.
Mình cũng có hiểu thế đâu, mình chỉ minh hoạ cho đoạn trên bạn viết thôi mà. |
|
Let's build on a great foundation! |
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
05/01/2009 05:07:31 (+0700) | #29 | 165139 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
À, vậy là em hiểu lầm ý anh.
Cho em hỏi thêm:
quanta wrote:
- Số lượng giới hạn các file descriptors được mở cho mỗi process:
Code:
$ ulimit -aH
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 40
file size (blocks, -f) unlimited
pending signals (-i) 32617
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 20
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 32617
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Có phải là cái dòng "open files"? |
|
|
|
|
[Question] Re: thắc mắc về io wwwect với bash |
05/01/2009 05:15:49 (+0700) | #30 | 165140 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
zerozeroone wrote:
Cho em hiểu thêm vài điều:
quanta wrote:
- Tìm các file descriptors mà process 17466 đang dùng:
Code:
$ ls -l /proc/17466/fd
total 0
lrwx------ 1 quanta quanta 64 2009-01-04 13:39 0 -> /dev/pts/3
lrwx------ 1 quanta quanta 64 2009-01-04 13:39 1 -> /dev/pts/3
lrwx------ 1 quanta quanta 64 2009-01-04 13:37 2 -> /dev/pts/3
lrwx------ 1 quanta quanta 64 2009-01-04 13:39 4 -> /home/quanta/.test.swp
Có các file descriptor 0, 1, 2, 4 đang sử dụng sao nó để total 0?
Bạn thử tìm hiểu xem giá trị 'total' trong output của lệnh 'ls -l' là chỉ cái gì đã?
zerozeroone wrote:
quanta wrote:
- Số lượng giới hạn các file descriptors được mở cho mỗi process:
Code:
$ ulimit -aH
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 40
file size (blocks, -f) unlimited
pending signals (-i) 32617
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 20
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 32617
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Có phải là cái dòng "open files"?
Chính xác. |
|
Let's build on a great foundation! |
|
|
|
|
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|