Hiển thị các bài đăng có nhãn IT. Hiển thị tất cả bài đăng

Grep trong Linux

Hướng dẫn sử dụng lệnh Grep trong Linux

GREP (Global regular expression print) là lệnh tìm kiếm các dòng có chứa một chuỗi hoặc từ khóa trong file. Trong bài viết này Hostvn sẽ hướng dẫn các bạn cách dùng lệnh grep cơ bản.


  • Cú pháp lệnh :
# grep ‘word’ filename
# grep ‘string1 string2′ filename
# cat otherfile | grep ‘something’
# command | grep ‘something’

  • Tìm kiếm từ trong file:
# grep Port /etc/ssh/sshd_config
# grep -i port  /etc/ssh/sshd_config  ( sử dụng -i nếu bạn không nhớ chính xác là từ viết hoa hay không viết hoa )

  • Đếm số lần xuất hiện của từ tìm kiếm trong file:
#  grep -c Port /etc/ssh/sshd_config
  • Hiển thị số dòng của từ tìm kiếm trong file:
#grep -n Port /etc/ssh/sshd_config
  • Hiện thị tất cả các dòng không chứa từ tìm kiếm  trong file:
# grep -v 22 /etc/ssh/sshd_config
  • Hiển thị tất cả các dòng có từ tìm kiếm đứng đầu trong file:
# grep ^P /etc/ssh/sshd_config
  • Hiển thị tất cả các dòng có từ tìm kiếm đứng cuối trong file:
# grep yes$ /etc/ssh/sshd_config
  • Kết hợp sử dụng với các lệnh khác :
# cat /proc/cpuinfo |grep cpu

Lệnh Tìm Kiếm (Find) Linux


Lệnh Find trong Linux

Đăng vào ngày 4 Tháng Bảy 2011 lúc 09:35 bởi Duy Khánh Mục: IT, Unix/Linux  ||  Tags:    Bình luận (0)
Lệnh trên tìm tất cả các file có tên là “music” trong toàn bộ hệ thống
find / –name music
Tìm các file trong thư mục /home có owned là joe
find /home -user joe
Tìm các file trong thư mục /usr kết có tên kết thúc là “stat” find /usr -name *stat
Tìm các file trong thư mục /var/spool đã được hiệu chỉnh trong vòng >60 ngày trước
find /var/spool –mtime +60
Tìm các file đã được hiệu chỉnh trong vòng 24h trở lại đây trong thư mục home
find $HOME –mtime 0
Tìm các file có tên “core” trong thư mục /tmp và xóa chúng đi
find /tmp –name core –type f –print | xargs /bin/rm –f
Tìm các file được chmod theo thông số nào đó
find . –perm –664
Tìm các file được cho phép đọc bởi tất cẩ mọi người nhưng không cho phép thực thi.
find . –perm –444 ! –perm /111

GNU/Linux Cơ Bản- Nâng Cao


Sử dụng và lập trình trên GNU/Linux từ cơ bản đến nâng cao [Các thành viên congdongcviet biên soạn và sưu tầm]



Mục lục của topic này :

#1 - Những kiến thức căn bản về terminal ; về hệ thống file và thư mục trong ; một số lệnh thông dụng thao tác file và thư mục ; về BASH trong GNU/Linux. ( luc13aka47 )

#2 và #3 - Tìm hiểu về trình biên soạn EMACS, trình biên dịch GCC ( GNU Compiler Collection ) và trình tự động biên dịch GNU Make trong GNU/Linux. ( luc13aka47 )

Mọi người chia sẻ nào  Mình sẽ cập nhật mục lục thường xuyên.

Command line interface trong Linux


The shell program

Shell là chương trình tương tác giữa bạn và OS. Khi bạn gõ lệnh, shell đọc các lệnh đó từ bàn phím, xử lý chúng và gửi chúng tới OS. Có nhiều chương trình shell khác nhau, nhưng trên hầu hết Linux OS, bash (Bourne Again SHell) là mặc định.
Nếu bạn đang sử dụng GUI, bạn muốn sử dụng CLI ( Command line interface ), có 2 cách, 1 là chuyển tới virtual terminal , 2 là khởi động terminal emulator.

Terminal emulator

Là chương trình tạo 1 cửa sổ và chạy shell trên nó. Nó giống như cmd trong Windows.
Có nhiều termianl emulator, như : xterm, rxvt, gnome-terminal, konsole, kvt, eterm, …

Virtual terminal

Một cách khác để sử dụng CLI là rời khỏi GUI hoàn toàn. Ta có thể tắt GUI, nhưng có 1 cách khác, đó là chuyển tới virtual terminal khác. Theo mặc định, linux có 6 virutal terminal, và cái thứ 7 chạy GUI.
Nhấn Ctrl + Alt + F1 để chuyển tới virtual terminal thứ nhất, Ctrl + Alt + F2 để chuyển tới cái thứ 2, … Thông thường, Ctrl + Alt + F7 sẽ đưa ta về GUI.

The command prompt

Thông thường, prompt gồm tên user và tên máy, theo sau là $, hoặc > ; nếu là # thì bạn đang sử dụng root.

Wildcards

Là 1 tính năng giống như regex, cho phép theo tác với pattern tùy chọn.

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_10.png
Lần xem: 4
Size:  12.9 KB
ID:  10390

Ví dụ.

