<![CDATA[Latest posts for the topic "Pipe 'cat' to 'grep' hay 'grep' thẳng luôn"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net Nhờ tư vấn về bảo mật (DDos - X-Flash)

conmale wrote:
... Đôi khi em thấy log của apache / mod_security cảnh bảo "Failed to execute" nhưng thật sự cái script này vẫn đã thực thi. Để xác minh có đúng điều này xảy ra hay không, em thử chèn thêm 1 dòng trong "blocker.sh": /bin/echo +$REMOTE_ADDR >> /tmp/badip.txt Sau đó tail dòng cuối cùng của /tmp/badip.txt để tìm IP cuối được blocker.sh thực thi rồi thử: cat /proc/net/ipt_recent/BLACKLIST | grep <ip>  
Chỉ cần 'grep' luôn thôi anh: grep <ip> /proc/net/ipt_recent/BLACKLIST ]]>
/hvaonline/posts/list/36620.html#224972 /hvaonline/posts/list/36620.html#224972 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash)

quanta wrote:

conmale wrote:
... Đôi khi em thấy log của apache / mod_security cảnh bảo "Failed to execute" nhưng thật sự cái script này vẫn đã thực thi. Để xác minh có đúng điều này xảy ra hay không, em thử chèn thêm 1 dòng trong "blocker.sh": /bin/echo +$REMOTE_ADDR >> /tmp/badip.txt Sau đó tail dòng cuối cùng của /tmp/badip.txt để tìm IP cuối được blocker.sh thực thi rồi thử: cat /proc/net/ipt_recent/BLACKLIST | grep <ip>  
Chỉ cần 'grep' luôn thôi anh: grep <ip> /proc/net/ipt_recent/BLACKLIST  
Hì hì, thấy vậy mà khác đó em ;). grep đọc từng dòng trong file để match pattern. cat đọc trọn bộ nội dung file. Nếu cat trước rồi mới grep thì grep sẽ tìm các matching pattern của thông tin đã được cat (lưu trên memory). Đối với file có nội dung không thay đổi nhanh chóng thì grep thẳng luôn hoặc cat rồi grep cũng gần như nhau. Tuy nhiên, đối với file có nội dung thay đổi liên tục thì cat trước, grep sau sẽ bảo đảm ở một thời điểm nào đó thông tin được grep có thể hiện diện vì thông tin đó đã được tạm thời lưu trên memory chớ không thay đổi liên tục nữa. ]]>
/hvaonline/posts/list/36620.html#224973 /hvaonline/posts/list/36620.html#224973 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash) tac /proc/net/ipt_recent/BLACKLIST | grep <ip> ]]> /hvaonline/posts/list/36620.html#224976 /hvaonline/posts/list/36620.html#224976 GMT Nhờ tư vấn về bảo mật (DDos - X-Flash)

conmale wrote:
Hì hì, thấy vậy mà khác đó em ;). grep đọc từng dòng trong file để match pattern. cat đọc trọn bộ nội dung file. Nếu cat trước rồi mới grep thì grep sẽ tìm các matching pattern của thông tin đã được cat (lưu trên memory). Đối với file có nội dung không thay đổi nhanh chóng thì grep thẳng luôn hoặc cat rồi grep cũng gần như nhau. Tuy nhiên, đối với file có nội dung thay đổi liên tục thì cat trước, grep sau sẽ bảo đảm ở một thời điểm nào đó thông tin được grep có thể hiện diện vì thông tin đó đã được tạm thời lưu trên memory chớ không thay đổi liên tục nữa.  
Em nghĩ cat không đọc trọn bộ. Vì em đã từng cat 1 vài file to đùng hàng GB mà mem vài trăm Meg có làm sao đâu. cat có thể đọc theo từ block để ghi buffer thôi, và nó nhớ vị trí nào là kết thúc file nó đọc tới rồi stop, chứ không phải là nó read từng line kệ cho file có tăng thêm. Có lẽ nó read từng line khi đầu vào dạng character device thay vì block device thì phải. Muốn biết cụ thể chắc phải xem source của nó.]]>
/hvaonline/posts/list/36620.html#224983 /hvaonline/posts/list/36620.html#224983 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash)

myquartz wrote:

