banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix thắc mắc về io wwwect với bash  XML
  [Question]   thắc mắc về io wwwect với bash 30/12/2008 15:46:43 (+0700) | #1 | 164524
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
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 smilie , 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 smilie
[Up] [Print Copy]
  [Question]   thắc mắc về io wwwect với bash 30/12/2008 17:54:34 (+0700) | #2 | 164531
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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 smilie , 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 smilie  


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:~$

[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 00:20:14 (+0700) | #3 | 164555
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
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ự smilie lạ thật.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 03:50:43 (+0700) | #4 | 164574
trongltx
Member

[Minus]    0    [Plus]
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
[Profile] [PM]

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ự smilie 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à.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:05:19 (+0700) | #5 | 164575
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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ự smilie 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?
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:05:51 (+0700) | #6 | 164576
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

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ự smilie 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 smilie
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

[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:12:27 (+0700) | #7 | 164578
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:14:14 (+0700) | #8 | 164579
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:14:30 (+0700) | #9 | 164580
trongltx
Member

[Minus]    0    [Plus]
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
[Profile] [PM]
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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:16:01 (+0700) | #10 | 164581
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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?
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:24:08 (+0700) | #11 | 164584
trongltx
Member

[Minus]    0    [Plus]
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
[Profile] [PM]
Đú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
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:24:17 (+0700) | #12 | 164585
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:27:55 (+0700) | #13 | 164587
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 31/12/2008 04:37:55 (+0700) | #14 | 164588
trongltx
Member

[Minus]    0    [Plus]
Joined: 10/12/2008 10:14:20
Messages: 7
Offline
[Profile] [PM]
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:~$

[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 01/01/2009 11:33:09 (+0700) | #15 | 164774
[Avatar]
Xfire
Member

[Minus]    0    [Plus]
Joined: 15/12/2008 19:36:52
Messages: 6
Offline
[Profile] [PM]
Để thực hiện ý định của secmask, sửa lại lệnh như sau:
Code:
$pwd 8>& 8>log

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 smilie
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 01/01/2009 11:40:40 (+0700) | #16 | 164777
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

Xfire wrote:
Để thực hiện ý định của secmask, sửa lại lệnh như sau:
Code:
$pwd 8>& 8>log

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 smilie 

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ử.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 01/01/2009 11:58:11 (+0700) | #17 | 164780
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

Xfire wrote:
Để thực hiện ý định của secmask, sửa lại lệnh như sau:
Code:
$pwd 8>& 8>log

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 smilie 


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 smilie
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 01/01/2009 12:04:35 (+0700) | #18 | 164782
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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 smilie 


Anh có còn nhớ rõ là lúc đó nó hiện lên stdout và cả log file không? Nghi ngờ quá smilie . Em thử trên 3,4 cái distro không có cái nào được.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 01/01/2009 12:20:56 (+0700) | #19 | 164785
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
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 smilie
[Up] [Print Copy]
  [Question]   thắc mắc về io wwwect với bash 03/01/2009 21:37:38 (+0700) | #20 | 165034
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

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 smilie , 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 smilie  

- 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ự smilie 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!
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 04/01/2009 11:40:19 (+0700) | #21 | 165094
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 04/01/2009 13:02:00 (+0700) | #22 | 165101
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

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ề subprocessopen file descriptors?
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 04/01/2009 13:22:17 (+0700) | #23 | 165105
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 04/01/2009 13:37:09 (+0700) | #24 | 165109
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

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 smilie
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 05/01/2009 03:09:14 (+0700) | #25 | 165131
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]
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ể.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 05/01/2009 04:03:30 (+0700) | #26 | 165132
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

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:
$ vim test

- 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:
$ lsof | wc -l
6218

- 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!
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 05/01/2009 04:46:58 (+0700) | #27 | 165136
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 05/01/2009 05:02:51 (+0700) | #28 | 165138
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

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!
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 05/01/2009 05:07:31 (+0700) | #29 | 165139
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]
À, 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"?
[Up] [Print Copy]
  [Question]   Re: thắc mắc về io wwwect với bash 05/01/2009 05:15:49 (+0700) | #30 | 165140
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

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!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 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|