Command line thường dùng

Linux is sexy.jpg

Trong quá trình phân tích dữ liệu, tôi thường làm việc trực tiếp trên môi trường UNIX. Nơi mà bạn chỉ có màn hình nền đen chữ trắng (terminal, command line) để tương tác với hệ thống (thu thập, quan sát, chỉnh sửa, chia sẻ dữ liệu). Lý do là vì bạn thường phải thuê server bên ngoài như Amazon và họ chỉ cung cấp cho bạn môi trường tương tác chính là từ dòng lệnh. Bài viết này xin tổng hợp lại những command line mà tôi thường dùng nhất để tiện cho các bạn mới nhập môn tham khảo và áp dụng.

Hy vọng sự linh hoạt của các dòng lệnh này có thể giúp bạn trở thành một nhà khoa học dữ liệu hiệu quả và năng suất hơn. Bạn sẽ học được cách kết hợp các công cụ dòng lệnh nhỏ nhưng mạnh mẽ này với nhau để nhanh chóng thu thập, khám phá và xây dựng mô hình dữ liệu của bạn.

Download file

Áp dụng trong tình huống bạn muốn download/upload dữ liệu từ bên ngoài qua giao thức HTTP hoặc SSH. Hay khi bạn cung cấp một reproducible document gồm các thư viện cần cài đặt để chia sẻ cho các nhóm làm việc của mình, nhờ vậy mà mọi người không cần mất công phải mở browser và đi vào từng trang web để download/upload.

HTML protocol

curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.2.10.tgz

retrieving a software package.gif

SSH protocol

scp mongodb-osx-ssl-x86_64-3.2.10.tgz ubuntu@192.168.1.1:~/hong/ # upload file to server
scp ubuntu@192.168.1.1:~/hong/mongodb-osx-ssl-x86_64-3.2.10.tgz ~/Download/ # download file from server

upload file using scp.gif

Quản lý các tiến trình

Nếu bạn làm việc với Big Data thì chắc chắn bạn không chỉ đơn thuần làm việc với Spark hay MongoDb mà còn nhiều công nghệ khác như NodeJs, Redis, Nginx, Jenkin, Glassfish, Mesos, … Việc theo dõi/monitor sự hoạt động của các tiến trình là cần thiết khi ứng dụng của bạn đã online. Các lệnh dưới đây giúp bạn bắt bệnh và chữa bệnh nhanh chóng khi hệ thống của bạn gặp trục trặc về hiệu suất có thể dẫn đến sụp đổ.

Xem top các tiến trình đang hoạt động, sắp xếp theo cpu/mem/…

top -o cpu

Monitoring Server Processes.gif

Xem tất cả các tiến trình

Dùng để in ra tất cả các tiến trình dưới dạng danh sách. Từ đó, ta có thể kết hợp với cơ chế pipe “|” để tìm kiếm, lọc ra các tiến trình ta muốn quan sát và xử lý.

ps aux # liệt kê tất cả các tiến trình
ps aux | grep spark # tìm tiến trình tên spark

ps = processes
a = xem tiến trình của all users
u = hiển thị tiến trình của user/owner
x = hiển thị các tiến trình khác

USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
hongong           2430  49.8 11.7  4381484 985460   ??  S     5:39PM   3:54.26 /Applications/WordPress.com.app/Contents/Frameworks/WordPress
_windowserver      160  14.9  1.1  4500692  91072   ??  Ss   11:45AM  16:47.90 /System/Library/PrivateFrameworks/SkyLight.framework/Resource
hongong           2428   9.0  2.0  4202740 166116   ??  S     5:39PM   1:04.25 /Applications/WordPress.com.app/Contents/MacOS/WordPress.com

Tắt một tiến trình khi biết trước mã của tiến trình (pid)
kill –

kill -9 24601

Tắt một tiến trình khi biết trước một phần tên của tiến trình
pkill – -f

pkill -15 -f spring

Tìm kiếm bằng lệnh Zgrep/Grep

zgrep/grep -i   # tìm dòng nội dung khớp với chuỗi tìm kiếm (zip file thì dùng zgrep)

# các option
-n: hiển thị số dòng
-i: không phân biệt hoa thường
-r: đệ quy qua các file
-c: đếm số dòng khớp với lệnh tìm kiếm
-v: phủ định kết quả tìm kiếm
--color: hiển thị màu kết quả khớp lệnh

Tìm kiếm bằng lệnh find

find path expression # template tìm kiếm
find ~/Document -name "someimage.jpg" # ví dụ
find ~ -name *.plist -and -not -path *QuickTime* -and -not -path *Preferences* # kết hợp tìm kiếm loại trừ

Quan sát log file

Khi phát triển các ứng dụng lớn, bạn nên lưu lại lịch sử của các tiến trình thực thi. Mỗi khi gặp sự cố, bạn có thể lần lại để bắt bệnh và sửa chữa kịp thời. Tuy nhiên, các file log thường rất lớn, có khi lớn hơn cả dữ liệu bạn sử dụng (có khi lên đến vài chục Gb) nên bạn không thể sử dụng các editor thông thường để mở. Vì vậy, học cách quan sát và tương tác với file log giúp bạn tiết kiệm thời gian và tài nguyên hệ thống nhiều hơn.

Sử dụng lệnh cat/less

cat error.log # in toàn bộ nội dung
less error.log # in một phần nội dung, có thể điều hướng bằng các phím như j, k, l, h, ...
less -N error.log # như trên nhưng có đánh chỉ số dòng
less -M error.log # như trên nhưng hiển thị thêm thông tin phần trăm

view log file.gif

Cách di chuyển trong LESS

spacebar|^F 	cuộn qua một trang tiếp theo
^B				cuộn qua một trang trước đó
G 				di chuyển đến cuối file
10G 			di chuyển đến đầu dòng thứ 10

