Skip to main content

Posts

Showing posts with the label CCGU

[CLI] tail -F, F hoa F***

Là *NIX user, hẳn phải biết dùng lệnh tail để theo dõi một file (thường là file log). Mỗi khi có dòng mới ghi vào file, ta sẽ thấy được dòng đó: tail -f /var/log/syslog (Trên Ubuntu, có thể gõ "logger FAMILUG" để ghi một dòng vào syslog). Log ghi ra file mãi liệu có chán mà dừng lại? Chán thì không chán, nhưng các nhà viết phần mềm sẽ không ghi hàng GB log vào 1 file rồi để nó dùng hết ổ cứng trên máy rồi làm chương trình chết vì hết ổ cứng. Từ đó khai niệm "log rotate" ra đời. Mỗi file log cũ sẽ được đi chuyển, đổi tên mới (thường là thêm đuôi .1 .2 .3 ... vd: /var/log/syslog.1  và sau đó nếu cũ quá thì được nén lại bằng gzip cho tiết kiệm ổ cứng), chuyện này thường được làm hàng ngày hay hàng tuần. File log mới được tạo ra, cùng tên với file log cũ, nhưng giờ trống trơn. Xem thêm chương trình logrotate để biết thêm chi tiết. Nếu ai đã thử dùng -f để theo dõi file log, rồi may mắn hơn nữa, file log đó được rotate, từ ấy trờ đi, không thấy lệnh tail output ...

[CLI] watch - lót dép ngồi hóng

watch là một động từ, với nghĩa là "xem - theo dõi", kiểu như watching TV. Với ý nghĩa tương tự, command line `` watch `` sẽ cho phép bạn ngồi xem màn hình, như đang xem tivi. Chào hỏi kiểu CCGU : $ for cmd in whatis whereis which; do echo $cmd: `$cmd watch`; done whatis: watch (1) - execute a program periodically, showing output fullscreen whereis: watch: /usr/bin/watch /usr/share/man/man1/watch.1.gz which: /usr/bin/watch watch sẽ chạy một chương trình theo chu kỳ, hiển thị output đầy màn hình ~.~ Để theo dõi các process dùng nhiều CPU nhất trên máy , theo chu kỳ 2 giây (giả lập lệnh top):

[cmd] linux utilities - có gì cần thiết?

Một danh sách các command line tool tuyển chọn bởi FAMILUG. Những dòng hiện "nothing appropriate." là nhưng built-in command của bash hoặc là các tool chưa cài đặt trên máy chạy script này. ./linux-util.sh FAMILUG's list of essential Linux utilites 1.0 TOTAL: 80 man (1)              - an interface to the on-line reference manuals man (7)              - macros to format man pages ls (1)               - list directory contents cd: nothing appropriate. pwd (1)              - print name of current/working directory grep (1)             - print lines matching a pattern head (1)             - output t...

[CLI] nối dòng

Một bạn giấu tên hỏi: làm thế nào để nối nhiều dòng thành một dòng trong linux ? Trả lời: có rất nhiều cách để làm việc này, sau đây là vài cách đơn giản. Tạo đề bài để test: # for i in {1000..1005}; do echo $i; done 1000 1001 1002 1003 1004 1005 Xem thêm cách tạo dữ liệu giả ở đây: http://www.familug.org/2012/10/generate-random-data-part1.html

[bash] are you REALLY a bash user?

Nếu ngày nào cái màn hình trước mặt bạn cũng là cái terminal, hẳn  69% bạn là một người biết dùng terminal. Và nếu bạn dùng Ubuntu hay 96% các hệ điều hành Linux-based, thì bạn đang dùng bash trong cái terminal đó. Gõ thử xem mình có phải đang dùng bash không: $ echo $BASH_VERSION 4.3.18(1)-release Nếu câu trả lời là có (như trên ^) thì đúng là bạn đang dùng bash rồi. Vậy dùng bash thế nào cho nó đúng điệu :3 Hãy tận dụng những tính năng của nó. 1. for; while Bash giúp giải quyết các công việc lặp đi lặp lại bằng một vòng lặp, muốn ping 10 ip từ 192.168.1.2 -> 192.168.1.11? đơn giản: $ for i in {2..11}; do ping -w1 -c1 192.168.1.$i; done

[cmd] rev