conmale wrote:
Hì hì, thấy vậy mà khác đó em ;). grep đọc từng dòng trong file để match pattern. cat đọc trọn bộ nội dung file. Nếu cat trước rồi mới grep thì grep sẽ tìm các matching pattern của thông tin đã được cat (lưu trên memory). Đối với file có nội dung không thay đổi nhanh chóng thì grep thẳng luôn hoặc cat rồi grep cũng gần như nhau. Tuy nhiên, đối với file có nội dung thay đổi liên tục thì cat trước, grep sau sẽ bảo đảm ở một thời điểm nào đó thông tin được grep có thể hiện diện vì thông tin đó đã được tạm thời lưu trên memory chớ không thay đổi liên tục nữa.  
Em nghĩ cat không đọc trọn bộ. Vì em đã từng cat 1 vài file to đùng hàng GB mà mem vài trăm Meg có làm sao đâu. cat có thể đọc theo từ block để ghi buffer thôi, và nó nhớ vị trí nào là kết thúc file nó đọc tới rồi stop, chứ không phải là nó read từng line kệ cho file có tăng thêm. Có lẽ nó read từng line khi đầu vào dạng character device thay vì block device thì phải. Muốn biết cụ thể chắc phải xem source của nó. 
Cứ: $ man cat thì ra ngay thôi mà.
The cat utility reads files sequentially, writing them to the standard output. The file operands are processed in command-line order. If file is a sin- gle dash (`-') or absent, cat reads from the standard input. If file is a UNIX domain socket, cat connects to it and then reads it until EOF. This com- plements the UNIX domain binding capability available in inetd(8). ....... The command: cat file1 - file2 - file3 will print the contents of file1, print data it receives from the standard input until it receives an EOF (`^D') character, print the contents of file2, read and output contents of the standard input again, then finally output the contents of file3. Note that if the standard input referred to a file, the second dash on the command-line would have no effect, since the entire contents of the file would have already been read and printed by cat when it encountered the first `-' operand.  
]]>
/hvaonline/posts/list/36620.html#224984 /hvaonline/posts/list/36620.html#224984 GMT
Pipe 'cat' to 'grep' hay 'grep' thẳng luôn /hvaonline/posts/list/36620.html#225021 /hvaonline/posts/list/36620.html#225021 GMT Pipe 'cat' to 'grep' hay 'grep' thẳng luôn Đối với file có nội dung không thay đổi nhanh chóng thì grep thẳng luôn hoặc cat rồi grep cũng gần như nhau. Tuy nhiên, đối với file có nội dung thay đổi liên tục thì cat trước, grep sau sẽ bảo đảm ở một thời điểm nào đó thông tin được grep có thể hiện diện vì thông tin đó đã được tạm thời lưu trên memory chớ không thay đổi liên tục nữa.   Đúng là cơ bản, mà đọc lại thì thấy hay quá anh ơi -:|- ]]> /hvaonline/posts/list/36620.html#225032 /hvaonline/posts/list/36620.html#225032 GMT Nhờ tư vấn về bảo mật (DDos - X-Flash)

conmale wrote:

quanta wrote:

conmale wrote:
... Đôi khi em thấy log của apache / mod_security cảnh bảo "Failed to execute" nhưng thật sự cái script này vẫn đã thực thi. Để xác minh có đúng điều này xảy ra hay không, em thử chèn thêm 1 dòng trong "blocker.sh": /bin/echo +$REMOTE_ADDR >> /tmp/badip.txt Sau đó tail dòng cuối cùng của /tmp/badip.txt để tìm IP cuối được blocker.sh thực thi rồi thử: cat /proc/net/ipt_recent/BLACKLIST | grep <ip>  
Chỉ cần 'grep' luôn thôi anh: grep <ip> /proc/net/ipt_recent/BLACKLIST  
Hì hì, thấy vậy mà khác đó em ;). grep đọc từng dòng trong file để match pattern. cat đọc trọn bộ nội dung file. Nếu cat trước rồi mới grep thì grep sẽ tìm các matching pattern của thông tin đã được cat (lưu trên memory). Đối với file có nội dung không thay đổi nhanh chóng thì grep thẳng luôn hoặc cat rồi grep cũng gần như nhau. Tuy nhiên, đối với file có nội dung thay đổi liên tục thì cat trước, grep sau sẽ bảo đảm ở một thời điểm nào đó thông tin được grep có thể hiện diện vì thông tin đó đã được tạm thời lưu trên memory chớ không thay đổi liên tục nữa.  
Bác conmale nói như thế này là không đúng với tinh thần của cơ chế pipeline. Cơ chế này được đề ra là để tận dụng tối đa thời gian làm việc của các khối chức năng của CPU, sao cho thời gian nghỉ của chúng là ít nhất. Vì vậy mà các khi sử dụng cơ chế này thì các giai đoạn thực hiện của các lệnh (IF, ID, EX, MEM, WB) gối lên nhau chứ lệnh sau không chờ lệnh trước thực hiện xong rồi nó mới thực thi. Như vậy trong trường hợp này thì output của 'cat' được bao nhiêu thì 'grep' sẽ thực hiện ngay trên đó chứ không phải chờ đến khi 'cat' thực hiện xong. Tuy nhiên có ngoại lệ với 1 số lệnh, ví dụ 'sort' thì phải chờ lệnh trước xong nó mới thực hiện. ]]>
/hvaonline/posts/list/36620.html#240993 /hvaonline/posts/list/36620.html#240993 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash)