/ tìm string khớp với nội dung file
n 				di chuyển đến kết quả tìm kiếm tiếp theo
N 				di chuyển đến kết quả tìm kiếm trước đó
q 				thoát

Sử dụng lệnh tail/head

tail/head là hai lệnh tương tự nhau, một lệnh để xem các dòng cuối của file và một lệnh để xem các dòng đầu tiên của file.

tail error.log # xem top 10 dòng cuối file
tail -n 100 error.log # xem top 100 dòng cuối file
tail -n 100 error.log | more # xem top 100 dòng cuối file, đọc theo định dạng của lệnh less

Xem hướng dẫn

Giúp tìm hiểu thêm về các thông số của lệnh mà bạn đang muốn sử dụng.

$man tail
TAIL(1)                   BSD General Commands Manual                  TAIL(1)

NAME
     tail -- display the last part of a file

SYNOPSIS
     tail [-F | -f | -r] [-q] [-b number | -c number | -n number] [file ...]

DESCRIPTION
     The tail utility displays the contents of file or, by default, its standard input, to the standard output.

     The display begins at a byte, line or 512-byte block location in the input.  Numbers having a leading plus (`+') sign are
     relative to the beginning of the input, for example, ``-c +2'' starts the display at the second byte of the input.  Num-
     bers having a leading minus (`-') sign or no explicit sign are relative to the end of the input, for example, ``-n 2''
     displays the last two lines of the input.  The default starting location is ``-n 10'', or the last 10 lines of the input.

Nén và giải nén file

Bạn sẽ thật sự cảm ơn những người đã phát minh ra giải thuật nén và giải nén. Nhờ có họ mà dữ liệu truyền qua internet được giảm tải xuống từ 40-50%, giúp tiết kiệm rất nhiều thời gian và chi phí download/upload.

# ZIP – Cross Platform
zip -r archive_name.zip folder_to_compress # To compress
unzip archive_name.zip # To extract
zip -r -X archive_name.zip folder_to_compress # make a zip without those invisible Mac resource files such as “_MACOSX” or “._Filename” and .ds store files, use the “-X” option.

# TAR.GZ – Cross Platform
tar -zcvf archive_name.tar.gz folder_to_compress # To compress
tar -zxvf archive_name.tar.gz # To extract

# TAR.BZ2 – Cross Platform
tar -jcvf archive_name.tar.bz2 folder_to_compress # To compress
tar -jxvf archive_name.tar.bz2 # To extract

# GZ
gzip folder_to_compress # To compress
gunzip archivename.gz # To extract

Editing dòng lệnh

Lưu ý: terminal/command line không phải editor quen thuộc nên các phím điều hướng sẽ khác đôi chút. Do đó, các bạn mới làm quen nên tập sử dụng các phim tắt dưới đây để hạn chế sự lúng túng và mất thời gian khi điều hướng qua lại giữa các lệnh.

Kí hiệu ^: Control

⌃C|D	huỷ lệnh bất kỳ
⌃A	di chuyển đến đầu dòng
⌃E	di chuyển đến cuối dòng
⌃U	xoá từ con trỏ đến hết đầu dòng
⌃K	xoá từ con trỏ đến hết cuối dòng
⌃W	xoá một từ nằm trước con trỏ
Option + click line	di chuyển con trỏ đến vị trí click
Tab Tab	hiển thị danh sách các khả năng cho auto-complete
Cmd + ~	focus qua lại giữa các màn hình Terminal

Source code highlight cho Vi/Vim

cd ~
vi .vimrc
# gõ phím i để chuyển qua chế độ nhập liệu
filetype on
syntax on
# gõ phím esc để chuyển qua chế độ view
# gõ : x để lưu và thoát màn hình soạn thảo

Mở một file .py với Vi/Vim, ta sẽ có highlight như bên dưới

vim_python_syntax_highlight

Khác

history # xem những lệnh bạn thực thi
mkdir -p webapp/application/controllers # tạo folder lồng nhau
> output.txt # xuất kết quả terminal ra file
>> # ghi tiếp kết quả terminal ra file
diff   # so sánh nội dung hai file
wc server.log # đếm số từ trong file
truncate -s0 *.log # xoá nội dung log
ls -lah # list danh sách file/folder với thông tin size được thu gọn

Just for fun

say "Hong is handsome"

cal 11 2016
   November 2016
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

cal -y 2016
                             2016

      January               February               March
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2      1  2  3  4  5  6         1  2  3  4  5
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   6  7  8  9 10 11 12
10 11 12 13 14 15 16  14 15 16 17 18 19 20  13 14 15 16 17 18 19
17 18 19 20 21 22 23  21 22 23 24 25 26 27  20 21 22 23 24 25 26
24 25 26 27 28 29 30  28 29                 27 28 29 30 31
31
       April                  May                   June
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2   1  2  3  4  5  6  7            1  2  3  4
 3  4  5  6  7  8  9   8  9 10 11 12 13 14   5  6  7  8  9 10 11
10 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 18
17 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 25
24 25 26 27 28 29 30  29 30 31              26 27 28 29 30

        July                 August              September
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2      1  2  3  4  5  6               1  2  3
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   4  5  6  7  8  9 10
10 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 17
17 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 24
24 25 26 27 28 29 30  28 29 30 31           25 26 27 28 29 30
31
      October               November              December
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                   1         1  2  3  4  5               1  2  3
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  11 12 13 14 15 16 17
16 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 24
23 24 25 26 27 28 29  27 28 29 30           25 26 27 28 29 30 31
30 31                                       

banner -w50 'ong xuan hong'
Advertisement

Một suy nghĩ 3 thoughts on “Command line thường dùng

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s