$ whatis rev rev (1)              - reverse lines of a file or files $ echo familug | rev gulimaf Một bài toán có sử dụng rev như 1 thành phần quan trọng trong 1thuật toán thông minh: Yêu cầu: lấy tất cả những phần sau dấu / sau cùng /etc/pacman.d/gnupg/gpg.conf /etc/pacman.d/gnupg/pubring.gpg~ /etc/pacman.d/gnupg/secring.gpg /etc/pacman.d/mirrorlist.pacnew

awk và cut

Các tiện ích UNIX (UNIX utilities) thường nhận đầu vào là text, và output ra cũng là text. Để các chương trình nối lại được với nhau, tức dùng output của chương trình này làm imput cho chương trình kia, người ta sử dụng pipeline (" | "). Cũng vì điều nói trên, mà việc bóc tách dữ liệu từ output của 1 chương trình là cần thiết, bởi 1 chương trình có thể sinh ra nhiều dòng text, trong khi bạn chỉ cần 1 dữ liệu nào đó trong đống text đấy. Bạn có thể copy bằng tay, nhưng bạn sẽ không muốn làm như thế nếu phải làm 1000 lần, okay? 2 trong số nhiều công cụ phục vụ mục đích trên là "cut" và "awk", mục đích chính (được dùng nhiều nhất) là dùng để cắt theo cột. Các ví dụ sau sẽ minh họa tính năng của cut và awk $ echo "one/two/three" | cut -d'/' -f1 one $ echo "one/two/three" | cut -d'/' -f2 two $ echo "one/two/three" | cut -d'/' -f3 three $ echo "one/two/three" | cut -d'/' -f2- t...

[linux] procps = ps + kill + sysctl + top + watch + ...

Hỏi và trả lời theo phong cách CCGU: hvn@u1204: ~ () $ whatis procps procps: nothing appropriate. hvn@u1204: ~ () $ whatis ps ps (1)               - report a snapshot of the current processes. hvn@u1204: ~ () $ which ps /bin/ps hvn@u1204: ~ () $ dpkg -S `which ps` #hoặc dpkg -S $(which ps) procps: /bin/ps hvn@u1204: ~ () $ apt-cache show procps

[CCGU] Các câu lệnh để tìm hiểu câu lệnh (Phần 2)

Phần 1 ở đây đã phần nào giúp bạn giải quyết các vấn đề gặp phải khi tìm hiểu 1 câu lệnh. Phần 2 tiếp tục với những câu lệnh  sẽ giúp ích khi bạn cần tìm hiểu về các câu lệnh / package Thay nội dung phần trong và dấu <> thành từ khóa bạn muốn tìm hiểu 1. Tìm tên của package Nếu bạn không biết chính xác tên package, có một số cách để tìm nó: - Tìm bằng apt-cache search: apt-cache search <tu_khoa>

awk vs cut

mỗi tool sẽ chiến thắng trong trường hợp của nó: Giả sử bạn muốn ghi ra các "cột" rời rạc, `awk` thường được ưa chuông hơn. hvn@lappy: ~ $ awk -F : '{print $1,$3}' /etc/passwd root 0 daemon 1 bin 2 sys 3 sync 4 games 5 hvn@lappy: ~ $ cut -d':' -f1,3 /etc/passwd root:0 daemon:1 bin:2 sys:3 sync:4 games:5 output của `cut` có dấu ':'.

[bash] cd đến thư mục vừa tạo