Crunch wrote:

conmale wrote:

quanta wrote:

conmale wrote:
... Đôi khi em thấy log của apache / mod_security cảnh bảo "Failed to execute" nhưng thật sự cái script này vẫn đã thực thi. Để xác minh có đúng điều này xảy ra hay không, em thử chèn thêm 1 dòng trong "blocker.sh": /bin/echo +$REMOTE_ADDR >> /tmp/badip.txt Sau đó tail dòng cuối cùng của /tmp/badip.txt để tìm IP cuối được blocker.sh thực thi rồi thử: cat /proc/net/ipt_recent/BLACKLIST | grep <ip>  
Chỉ cần 'grep' luôn thôi anh: grep <ip> /proc/net/ipt_recent/BLACKLIST  
Hì hì, thấy vậy mà khác đó em ;). grep đọc từng dòng trong file để match pattern. cat đọc trọn bộ nội dung file. Nếu cat trước rồi mới grep thì grep sẽ tìm các matching pattern của thông tin đã được cat (lưu trên memory). Đối với file có nội dung không thay đổi nhanh chóng thì grep thẳng luôn hoặc cat rồi grep cũng gần như nhau. Tuy nhiên, đối với file có nội dung thay đổi liên tục thì cat trước, grep sau sẽ bảo đảm ở một thời điểm nào đó thông tin được grep có thể hiện diện vì thông tin đó đã được tạm thời lưu trên memory chớ không thay đổi liên tục nữa.  
Bác conmale nói như thế này là không đúng với tinh thần của cơ chế pipeline. Cơ chế này được đề ra là để tận dụng tối đa thời gian làm việc của các khối chức năng của CPU, sao cho thời gian nghỉ của chúng là ít nhất. Vì vậy mà các khi sử dụng cơ chế này thì các giai đoạn thực hiện của các lệnh (IF, ID, EX, MEM, WB) gối lên nhau chứ lệnh sau không chờ lệnh trước thực hiện xong rồi nó mới thực thi. Như vậy trong trường hợp này thì output của 'cat' được bao nhiêu thì 'grep' sẽ thực hiện ngay trên đó chứ không phải chờ đến khi 'cat' thực hiện xong. Tuy nhiên có ngoại lệ với 1 số lệnh, ví dụ 'sort' thì phải chờ lệnh trước xong nó mới thực hiện.  
Khía cạnh "pipeline" thì bồ nói đúng nhưng bồ không đề cập tới chuyện nội dung file (được cat hoặc được grep) thay đổi liên tục. Mục đích của vấn đề ở đây là lấy đúng thông tin trong một khoảng thời gian nào đó chớ khônng phải lấy sao cho nhanh.]]>
/hvaonline/posts/list/36620.html#241000 /hvaonline/posts/list/36620.html#241000 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash)

conmale wrote:
Khía cạnh "pipeline" thì bồ nói đúng nhưng bồ không đề cập tới chuyện nội dung file (được cat hoặc được grep) thay đổi liên tục. Mục đích của vấn đề ở đây là lấy đúng thông tin trong một khoảng thời gian nào đó chớ khônng phải lấy sao cho nhanh. 
Anh có thể giải thích rõ hơn tại sao khi nội dung file thay đổi liên tục thì grep trực tiếp không thể cho kết quả đúng? Theo em hiểu, nội dung file thay đổi liên tục tương đương với việc nhiều thao tác đọc/ghi trong khoảng thời gian ngắn. Giả sử tiến trình A gây ra sự thay đổi 'liên tục' với 1 file. Khi grep (hay cat) trên file này, hệ điều hành sẽ có trách nhiệm không để xảy ra xung đột (thông qua chức năng điều khiển tiến trình, điều khiển bộ nhớ...). Chẳng hạn khi đang grep thì tiến trình A sẽ bị tạm dừng thao tác ghi. Như vậy grep trên 1 file có nội dung thay đổi 'liên tục' cũng tương đương với thao tác trên 1 file nội dung ổn định mà thôi.]]>
/hvaonline/posts/list/36620.html#241236 /hvaonline/posts/list/36620.html#241236 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash)

Crunch wrote:

