New FAMILUG

The PyMiers

Showing posts with label CCGU. Show all posts
Showing posts with label CCGU. Show all posts

Thursday, 15 September 2016

[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 gì ra nữa. Lúc đó phải dùng F to.

Có một sự khác biệt tinh vi ở đây, khi dùng tail -F FILENAME thì tail sẽ theo dõi file này kể cả khi nó bị thay thế bởi file khác cùng tên (theo dõi bằng tên). Trong khi đó tail -f FILENAME lại theo dõi file descriptor, tức nếu file này có bị đổi tên thì lệnh tail vẫn tiếp tục theo dõi.

Vậy, nếu đang theo dõi file log, hãy dùng -F.

Trích man tail
       -f, --follow[={name|descriptor}]
              output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent

       -F     same as --follow=name --retry

       --retry
              keep trying to open a file even when it is or becomes inaccessible; useful when following  by
              name, i.e., with --follow=name

Saturday, 4 July 2015

[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):

Saturday, 8 November 2014

[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 the first part of files
tail (1)             - output the last part of files
cut (1)              - remove sections from each line of files

Friday, 24 October 2014

[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

Thursday, 26 June 2014

[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

Thursday, 10 April 2014

[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

Monday, 3 March 2014

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-
two/three
$ echo "one:two:three" | cut -d':' -f2-
two:three
$echo "/one/two/three" | cut -d'/' -f2
one

Và awk

hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $1}'
one
hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $1}'
one
hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $2}'
two
hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $1 $2}'
onetwo

Từ các output nói trên, hãy nhớ rằng cut và awk đều coi vị trí số 1 là vị trí trước "separator" đầu tiên (separator được chỉ định bởi -d với cut và -F với awk)

Wednesday, 9 October 2013

[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

Friday, 17 May 2013

[CCGU] Giới thiệu về shell

Shell là gì?
shell là một loại chương trình dùng để chạy các chương trình khác.

Các shell phổ biến có thể kể đến
  1. sh
  2. bash
  3. zsh
  4. fish
  5. csh
  6. ksh
  7. powershell (Windows)
  8. ...
Làm gì với shell?

Thursday, 18 April 2013

[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>

Thursday, 24 January 2013

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 ':'.

Tuesday, 8 January 2013

[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 or forward).  The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified.

Monday, 10 December 2012

[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

Saturday, 17 November 2012

[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 )

từng ấy tips chắc cũng đủ để "made your day" :D

Saturday, 10 November 2012

[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:

Saturday, 7 April 2012

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...?

Saturday, 31 March 2012

[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 - Change Directory
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. Ví dụ muốn tìm công cụ liên quan đến network:
famihug@hvn:/home/famihug%apropos network                                  
interfaces (5)       - network interface configuration for ifup and ifdown
aseqnet (1)          - ALSA sequencer connectors over network
avahi-autoipd (8)    - IPv4LL network address configuration daemon
byteorder (3)        - convert values between host and network byte order
ctstat (8)           - unified linux network statistics
dhclient-script (8)  - DHCP client network configuration script
endhostent (3)       - get network host entry
...

Friday, 30 March 2012

[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.