|
|
À, 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"?
|
|
|
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.
|
|
|
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ể.
|
|
|
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.
|
|
|
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.
|
|
|
PhanPhungTien wrote:
Muốn thêm bất cứ đường dẫn nào vào PATH, bạn gõ :
Code:
path= /*đường dẫn bạn cần*
Ví dụ nha :
Code:
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\ProgramFiles\Microsoft Visus;C:\Program Files\Microsoft Visual Studio\VC98\bin
Nếu gõ như bạn thì các đường dẫn có sẵn trong biến path sẽ mất hết và thay vào đó là đường dẫn mới đưa vào.
Để có thể "thêm vào" một đường dẫn mới vào biến path thì phải làm như sau:
Code:
path=%path%;đường\dẫn\mới\cần\thêm\vào
Tuy nhiên cách này sau khi thêm vào trong biến path một đường dẫn mới rồi thoát khỏi command prompt thì khi vào lại biến path vẫn như cũ (chưa có đường dẫn mới).
Để có thể có hiệu lực lâu dài thì: System Properties ->Tab Advanced -> phần Environment Variables -> phần System variables -> tìm đến biến path -> nhấn Edit để thêm vào.
|
|
|
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.
|
|
|
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ử.
|
|
|
learn2hack wrote:
Mình có tìm ra 1 cách tối ưu so với phương án 2 mình đưa ra ở đầu dựa trên việc tách bảng như thế này:
Code:
SELECT DISTINCT Customers.name FROM Customers LEFT JOIN Orders ON Customers.ID=Orders.ID WHERE NOT (SELECT COUNT(Orders.ID) FROM Orders WHERE Orders.ID=Customers.ID AND Orders.product!='xoai')
Em thấy thế này thì cũng load nặng như cái đầu của anh đưa ra.
|
|
|
Bạn vào máy khác tìm cái file đó rồi chép vào thư mục thích hợp thử xem.
|
|
|
tuanhung303 wrote:
mình xài từ khóa ubuntu error 17 grub loading và vào trang này để nhận được kết quá https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows
cuối cùng thì install lại grub vào cái (hd0) của mình, nhưng mà mình không hiểu, sai cái find /boot/grub/stage1 nó lại không ra mà cái lệnh find /grub/stage1 nó lại ra được nhỉ
đúng là từ hồi xài linux học được nhiều thật, window thì cứ cài soft rồi kiếm crack thế là nó làm dùm mình
Có phải bạn cài cái /boot trên một partition riêng biệt?
Khi cái /boot đặt ở 1 partition riêng biệt và bạn cài đặt thằng GRUB lên cái thư mục /boot này thì mặc dù trong hệ thống filesystem của bạn thấy là cái GRUB này đặt tại /boot/grub nhưng thằng GRUB thì nó cho là /grub. Điều này đảm bảo rằng khi bạn có nhiều hệ điều hành cùng sử dụng cái GRUB này thì bất chấp việc các hệ điều hành mount cái phân vùng này vào đâu (không nhất thiết là /boot) thì GRUB không cần quan tâm tới vì nó cứ hiểu là /boot.
|
|
|
trongltx wrote:
Mình nhớ ko nhầm thì một số thư mục không hoạt động với Sym link ,chẳng hạn như /var/cache/apt/archives.Nếu mình để archives là 1 Sym link thì mình không thể dùng apt hoặc dpkg đc,mặc dù các file trong đó đều đầy đủ.
Bạn đã thử chưa? Mình nghĩ chắc phải dùng phương pháp này thôi, chứ mình chưa nghĩ ra cách nào hay hơn.
Bạn thử tạo symbolic link rồi test thử xem rồi lên thảo luận tiếp.
|
|
|
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.
|
|
|
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?
|
|
|
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.
|
|
|
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.
|
|
|
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?
|
|
|
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:~$
|
|
|
Bướm Đêm wrote:
Sao mình cài không được nhỉ hic hic
link mình tải đây http://www.vmware.com/appliances/directory/649
http://img53.imageshack.us/img53/2797/35090750zo2.jpg
Bạn chạy bằng virtual PC của Microsoft rồi dùng thằng vmware converter thử xem.
|
|
|
trongltx wrote:
Chào mọi người,vấn đề là khi mình cài Linux(Ubuntu) đã chót phân vùng 1 số partition có size hơi nhỏ,ví dụ như /usr và sau 1 thời gian thì kích thước của dữ liệu đã gần bằng kích thước của phân vùng,mình cũng đã tìm hiểu qua về 1 số tool để resize phân vùng nhưng theo mình cảm thấy thì hơi phức tạp và thiếu an toàn,và mình thấy có một cách để giải quyết tam thời vấn đề này,vì mình mới tìm hiểu về linux nên không biết liệu phương pháp này có an toàn và có gì sai về mặt nguyên tắc trên linux ko?mong mọi người chỉ giùm.
Phương pháp của mình là:vì phân vùng /usr của mình đang bị thiếu kích thước nên mình sẽ tạo 1 thư mục /xyz trên một phân vùng khác có size lớn hơn,sau đó chmod và chown đúng với /usr,rồi mount /xyz đến /usr bằng tiên ích mount trên linux:mount --bind /xyz /usr.
Cảm ơn mọi người.
Sau khi thực hiện lệnh trên thì khi truy xuất /usr, tạm thời bạn sẽ "không còn thấy những thứ trước đây mà bạn thấy", mà thay vào đó sẽ thấy được những gì có trong cái /xyz kia. Lúc này (sau khi đã mount xong) khi bạn lưu trữ những gì tại hai nơi này (/xyz và /usr) thì đều được nhìn thấy từ hai nơi, tuy nhiên dữ liệu chỉ thật sự lưu ở /xyz. Chỉ khi umount thì mới có thể" thấy lại những gì trong /usr mà trước đây bạn thấy".
|
|
|
quanta wrote:
Chuyện gì xảy ra nếu bạn cài boot loader lên /boot - là một logical partition?
Trong quá trình khởi động của máy tính thì có giai đoạn đọc thông tin trong MBR để xác định boot loader nằm ở partition nào để chuyển điều khiển cho nó. Nếu partition chứa /boot là logical partition thì ngay lúc này sẽ không xác định được.
Tại sao không xác định được? => MBR chỉ có 512 bytes nên chỉ lưu được 1 đoạn chương trình nhỏ và partition table, partition table chỉ chứa được 4 entries lưu thông tin về 4 primary partition nên từ đây không xác định được chính xác logical partition ở đâu mà chỉ biết được extended partition (là một trong 4 primary partition và chứa nhiều logical partion).
Giải thích như vậy có được không anh quanta?
|
|
|
conmale wrote:
Không. MAC address có capture được cũng chỉ là MAC của router đứng trước web service.
Cám ơn chú conmale. Cháu cũng nghĩ vậy, theo mô hình hoạt động của TCP/IP stack thì khi nhận được frame dữ liệu thì router sẽ "lột bỏ" các phần header và trailer của frame rồi để lấy phần IP datagram ra "xử lý", nếu cần định tuyến thì sẽ chuyển đến interface thích hợp rồi re-encapsulate lại thành frame mới với source MAC mới rối chuyển đi.
khanhqhi wrote:
Vậy thì không biết máy A có biết được địa chỉ MAC của cả 2 adapter có ip là 111.111.111.2 và 222.222.222.2 của router ko các pro ?
Chỉ biết được MAC address của interface cùng mạng với nó (dùng gói tin ARP request để tìm MAC address).
friendshipfan_boy wrote:
@khanhqhi: Tuy nhiên chả biết tại sao trong phần test của thầy Phương lại ghi là có ) Hơn nữa với câu hỏi đầu tiên đáp án cũng là có nốt =.='
(P/s: Mai bọn em thi Nhập môn Mạng nên tranh thủ hỏi tẹo )
thầy Phương là ai? Có như thế nào? Bạn có thể thích rõ.
|
|
|
conmale wrote:
Không. Web (HTTP) không có bất cứ thứ gì liên quan (hoặc đề cập) đến MAC cả.
Giả sử có chạy một chương trình capture gói tin trên webserver thì có thể có một số gói tin nào có mang theo địa chỉ MAC của máy gửi không chú conmale? (theo mô hình bạn knt đưa ra thì client và webserver chỉ bị tách biệt bởi một router.)
|
|
|
Kiểm tra trong C:\Windows\System32 có tồn tại các file thực thi tương ứng với các lệnh bạn gõ không. Ví dụ: ipconfig, arp...
Nếu đã có rồi mà vẫn không được thì kiểm tra tiếp biến path trong command prompt:
Code:
hoặc có thể xem trong phần Environment Variables xem biến path có chứa
C:\Windows\System32 chưa?
Nếu chưa thì thêm vào.
|
|
|
quanta wrote:
/boot mà là logical thì "đưa chương trình hệ thống vào máy tính" làm sao được?
Như thế là thế nào hả anh quanta, anh có thể giải thích rõ dùm em không?
quanta wrote:
Ừ đúng rồi, nó cho cài trên logical partition bình thường, nhưng mà đấy là /, ở đây tớ đang nói /boot mà. Thường thì /boot được đặt riêng biệt trên một partition khi mà bạn cài nhiều distro trên một máy.
Như vậy thì khi chỉ cài một distro trên một máy thì không cần đặt /boot trên một partition riêng biệt?
|
|
|
knt wrote:
Các bạn cho mình hỏi mạng gồm các thiết bị:
1. Máy A có địa chỉ IP 111.111.111.1
2. Router R có 2 adapter ứng với 2 điạ chỉ IP: 111.111.111.2 và 222.222.222.2
3. Webserver S có địa chỉ IP 222.222.222.1
Khi người dùng ở máy A truy cập vào S thì S có biết được địa chỉ MAC của A hay không?
Mong mọi người giải thích hộ.
Ý của bạn có phải là truy cập vào trang web nào đó đặt ở S?
|
|
|
cockvn wrote:
Sao kỳ zậy ta? Cả cái forum không có ai rành về món này sao mà không thấy ai trả lời em vậy nhỉ ?
Như thế này thì không ai muốn trả lời cho bạn.
|
|
|
Mấy bác ơi cho em hỏi. Em thường nghe nói MSDN nhưng không biết nó dùng cho việc gì. Cám ơn.
|
|