Xóa toàn bộ file trong thư mục đang là việc.
$ rm *
Di chuyển các file có pattern :
$ mv *linux*.html dir1
Đọc các file với pattern :
$ less d*.txt
Xóa các file với pattern:
$ rm junk.???
Liệt kê các file với pattern :
$ ls hda[0-9]
$ ls hda[0-9][0-9]
Copy các file tới pattern :
$ cp [A-Z]* dir2
Remove các file với pattern :
$ rm *[!cehg]

Hệ thống tập tin và thư mục trên Linux 

Các thư mục và hệ thống tập tin ( mục này tham khảo quantrimang.com )

Hệ thống tập tin của Linux và Unix được tổ chức theo một hệ thống phân bậc tương tự cấu trúc của một cây phân cấp. Bậc cao nhất của hệ thống tập tin là thư mục gốc, được ký hiệu bằng vạch chéo “/” (root directory). Đối với các hệ điều hành Unix và Linux tất các thiết bị kết nối vào máy tính đều được nhận dạng như các tập tin, kể cả những linh kiện như ổ đĩa cứng, các phân vùng đĩa cứng và các ổ USB. Điều này có nghĩa là tất cả các tập tin và thư mục đều nằm dưới thư mục gốc, ngay cả những tập tin biểu tượng cho các ổ đĩa cứng.

Ví dụ, /home/nttvinh/nguyen/scnp.odt chỉ toàn bộ đường dẫn đến tập tin scnp.odt có trong thư mục nttvinh là thư mục phụ nằm trong thư mục home, ngay dưới thư mục gốc (/).