hvn@hvnatvcc: ~ $ mkdir -p hello/this/is/familug/dot/org hvn@hvnatvcc: ~ $ cd !$ cd hello/this/is/familug/dot/org hvn@hvnatvcc: ~/hello/this/is/familug/dot/org $ pwd /home/hvn/hello/this/is/familug/dot/org !$ là `yank-last-arg` từ man bash:        yank-last-arg (M-., M-_)               Insert  the  last argument to the previous command (the last word of the previous history entry).  With a numeric argument, behave exactly like yank-nth-arg.  Successive calls to yank-last-arg move back through the history list, inserting the last  word  (or  the  word  specified  by the argument to the first call) of each line in turn.  Any numeric argument supplied to these successive calls determines the direction to move through the history.  A negative argument  switches  the  direction through  the  history (back...

[bash] Dùng bash thay máy tính cầm tay

trước tớ đã có bài viết về dùng python để thay máy tính cầm tay, hôm nay xin thêm 1 bài về dùng bash để tính toán với các số nguyên. Và những điều nay không ở đâu xa lạ cả, ngay trong man bash . Chú ý là chỉ dùng bash để tính toán các phép tính SỐ NGUYÊN: ta dùng cấu trúc $((biểu thức cần tính)) hvn@lappy: ~ $ echo $((2**62)) 4611686018427387904 hvn@lappy: ~ $ echo $((2**63)) -9223372036854775808 hvn@lappy: ~ $ echo $((2**64)) 0 hvn@lappy: ~ $ echo $((2**63)) -9223372036854775808 hvn@lappy: ~ $ echo $((15 % 4)) 3 hvn@lappy: ~ $ echo $((7 / 4)) 1 hvn@lappy: ~ $ echo $((1 + 1)) 2

[Tips] lại bash

nếu bạn dùng nó hàng ngày tốt nhất là hãy biết nó hiếm người đọc "man bash" mặc dù họ dùng bash nhiều hơn bất cứ câu lệnh khác mà họ đã từng "man" bash không thần thánh, nhưng cũng ko stupid như bạn tưởng :v Sau đây là vài tips tớ hút ra từ "man bash": - về đầu dòng lệnh : ctrl a - xuống đuôi dòng lệnh: ctrl e - xóa màn hình: ctrl l - xóa 1 từ đằng trước con trỏ: ctrl w - xóa đến đầu dòng: ctrl u - xóa đến cuối dòng: ctrl k - chọn câu lệnh trước: ctrl p (previous) - chọn câu lệnh sau: ctrl n (next) - sang trái 1 ký tự: ctrl b (back) - sang phải 1 ký tự: ctrl f  (forward) - đo độ dài của 1 chuỗi : ${#bien_chua_chuoi_muon_do} VD: hvn@lappy: /var/log/apache2 $ s='hvnsweeting' hvn@lappy: /var/log/apache2 $ echo ${#s} 11 hvn@lappy: /var/log/apache2 $ s2='i want to ' hvn@lappy: /var/log/apache2 $ echo ${#s2} 10 (vậy là bạn không bao giờ phải nhấc tay lên để bấm các phím navigator-mũi tên nữa - đúng triết lý của vim :x...

[CCGU] awk - pattern scanning and text processing language

Tiếp tục loạt bài viết CCGU, tớ sẽ giới thiệu 2 công cụ cực mạnh để xử lý text là sed và awk. sed và awk đều là core utility của các hệ điều hành UNIX, Linux. Chúng vừa là tên 1 chương trình, vừa là tên 1 ngôn ngữ lập trình. http://en.wikipedia.org/wiki/AWK http://en.wikipedia.org/wiki/Sed hvn@lappy: ~ $ whatis sed sed (1) - stream editor for filtering and transforming text hvn@lappy: ~ $ whatis awk awk (1) - pattern scanning and text processing language awk có tính năng xử lý dữ liệu theo cột, còn sed thì lại xử lý theo dòng. Bài này sẽ viết về awk và câu lệnh sử dụng awk phổ biến nhất ;) và một khi biết câu lệnh này rồi, đảm bảo bạn sẽ dùng nó rất thường xuyên: hvn@lappy: ~/xzone $ awk -F ':' '{ print $1,$3 }' /etc/passwd root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 Phân tích:

mkdir và những nghệ thuật quanh nó!

Công việc tạo 1 thư mục là việc ai dùng máy tính cũng đều phải làm. Việc đơn giản này đôi khi nếu không giải quyết 1 cách nghệ thuật lại khiến bạn vô cùng vất vả ;) xem nhé! Nếu phải tạo 100 folder có kiểu như : team001, team002 ... bạn sẽ làm gì? Tớ đã thấy người ta mở file explorer lên, tạo 1 folder, sửa tên 1 cái thành team001 rồi copy nó ra 10 hay 100 lần và hì hục sửa từng cái tên? :)) bắt đầu cảm thấy đau khổ rồi chứ? Trên bash có thể dùng lệnh sau để tạo 100 folder với tên như vậy: famihug@hvn:~/TestRoom/LearnMkdir$ mkdir team{001..100} Còn team1 , team2 ... team100? famihug@hvn:~/TestRoom/LearnMkdir$ mkdir team{1..100} Còn teamA, teamB..., teamZ famihug@hvn:~/TestRoom/LearnMkdir$ mkdir team{A..Z} Thế teamHVN, teamCICI, teamNVH...?