conmale wrote:
Khía cạnh "pipeline" thì bồ nói đúng nhưng bồ không đề cập tới chuyện nội dung file (được cat hoặc được grep) thay đổi liên tục. Mục đích của vấn đề ở đây là lấy đúng thông tin trong một khoảng thời gian nào đó chớ khônng phải lấy sao cho nhanh. 
Anh có thể giải thích rõ hơn tại sao khi nội dung file thay đổi liên tục thì grep trực tiếp không thể cho kết quả đúng? Theo em hiểu, nội dung file thay đổi liên tục tương đương với việc nhiều thao tác đọc/ghi trong khoảng thời gian ngắn. Giả sử tiến trình A gây ra sự thay đổi 'liên tục' với 1 file. Khi grep (hay cat) trên file này, hệ điều hành sẽ có trách nhiệm không để xảy ra xung đột (thông qua chức năng điều khiển tiến trình, điều khiển bộ nhớ...). Chẳng hạn khi đang grep thì tiến trình A sẽ bị tạm dừng thao tác ghi. Như vậy grep trên 1 file có nội dung thay đổi 'liên tục' cũng tương đương với thao tác trên 1 file nội dung ổn định mà thôi. 
Ngay cả trong hoàn cảnh bình thường, có nghĩa là nội dung một file không thay đổi dồn dập thì việc "cat" luôn luôn được thực thi nhanh hơn việc "grep" bởi vì "cat" chỉ đơn thuần "đọc" từng dòng rồi đẩy ra stdout hoặc "pipe" đi đâu đó. Còn "grep" thì phải thực thi "match" có nghĩa là không những đọc từng dòng mà nó còn phải tìm chuỗi trùng với mẫu (pattern) đã được đưa ra. Trong trường hợp nêu ra ở đây, có hai động tác xảy ra: cat rồi grep. Điều này có nghĩa thông tin đã được cat sẽ được (tạm) lưu trong buffer. Nói một cách tổng quát, A | B có nghĩa là B phải đợi thông tin từ "pipe", có nghĩa là nếu A chưa lấy được thông tin thì B chưa xảy ra và khi A đã hoàn tất lấy thông tin (cat) để "pipe" thì B sẽ xử lý phần đó trọn vẹn. Bồ hãy hình dung A và B là 2 công nhân và thay vì công nhân B phải lấy ra một chồng gạch rồi mới lựa ra viên gạch nào đúng mã số thì công nhân A thực hiện việc lấy gạch rồi chuyển cho công nhân B để lựa gạch. Nếu công nhân A chưa lấy hết một chồng gạch thì công nhân B đứng đó chờ. Trong trường hợp máy có nhiều CPU thì A và B có thể cùng làm việc song song như dạng công nhân A thảy viên gạch nào lên thì công nhân B đón lấy và tiếp nhận nếu viên gạch ấy đúng mã số (và nếu chỉ có một mình B vừa lấy gạch, vừa lựa gạch trong khi đống gạch thay đổi liên tục thì kết quả thu được sẽ khác hơn là A lấy gạch + B lựa gạch).]]>
/hvaonline/posts/list/36620.html#241327 /hvaonline/posts/list/36620.html#241327 GMT
Nhờ tư vấn về bảo mật (DDos - X-Flash)

conmale wrote:
Cứ: $ man cat thì ra ngay thôi mà.
The cat utility reads files sequentially, writing them to the standard output. The file operands are processed in command-line order. If file is a sin- gle dash (`-') or absent, cat reads from the standard input. If file is a UNIX domain socket, cat connects to it and then reads it until EOF. This com- plements the UNIX domain binding capability available in inetd(8). ....... The command: cat file1 - file2 - file3 will print the contents of file1, print data it receives from the standard input until it receives an EOF (`^D') character, print the contents of file2, read and output contents of the standard input again, then finally output the contents of file3. Note that if the standard input referred to a file, the second dash on the command-line would have no effect, since the entire contents of the file would have already been read and printed by cat when it encountered the first `-' operand.  
 
Sao em $man cat thì nội dung chỉ có như thế này thôi nhỉ, không có phần anh conmale ghi Code:
CAT(1)                           User Commands                          CAT(1)



NAME
       cat - concatenate files and print on the standard output

SYNOPSIS
       cat [OPTION]... [FILE]...

DESCRIPTION
       Concatenate FILE(s), or standard input, to standard output.

       -A, --show-all
              equivalent to -vET

      ...


EXAMPLES
       cat f - g
              Output f's contents, then standard input, then g's contents.

       cat    Copy standard input to standard output.

AUTHOR
      ...

REPORTING BUGS
       ...

COPYRIGHT
       ...

SEE ALSO
       tac(1).

       ...



GNU coreutils 8.10               February 2011                          CAT(1)
]]>
/hvaonline/posts/list/36620.html#241647 /hvaonline/posts/list/36620.html#241647 GMT
Pipe 'cat' to 'grep' hay 'grep' thẳng luôn /hvaonline/posts/list/36620.html#241658 /hvaonline/posts/list/36620.html#241658 GMT