Nằm dưới thư mục gốc (/) có một loạt các thư mục quan trọng của hệ thống tập tin được công nhận ở tất cả các bản phân phối Linux khác nhau. Sau đây là danh sách các thư mục thông thường được nhìn thấy dưới thư mục gốc (/) :
  • /bin – chứa các ứng dụng quan trọng (binary applications),
  • /boot – các tập tin cấu hình cho quá trình khởi động hệ thống (boot configuration files),
  • /dev – chứa các tập tin là chứng nhận cho các thiết bị của hệ thống (device files)
  • /etc – chứa các tập tin cấu hình của hệ thống, các tập tin lệnh để khởi động các dịch vụ của hệ thống...
  • /home – thư mục này chứa các thư mục cá nhân của những người có quyền truy cập vào hệ thống (local users' home directories),
  • /lib – thư mục này lưu các thư viện chia sẻ của hệ thống (system libraries)
  • /lost+found – thư mục này được dùng để lưu các tập tin không có thư mục mẹ mà được tìm thấy dưới thư mục gốc (/) sau khi thực hiện lệnh kiểm tra hệ thống tập tin (fsck).
  • /media – thư mục này được dùng để tạo ra các tập tin gắn (loaded) tạm thời được hệ thống tạo ra khi một thiết bị lưu động (removable media) được cắm vào như đĩa CDs, máy ảnh kỹ thuật số...
  • /mnt – thư mục này được dùng để gắn các hệ thống tập tin tạm thời (mounted filesystems),
  • /opt – thư mục dùng dể chứa các phần mềm ứng dụng (optional applications) đã được cài đặt thêm,
  • /proc – đây là một thư mục đặc biệt linh động để lưu các thông tin về tình trạng của hệ thống, đặc biệt về các tiến trình (processes) đang hoạt động,
  • /root – đây là thư mục nhà của người quản trị hệ thống (root),
  • /sbin – thư mục này lưu lại các tập tin thực thi của hệ thống (system binaries)
  • /sys – thư mục này lưu các tập tin của hệ thống (system files),
  • /tmp – thư mục này lưu lại các tập tin được tạo ra tạm thời (temporary files),
  • /usr – thư mục này lưu và chứa những tập tin của các ứng dụng chính đã được cài đặt cho mọi người dùng (all users),
  • /var – thư mục này lưu lại tập tin ghi các số liệu biến đổi (variable files) như các tập tin dữ liệu và tập tin bản ghi (logs and databases).
Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_1.jpg
Lần xem: 3
Size:  20.0 KB
ID:  10381

Ổ đĩa và các Partition
  • /dev/hda Ổ đĩa cứng IDE đầu tiên (chính)
  • /dev/hdb Ổ đĩa cứng IDE thứ hai (thứ cấp)
  • /dev/sda Ổ đĩa cứng SCSI đầu tiên
  • /dev/sdb Ổ đĩa cứng SCSI thứ hai
  • /dev/fd0 Ổ đĩa mềm đầu tiên
  • /dev/fd1 Ổ đĩa mềm thứ hai
Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_2.jpg
Lần xem: 0
Size:  22.5 KB
ID:  10382

Ví dụ chúng ta chạy lệnh ls –l firstdoc.txt thấy kết quả như sau:
-rwxrw-r-- 1 User1 Testers 512 Oct 24 19:42 firstdoc.txt 
Ý nghĩa của các field là:
  • File Access Permission: -rwxrw-r--
  • Số liên kết: 1
  • File Owner: User1
  • Group: Testers
  • File Size (bytes): 512
  • Lần hiệu chỉnh cuối: Oct 24
  • Last Modification Time: 19:42
  • File name: firstdoc.txt
Ngoài ra, qua lệnh ls -i chúng ta sẽ biết được firstdoc.txt là tập tin hay thư mục dựa theo:
  • Nếu kí tự đầu tiên là (-), thì đây là tập tin.
  • Nếu kí tự đầu tiên là d, thì đối tượng là thư mục.
  • Nếu kí tự đầu tiên là l, thì đầy là một liên kết (symbolic link) trỏ đến một file khác (gần giống với shortcut trên Windows OS).
  • Nếu kí tự đầu tiên là b, đối tượng là block device ví dụ như disk drive.
  • Nếu kí tự đầu tiên là c, đối tượng là character device như serial port.
Object Ownership

Trong ví dụ trên chúng ta thấy các tập tin đều có một group owner và file owner. Trong trường hợp muốn thay đổi ownership cho group hay user khác hãy đăng nhập với quyền root và thự hiện lệnh sau để đổi quyền ownership đối với tập tin payroll.doc cho người dùng vp_finance
chown vp_finance payroll.doc 
Nếu muốn đổi quyền ownership cho group accounting hãy thực hiện lệnh
chown vp_finance.accounting payroll.doc 
Trong trường hợp muốn chuyển quyền ownership toàn bộ thư mục và các tập tin bên trong thì thự hiện lệnh chown với tùy chọn –R:
chown -R vp_marketing.marketing /marketing/June
chown -R .marketing /marketing/June 

Ngoài ra, nếu muốn chuyển quyền ownership mà không có quyền root thì có thể dùng lệnh chgrp nhưng lúc này bạn phải thuộc group có quyền ownership và group muốn chuyển quyền này.

Một số lệnh thao tác với thư mục

Câu lệnh pwd – Print working directory - Bạn đang ở đâu ?

Câu lệnh này in ra địa chỉ tuyệt đối của thư mục mà ta đang làm việc.

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_3.png
Lần xem: 4
Size:  6.6 KB
ID:  10383

Câu lệnh ls – Liệt kê nội dung của thư mục

Câu lệnh này in ra các file hoặc thư mục mà trong thư mục bạn đang làm việc và 1 thư mục được chỉ định bởi đường dẫn.
Có các tùy chọn thêm điều khiển cách liệt kê :

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_4.png
Lần xem: 5
Size:  38.7 KB
ID:  10384

Sử dụng tùy chọn –a để liệt kê cả các file và thư mục ẩn.

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_5.png
Lần xem: 5
Size:  38.4 KB
ID:  10385

Absolute pathnames – địa chỉ tuyệt đối

Là địa chỉ bắt đầu từ thư mục root ( dấu gạch chéo / ).
Ta có thể sử dụng địa chỉ tuyệt đối để truyền tham số tới ls, liệt kê nội dung trong 1 thư mục.

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_6.png
Lần xem: 5
Size:  14.2 KB
ID:  10386

Câu lệnh cd – Change directory – Thay đổi thư mục làm việc hiện tại

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_7.png
Lần xem: 3
Size:  8.0 KB
ID:  10387

Relative pathnames – địa chỉ tương đối

Là 2 dấu chấm ( .. ) hoặc địa chỉ có dấu . ở đầu.
Miêu tả địa chỉ bắt đầu từ thư mục đang làm việc.

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_8.png
Lần xem: 4
Size:  24.3 KB
ID:  10388

Tạo thư mục

Sử dụng lệnh mkdir.
$ mkdir dir1

Xóa thư mục

Sử dụng lệnh rmdir với thư mục rỗng, sử dụng lệnh rm với tùy chọn -r (recursively ) với thư mục không rỗng.
$ rmdir dir1
$ rm -ir dir1

Copy và move thư mục

Sử dụng cp với tùy chọn -r để copy thư mục ( nếu không có tùy chọn -r , sẽ có lỗi ):
$ cp -r dir1 dir2
Nếu dir2 chưa tồn tại, nó sẽ được tạo trước khi sao chép dir1. Nếu dir2 đã tồn tại, dir1 sẽ được sao chép tới dir2.
Sử dụng lệnh mv để move thư mục.
mv dir1 dir2
Nếu dir2 chưa tồn tại, dir1 sẽ được rename là dir2. Nếu dir2 đã tồn tại, dir1 sẽ được move tới dir2 dưới tên dir2/dir1.

Một số lệnh thao tác file 

Câu lệnh file – Xác định kiểu của file

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_9.png
Lần xem: 11
Size:  21.0 KB
ID:  10389

Câu lệnh cat và less - Đọc file dạng text

Lệnh cat

Đọc text file mà không phân trang.
Topic173.2.png

Lệnh less

Đọc text file theo kiểu phân trang.
Sử dụng giống cat.
Ta cũng có thể đọc nhiều file cùng 1 lúc:
$ less file1 file2 file3
Các phím điều khiển khi đọc file với less :

Click vào hình ảnh để lấy hình ảnh lớn

Tên:  linux_11.png
Lần xem: 7
Size:  20.3 KB
ID:  10391

Thao tác copy, rename, move, remove file

Lưu ý là Linux không có lệnh undo, bởi vậy hãy cẩn thận khi sử dụng các lệnh thao tác với file.

Copy

Sử dụng lệnh cp.
$ cp file file2
Nếu file2 không tồn tại, file2 sẽ được tạo, nếu file2 đã tồn tại, nó sẽ bị ghi đè.
Ta có thể sử dụng tùy chọn -i để xác minh việc copy.
$ cp -i file file2
cp: overwrite `file2'? n
$
Copy file tới 1 thư mục :
$ cp file dir1
Copy file tới 1 thư mục với tên khác :
$ cp file dir1/file2
Copy nhiều file tới 1 thư mục :
$ cp file1 file2 file3 dir1

Move và rename

Sử dụng lệnh mv.
$ mv file file2
Nếu file2 chưa tồn tại, file2 sẽ được tạo, nếu file2 đã tồn tại, nó sẽ bị ghi đè.
Nên sử dụng tùy chọn -i để xác minh.
Move file tới thư mục khác :
$ mv file dir1
Move file tới thư mục khác với tên khác :
$ mv file dir1/file2

Remove

Sử dụng lệnh rm.
$ rm -i file
Có thể remove nhiều file cùng lúc :
rm file1 file2

Tìm hiểu Bash trong Linux (mục này tham khảo quantrimang.com )

Đó là giao diện lệnh mặc định trên hầu hết những bản phân phối GNU/Linux mới. Bash là giao diện lệnh chính của hệ điều hành Linux, nó nhận, thông dịch và thực thi lệnh, sau đó cung cấp bộ nhớ điều khiển giao diện và thực thi những tác vụ được tự động hóa.
Bash ẩn đi nhiều công cụ mạnh và phím tắt. Nếu thường xuyên làm việc với dòng lệnh, công cụ này có thể giúp bạn tiết kiệm được khá nhiều thời gian. Dưới đây là 10 tính năng hữu dụng nhất của Bash.

1. Dễ gọi lại lệnh
Bash theo dõi mọi lệnh thực thi trong một bộ đệm lược sử, và cho phép người dùng gọi lại những lệnh trước đó bằng cách dùng phím Up (lên) và Down (xuống) để lựa chọn. Thậm chí người dùng có thể gọi lại lệnh thực thi trước đó nhanh hơn nữa bằng cách nhập một vài kí tự đầu tiên của lệnh sau đó nhấn tổ hợp phím Ctrl+R, sau đó bash sẽ kiểm tra lược sử lệnh để tìm ra những lệnh phù hợp nhất với điều kiện tìm và hiển thị chúng trên giao diện console. Nhấn tiếp tổ hợp phím Ctrl+R để xem danh sách lệnh phù hợp tiếp theo.

2. Sử dụng bí danh lệnh

Nếu thường xuyên chạy một lệnh trên cùng một nhóm tùy chọn, bạn có thể sử dụng bash để tạo một bí danh cho lệnh này. Bí danh này sẽ bao gồm những tùy chọn được yêu cầu, vì vậy bạn sẽ không cần phải ghi nhớ chúng hay đặt lại những tùy chọn này mỗi khi chạy lại nó. Ví dụ, nếu thường xuyên sử dụng lệnh ls với tùy chọn -l để xem một danh sách thư mục chi tiết, bạn có thể sử dụng lệnh bash> alias ls='ls -l' để tạo một bí danh tự động tích hợp tùy chọn -l.

Khi bí danh này đã được tạo, nhập ls vào dấu nhắc lệnh, bash sẽ gọi bí danh này và kết xuất kết quả -l của lệnh ls. Bạn có thể xem danh sách bí danh hiện có bằng cách dùng lệnh alias(không có đối số), và xóa một bí danh với lệnh unalias.

3. Sử dụng Filename Auto-Completion

Bash hỗ trợ Filename Auto-Completion tại thông báo lệnh. Để sử dụng tính năng này, nhập những chữ cái đầu tiên trong tên file, sau đó tab.bash sẽ kiểm tra thư mục hiện thời, cũng như mọi thư mục khác trong Search Path (đường dẫn tìm kiếm), để tìm ra file có tên phù hợp nhất với điều kiện tìm. Nếu tìm thấy nhiều kết quả, bạn sẽ được nhắc nhở lựa chọn ra một kết quả.

4. Hiệu chỉnh dòng lệnh bằng phím tắt

Bash hỗ trợ nhiều phím tắt để điều khiển và hiệu chỉnh dòng lệnh. Ví dụ:
  • Tổ hợp phím Ctrl+A di chuyển con trỏ lên đầu dòng lệnh.
  • Tổ hợp phím Ctrl+E di chuyển con trỏ đến cuối dòng lệnh.
  • Tổ hợp phím Ctrl+W xóa từ đứng trước con trỏ.
  • Tổ hợp phím Ctrl+K xóa mọi kí tự sau con trỏ.
  • Tổ hợp phím Ctrl+Y khôi phục xóa.
5. Tự động thông báo thư mới

Người dùng có thê cấu hình bash tự đông thông báo khi có thư đến bằng cách cài đặt biến số $MAILPATH chỉ vào mail spool cục bộ. Ví dụ, lệnh bash> MAILPATH='/var/spool/mail/user' và bash> export MAILPATH Causes bash sẽ đưa ra thông báo trên giao diện console của user mỗi khi mail spool của user có một tin nhắn mới.

6. Chạy tác vụ trong Background

Bash cho phép người dùng chạy một hay nhiều tác vụ trong một background, và lựa chọn hoãn hay chạy lại một tác vụ hiện thời bất kì. Để chạy một tác vụ trong background, chỉ cần thêm một ký tự “&” vào cuối dòng lệnh. Ví dụ:
bash> tail -f /var/log/messages & 
Mỗi tác vụ chạy trên background theo phương pháp này sẽ được gán một ID ược in ra giao diện console. Một tác vụ có thể được đưa trở lại foreground bằng lệnh fg jobnumber, trong đójobnumber là ID của tác vụ bạn muốn đưa lên foreground. Ví dụ:
bash> fg 1 
Bạn có thể xem danh sách tác vụ đang thực hiện bằng cách nhập lệnh jobs vào dấu nhắc lệnh trong bash.

7. Truy cập nhanh vào thư mục thường sử dụng

Có thể bạn đã biết biến số $PATH trong Search Path của bash, Search Path là những thư mục được tìm kiếm tiếp theo sau khi đã tìm kiếm trong thư mục hiện thời. Tuy nhiên bash cũng hỗ trợ biến số $CDPATH liệt kê những thư mục mà lệnh cd sẽ truy lục khi cố gắng thay đổi thư mục. Để sử dụng tính năng này, trước tiên cần phải gán biến số $CDPATH cho một danh sách thư mục. Ví dụ:
bash> CDPATH='.:~:/usr/local/apache/htdocs:/disk1/backups' 
bash> export CDPATH 
Từ giờ, bất cứ khi nào lệnh cd được sử dụng, bash sẽ kiểm tra mọi thư mục trong danh sách $CDPATH để tìm ra những thư mục có tên phù hợp nhất.

8. Thực hiện tính toán

Bash có thể thực hiện một số phép tính đơn giản trong môi trường lệnh. Để sử dụng tính năng này, người dùng chỉ cần nhập biểu thức toán học cần thực hiện vào dấu nhắc lệnh bên trong hai ngoặc đơn, sau đó bash sẽ tính toán và phản hồi kết quả. Ví dụ, khi nhập lệnh bash> echo $((16/2)), bash sẽ trả về kết quả là 8.

9. Tùy chỉnh thông báo trên giao diện

Người dùng cũng có thể tùy chỉnh lời nhắc trong thông báo lệnh của bash để hiển thị tên người dùng, tên máy chủ, thời gian hiện tại, mức trung bình tải và/hoặc thư mục hiện đang làm việc.

Để hiển thị những thông tin này, người dùng phải thay đổi biến số $PS1 như sau:
bash> PS1='\u@\h:\w \@> ' 
bash> export PS1 root@medusa:/tmp 03:01 PM> 
Sau đó tên của người dùng đang đăng nhập, tên máy chủ, thư mục hiện đang làm việc và thời gian hiện tại sẽ được hiển thị trên lời nhắc trong giao diện bash. Bạn cũng có thể xem danh sách kí hiệu của bash trong trang hướng dẫn.

10. Hướng dẫn sử dụng lệnh

Bash còn có tính năng trợ giúp sử dụng tất cả các lệnh tích hợp trên nó. Bạn chỉ cần nhập help vào dấu nhắc lệnh để xem danh sách tất cả các lệnh tích hợp trên bash. Để xem trợ giúp cho mỗi lệnh, nhập lệnh help command, trong đó command là lệnh bạn muốn được trợ giúp. Ví dụ:
bash> help alias 
...some help text... 
Do đó, bạn có thể xem chi tiết trợ giúp trên giao diện bash bằng cách nhập man bash vào dấu nhắc lệnh.

Unix: Các Lệnh Với File


Hướng dẫn về Unix: Các lệnh với file

Các câu lệnh thực hiện với thư mục hẳn chưa đủ bởichúng ta còn phải tương tác với các file trên hệ thống Unix. Bài này sẽgiới thiệu những lệnh cơ bản có thể thực hiện với các file.

1. Copy file
cp (copy)
cp file1 file2
là lệnh tạo một copy cho file1 trong thư mục đang làm việc hiện hành và gọi nó là file2
Những gì chúng ta sẽ thực hiện ở đây là lấy một fileđã được lưu trong một vùng truy cập mở nào đó của hệ thống file và sửdụng lệnh này để copy nó vào thư mục unixstuff.

Trước tiên, cd vào thư mục unixstuff
% cd ~/unixstuff 
Sau đó tại dấu nhắc lệnh bạn đánh
% cp /vol/examples/tutorial/science.txt .
Lưu ý: không được quên dấu chấm “.” ở phần cuối. Nhớ rằng trong UNIX, dấu chấm này có nghĩa là thư mục hiện hành.

Lệnh trên có nghĩa copy file science.txt vào thư mục hiện hành, vẫn giữ lại tên cũ.

(Lưu ý: thư mục /vol/examples/tutorial/ là vùng mà bất kỳ ai trong mạng cũng có thể đọc và copy.)

Bài tập 1

Tạo một backup cho file science.txt bằng cách copy nó thành một file có tên gọi science.bak

2. Chuyển file 
mv (move) 
mv file1 file2
Lệnh này sẽ chuyển (hoặc đặt lại tên) file1 thành file2

Để chuyển file từ địa điểm này sang một địa điểm khác, sử dụng lệnh mv.Lệnh này có hiệu lực chuyển thay vì copy file, chính vì vậy khi thựchiện lệnh bạn chỉ có một file chứ không phải hai.

Lệnh này cũng có thể được sử dụng để đặt lại tên cho một file nào đó,bằng việc chuyển một file vào cùng thư mục, nhưng tạo cho nó một tênkhác.

Lúc này chúng ta sẽ chuyển file science.bak vào thư mục backup của bạn.

Trước tiên, bạn cần vào thư mục unixstuff. Sau đó, bên trong thư mục unixstuff, bạn hãy đánh
% mv science.bak backups/.
Đánh ls và ls backups để xem lệnh đã làm việc chưa

3. Xóa file và thư mục

rm (remove), rmdir (remove directory) 

Để xóa một file, bạn sử dụng lệnh rm. Một ví dụ, chúng ta sẽ tạo một copy cho file science.txt sau đó xóa nó.

Bên trong thư mục unixstuff bạn đánh
% cp science.txt tempfile.txt 
% ls 
% rm tempfile.txt 
% ls 
Sử dụng lệnh để xóa một thư mục (trước tiên phải bảo đảm nó hoàn toàn trống rỗng). Hãy xóa thư mục backups. Bạn sẽ không thể xóa vì UNIX không cho phép xóa một thư mục non-empty (không rỗng).

Bài tập 2

Tạo một thư mục có tên tempstuff bằng lệnh mkdir, sao đó xóa nó bằng lệnh rmdir

4. Hiển thị nội dung của file lên màn hình 

clear (clear screen)

Trước khi bắt đầu phần tiếp theo, bạn có thể xóa trống cửa sổ các lệnhtrước đó để các đầu ra của lệnh tíêp theo được sáng sủa và dễ hiểu hơn.

Tại dấu nhắc lênh, đánh
% clear 
Đây là lệnh xóa tất cả văn bản và để lại cho bạn dấu nhắc lệnh ở phần trên cùng của cửa sổ.
cat (concatenate) 
Lệnh cat có thể được sử dụng để hiển thị nội dung của một file lên màn hình. Đánh:
% cat science.txt 
Như những gì bạn có thể thấy được, một file thường dài hơn kích thước của cửa sổ, chính vì vậy các phần trên sẽ khó đọc.

less

Lệnh này sẽ viết nội dung của file lên một trang màn hình tại một thời điểm. Đánh
% less science.txt 
Nhấn [space-bar] nếu bạn muốn xem trang khác, và đánh [q] nếu bạn muốn thoát khỏi trang đang đọc. Như những gì bạn có thể thấy, lệnh less này được sử dụng tốt hơn lệnh cat đối với các file dài.

head

Lệnh head viết 10 dòng đầu tiên của một file vào màn hình

Trước tiên xóa màn hình sau đó đánh
% head science.txt 
Sau đó đánh tiếp
% head -5 science.txt 
Bạn thấy lệnh dưới với -5 khác gì so với lệnh head trên?

tail

Lệnh tail viết 10 dòng cuối cùng của file ra màn hình

Xóa màn hình và đánh
% tail science.txt 
Câu hỏi đặt ra: Bạn có thể xem 15 dòng cuối của file như thế nào?

5. Tìm kiếm nội dung của một file 

Tìm kiếm đơn giản bằng sử dụng lệnh less

Sử dụng lệnh less bạn hoàn toàn có thể tìm kiếm thông qua một file văn bản cho một từ khóa nào đó (mẫu). Ví dụ, để tìm kiếm toàn bộ trong science.txt để lấy một từ'science', đánh
% less science.txt 
sau đó, vẫn trong lệnh less, bạn đánh một dấu [/] và theo sau là từ muốn tìm kiếm.
/science 
Như bạn thấy, lệnh less có thể tìm và làm nỗi bật từ khóa. Đánh [n] để tìm kiếm từ tiếp theo.

grep 
grep là mộttrong nhiều tiện ích UNIX chuẩn. Lệnh này tìm kiếm các file bằng từ chỉđịnh hoặc các mẫu. Trước tiên là xóa màn hình, sau đó đánh
% grep science science.txt 
Như bạn có thể thấy, grep đã in ra một dòng có chứa có từ science.

Thử đánh
% grep Science science.txt 
Lệnh grep có phân biệt ký tự thường và ký tự in hoa ví dụ như giữa Science và science.

Để bỏ qua sự phân biệt giữa các ký tự thường và in hoa này, hãy sử dụng tùy chọn –i, nghĩa là đánh thêm vào –i trước science
% grep -i science science.txt 
Để tìm kiếm một cụm từ hoặc một mẫu, ban phải đặt nó bên trong dấu nháy (‘ ’). Cho ví dụ về tìm kiếm cụm từ spinning top, đánh
% grep -i 'spinning top' science.txt 
Một số tùy chọn khác đi kèm với lệnh grep là:
  •     -v hiển thị các dòng không hợp lệ
  •     -n nói mỗi dòng hợp lệ trước số dòng
  •     -c chỉ in tổng số dòng hợp lệ
Hãy thử một trong số chúng và xem các kết quả khácnhau như thế nào. Không được quên rằng bạn có thể sử dụng nhiều tùychọn trong cùng một dòng lệnh. Ví dụ, số dòng không có từ science hoặc Science là:
% grep -ivc science science.txt
wc (word count) 
Một tiện ích khác nữa là lệnh wc, viết tắt cho “word count”. Để thực hiện việc đếm từ trong file science.txt, đánh
% wc -w science.txt 
Để tìm ra file này có bao nhiêu dòng, đánh
% wc -l science.txt 
Kết luận 

                                                                                        
LệnhÝ nghĩa
cp file1 file2copy file1 và gọi nó là file2
mv file1 file2Chuyển và đổi tên file1 thành file2
rm fileXóa một file
rmdir directoryXóa một thư mục
cat fileHiển thị một file
less fileHiển thị file theo từng trang
head fileHiển thị một vài dòng đầu tiên
tail fileHiển thị một vài dòng cuối của file
grep 'từ khóa' fileTìm kiếm một file bằng từ khóa
wc fileSố lượng các dòng / từ/ ký tự trong file
TOP

In/Out Linux


1. Introduce:

Trên hầu hết các hệ điều hành nói chung và Linux/Unix nói riêng thì có 3 dòng xuất nhập chuẩn (I/O) là STDIN, STDOUT và STDERR mà chức năng tương ứng là dòng nhập chuẩn, dòng xuất chuẩn và dòng xuất lỗi chuẩn. Chúng được gọi là các open file và hệ thống gán cho mỗi file này một con số gọi là file descriptor. Ba con số tương ứng với 3 dòng xuất nhập chuẩn ở trên là 0, 1 và 2. Cụ thể:
standard input → stdin → 0<
standard output → stdout → 1>
standard error → stderr → 2>
Trong C++ thì 3 dòng xuất nhập chuẩn này tương ứng với 3 đối tượng cin, cout và cerr.
Chú ý: Trong bài tut này thì mình sử dụng Bourne shell trong đó dấu $ thể hiện user bình thường và #thể hiện user root. Tuy nhiên hầu hết nội dung trong bài này có thể áp dụng với một số loại shell khác như sh, csh, tcsh… Với C chell (csh, tcsh) thì không sử dụng được các con số (file descriptor).

2. Out/In

Trong chế độ command line của hầu hết các hệ điều hành thì < dùng cho chuyển hướng nhập và >dùng cho chuyển hướng xuất. Vì sao phải chuyển hướng? Vì có nhiều lúc ta muốn kết quả xuất ra màn hình được lưu lại vào một file và dữ liệu nhập vào thay vì từ bàn phím thì lại từ một file.

2.1. STDIN

STDIN chỉ các dòng nhập chuẩn nói chung và nó thường là từ bàn phím. Khi chúng ta gõ bàn phím tức là chúng ta đang nhập vào STDIN. Để dữ liệu đầu vào là một file thì ta dùng dấu <. Ví dụ, nếu ta dùng lệnh cat mà không có tham số thì khi ta gõ gì nó sẽ hiển thị ra cái đó, hay nói đúng hơn sẽ hiển thị lại những gì ta nhập vào từ input chuẩn. Vậy thì giả dụ ta cần hiển thị file /etc/passwd thì ngoài cách truyền thống là
$ cat /etc/passwd
thì ta có thể sử dụng:
$ cat > /etc/passwd
hoặc
$ cat < /etc/passwd
Tại sao lại có thể bỏ số 0 mà chức năng vẫn tương tự? Đó là vì mỗi khi khởi tạo một process thì hệ thống đã gắn một dòng nhập chuẩn cho process đó mà ở đây là STDIN hay 0.

2.2. STDOUT

STDOUT là các dòng xuất chuẩn nói chung và nó thường là xuất ra màn hình, ra cửa sổ console hoặc terminal. Để dữ liệu đầu ra được ghi vào một file thì ta sử dụng dấu >. Ví dụ ta muốn danh sách các file trong một thư mục được ghi vào file dir.txt thì ta sử dụng lệnh sau:
$ ls -al > dir.txt
hoặc
$ ls -al 1> dir.txt
Lí do vì sao có thể bỏ số 1 đi tương tự như với STDIN, tức là khi khởi tạo một process thì hệ thống đã gắn một dòng xuất chuẩn cho process đó mà ở đây là STDOUT hay 1.
Đến đây ta có thể kết hợp sử dụng song song STDIN và STDOUT để làm thao tác copy file. Ví dụ ta muốn backup file /etc/passwd thì ta có thể làm như sau:
$ cat < /etc/passwd > ~/passwd.bak
Lệnh này tương đương với lệnh:
$ cp /etc/passwd ~/passwd.bak
Có một ứng dụng cực kì có ích của việc kết hợp này là chuyển đổi file text giữa Windows và Unix. Như các bạn đều biết thì trong file text của Windows, việc xuống dòng được thể hiện bằng cặp kí tự \r\n còn trong Linux/Unix thì chỉ là \n. Ai phải code trên cả hai môi trường đều thấy sự bất tiện của việc chuyển đổi đó. Giải pháp đưa ra ở đây là sử dụng lệnh tr, cụ thể như sau:
$ tr -d '\r' < win.cpp > unix.cpp
Lệnh này sẽ nhận dòng nhập chuẩn sau đó xoá các kí tự \r rồi ghi ra dòng xuất chuẩn. Dòng nhập và dòng xuất ở đây được định hướng lại để đến từ một file và ghi ra một file.
Tuy nhiên nếu dùng > thì nội dung của file sẽ bị xoá trước khi ghi nội dung mới. Nếu ta muốn nội dung mới sẽ được ghi nối tiếp vào file thì ta sử dụng 2 dấu lớn hơn, tức là >>. Ví dụ nếu bạn muốn nối nội dung của thư mục /home vào cuối file passwd.bak ở trên thì bạn làm như sau:
$ ls /home >> ~/passwd.bak
Bây giờ nếu ta muốn lấy mã HTML của trang chủ của OSG và ghi vào file osg.html thì ta sử dụng lệnh sau:
$ curl http://osg.vnuh.org/ > osg.html
Thực hiện lệnh trên các bạn có thấy gì lạ không? Mặc dù mã HTML thay vì xuất ra màn hình mà được đưa vào file osg.html nhưng vẫn có các thông tin thể hiện trạng thái download hiển thị trên màn hình. Làm thế nào mà lại được như thế? Làm thế nào để lệnh curl câm lặng hoàn toàn? Hồi sau sẽ rõ.

2.3. STDERR

STDERR là dòng xuất lỗi chuẩn nói chung và nó cũng thường xuất trực tiếp ra màn hình, console hay terminal. Cú pháp tương tự như STDOUT, tức là sử dụng > để xuất ra file và >> để nối vào một file đã có (chưa có thì hệ thống sẽ tự tạo ra). Tuy nhiên điểm khác biệt là bạn phải chỉ rõ số 2, tức là > hoặc2>. Lí do là vì chỉ có 1 dòng xuất chuẩn và 1 dòng nhập chuẩn cho mỗi process mà thông thường hệ thống chỉ định là STDOUT và STDIN.
Vậy trong trường hợp của lệnh curl trong phần 2.2 ở trên, nếu ta muốn ghi cả 2 loại output đó ra file thì ta làm như sau:
$ curl http://osg.vnuh.org/ > osg.html 2> osg.log
Thế nào? Không có cái gì xuất ra màn hình hết đúng không? Vì nội dung trang web đã được lưu vào fileosg.html còn các dòng lưu trạng thái download đã được ghi vào file osg.log.
Nhưng thế thì tốn dung lượng đĩa và có nguy cơ gây hỏng đĩa vì phải ghi file mà. Con người quả thật quá tham lam. Vậy thì phải sáng tạo ra cái gì đó như kiểu cái thùng không đáy hay gọi mĩ miều hơn thì nó là “lỗ đen” hay “black hole”, tức là một nơi mà cho cái gì vào cũng mất hút luôn. Linux/Unix có cái đó cho bạn, đó là /dev/null.

2.4. /dev/null

In Unix-like operating systems, /dev/null or the null device is a special file that discards all data written to it (but reports that the write operation succeeded), and provides no data to any process that reads from it (it returns EOF). In Unix programmer jargon, it may also be called the bit bucket or black hole.
Tạm dịch là:
Trong các hệ điều hành kiểu Unix, /dev/null hay thiết bị null là một tệp tin đặc biệt, nó bỏ qua mọi dữ liệu ghi lên nó (nhưng có báo cáo về việc ghi dữ liệu thành công) và không cung cấp bất kì dữ liệu gì khi đọc từ nó (trả về EOF). Trong biệt ngữ của các lập trình viên Unix, nó đuợc gọi là “bit bucket” hoặc “black hole”.
Vậy thì đó chính là cái ta cần rồi. Như vậy câu lệnh curl ở trên có thể cho nó thực hiện câm lặng bằng cách:
$ curl http://osg.vnuh.org/ > /dev/null  2> /dev/null
Không có cái gì xuất ra màn hình cả, cũng không có cái gì được ghi lại cả. Nhưng… lại nhưng, con người vẫn tham lắm, làm thế nào để cái lệnh trên ngắn gọn hơn, trông technical hơn, nói chung là để ai không biết thì sẽ không hiểu gì (đôi khi đó là cái thú của dân kĩ thuật). Ta sẽ dùng 2>&1 ở đây, tức là:
$ curl http://osg.vnuh.org/ > /dev/null  2>&1
Câu lệnh trên tức là dòng xuất chuẩn (1) sẽ bị đưa vào /dev/null và dòng lỗi chuẩn (2) sẽ được đưa vào dòng xuất chuẩn (1) mà ở đây là /dev/null.
Đặc biệt lưu ý là với cú pháp sử dụng dấy & thì dấu & và dấu > phải đi liền nhau, không có khoảng cách.
Ngoài các file descriptor 0, 1, 2 ở trên thì còn có từ 3 → 9 nữa. Tuy nhiên bài viết này chỉ dành cho mức độ newbie nên không để cập sâu, chi tiết các bạn có thể tự tìm hiểu thêm trên Internet hoặc trong các sách về lập trình shell.

3. Pipe

Như vậy chúng ta đã biết cách để chuyển hướng dòng xuất/nhập của một lệnh hay một process. Bằng cách này ta có thể chuyển dữ liệu xuất của một lệnh thành dữ liệu nhập của một lệnh khác thông qua một file trung gian. Tuy nhiên ta không muốn có file trung gian đó, một phần vì việc ghi lên đĩa cứng, phần khác là do… tham. Đó chính là vấn đề mà pipe giải quyết. Trong Linux, ta sử dụng dấu | để làm việc này.
Ví dụ khi ta muốn xem lại nội dung thư mục /etc nhưng kết quả của nó lại dài quá mà ta muốn xem lại thì ta làm như sau
$ ls -al /etc | more
hoặc
$ ls -al /etc | less
(thoát bằng phím q).
hoặc ta muốn đếm số user trong hệ thống có sử dụng mặc định bash shell thì ta làm như sau:
$ cat /etc/passwd | grep "/bin/bash" | wc -l
Lệnh này có nghĩa là đưa nội dung file /etc/passwd ra dòng xuất chuẩn; dòng xuất chuẩn này thành dòng nhập chuẩn của lệnh grep và lệnh này chỉ lọc ra các dòng có chưa xâu /bin/bash để đưa ra dòng xuất chuẩn; dòng xuất chuẩn này lại thành dòng nhập chuẩn của lệnh wc -l là lệnh đếm số dòng của dòng nhập chuẩn và đưa ra số dòng ra dòng xuất chuẩn; cuối cùng dòng xuất chuẩn này sẽ được đưa ra trực tiếp màn hình vì nó không thành dòng nhập chuẩn của lệnh nào nữa.
Chúc các bạn một ngày vui vẻ