[CCGU] cd,pwd - di chuyển loanh quanh

vì một thế giới không bao giờ đứng yên ;) Title phụ 2: cd, pwd - biết mình ở đứng đâu trong cuộc đời này ^^ Bắt đầu 1 quá trình tìm hiểu câu lệnh, con chuột bạch đầu tiên là lệnh cd 1. cd - C hange D irectory famihug@hvn:~$ whatis cd cd: nothing appropriate. famihug@hvn:~$ man cd No manual entry for cd famihug@hvn:~$ which cd famihug@hvn:~$ whereis cd cd: đúng như các cụ chém, vạn sự khởi đầu nan :D sử dụng "các câu lệnh tìm hiểu câu lệnh" mà kết quả toàn trả về không thấy không có. Tạm dừng nói về cd , hãy trả lời câu hỏi : tại sao các câu lệnh trả về kết quả như thế?

[CCGU] Các câu lệnh để tìm hiểu câu lệnh

29-04-2012:update : apropos Để dừng bạn thôi hỏi những câu như: ls , cd là cái gì, nó viết tắt của từ gì không thì bố ai mà nhớ được, nó đặt ở đâu... (bạn có 1 lợi thế cực lớn nếu biết Tiếng Anh, bởi các tên các chương trình thường là viết tắt của một hay vài từ tiếng anh nào đó)  Hãy hỏi những gì muốn biết với cái terminal của bạn : 0. apropos - tìm kiếm công cụ famihug@hvn:/home/famihug% whatis apropos                                     apropos (1)          - search the manual page names and descriptions Bạn cần thực hiện một công việc nào đó, có thể hệ điều hành bạn đang dùng có thể giúp nhưng bạn không biết tool mình cần tên là gì - apropos sẽ làm việc đó. apropos tìm kiếm trong các trang hướng dẫn hay đoạn mô tả phần mềm từ khóa bạn yêu cầu....

[CCGU] CLI căn bản

CLI là gì? Command-line interface . Interface là gì? tớ sẽ giải thích 1 cách dễ hiểu chứ không đảm bảo đúng hay chính xác :D Interface là cách các đối tượng giao tiếp với nhau.Ở đây ta xét 1 đối tượng là người, 1 đối tượng là chương trình máy tính. Có 2 loại Interface thường được nhắc đến là GUI và CLI (để ý chữ I ở cuối). GUI = graphical user interface : người dùng và chương trình giao tiếp với nhau thông qua các nút bấm, hình ảnh ... Tiêu biểu nếu người dùng đồng ý thì bấm vào nút OK, không thì bấm nút Cancel CLI = command-line interface: người dùng và chương trình giao tiếp với nhau thông qua các dòng lệnh (text). VD: nếu người dùng đồng ý thì gõ vào phím y rồi nhấn enter, không thì bấm phím n rồi gõ Enter

[CCGU] Chuẩn bị

Để theo loạt bài viết này, bạn cần chuẩn bị những điều dưới đây: - Tính kiên trì , theo đến cùng các bài viết. - Tinh thần tốt , đừng nhìn thấy toàn chữ mà hoảng! thật ra toàn những thứ rất đơn giản. - Một cái hệ điều hành nhân Linux (Ubuntu, Fedora, Mint... tùy!). Nếu bạn muốn dùng trên Windows thì hãy tự làm khó mình với MinWG. - Tiếng Anh hoặc ít nhất là bạn biết tra từ điển. Bởi loạt bài viết này không thể dạy bạn tất cả mọi thông tin về các công cụ, chúng tôi chỉ đưa ra những ví dụ thiết thực, muốn tìm hiểu thêm bạn phải tự đọc. - Khả năng nói ra ý kiến của mình. Hãy comment những ý kiến của bạn, những suy nghĩ của bạn để chúng ta có thể cùng làm tốt hơn. Không hiểu ở đâu, hỏi ở đấy, cố đặt câu hỏi 1 cách dễ hiểu và chính xác. - Sẵn sàng cùng chúng tôi viết bài cho "khóa học" này ;) Sẵn sàng tất cả những điều trên rồi chúng ta sẽ bắt đầu! Bài tiếp: CLI căn bản - link sẽ update sau.

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG