Các lệnh trên Shell (P3)

Bài viết này giới thiệu các lệnh manipulate files/folders trên Shell.

Shell có cung cấp vài tính năng để thao tác các lệnh một cách hiệu quả hơn. Khi Shell sử dụng quá nhiều tên file, nó cung cấp cho bạn các kí tự đặc biệt để xác định một cách nhanh chóng nhóm các file. Các ký tự này được biết đến với cái tên wildcards. Bao gồm:

Wildcard

Ý nghĩa

* Tương ứng với bất kỳ ký tự nào
? Tương ứng với bất kỳ ký tự đơn nào
[character] Tương ứng với bất kỳ ký tự nào là một thành viên của các ký tự được đặt sẵn có thể được thể hiện như là một lớp các ký tự trên hệ thống POSIX.

POSIX Character class

[:alnum:] Các ký tự số

[:alpha:] Các ký tự alphabet

[:digit:] Các số

[:upper:] Các ký tự alphabet viết hoa

[:lower:] Các ký tự alphabet viết thường

[!character] Tương ứng với bất kỳ ký tự nào mà không phải là một thành viên của các ký tự được đặt sẵn

Ví dụ:

  • * là tên tất cả các tập tin có trong thư mục hiện hành.
  • g* là tên các tập tin bắt đầu bằng g trong thư mục hiện hành.
  • b*.txt là tên tất cả các tập tin bắt đầu bằng ký tự b và kết thúc bằng đuôi định dạng .txt.
  • Data??? là tên bất kỳ tập tin nào bắt đầu bằng Data và thêm 3 ký tự phía sau nữa
  • [abc]* là tên bất kỳ tập tin nào bắt đầu với a hoặc b hoặc c và theo sau bởi các ký tự khác.
  • [[:upper:]]* là tên tập tin bất kỳ bắt đầu bằng các ký tự alphabet hoa và theo sau bởi các ký tự khác. (đây là ví dụ cho lớp các ký tự đặt sẵn trên POSIX)
  • BACKUP.[[:digit:]][[:digit:]] là tên bất kỳ file nào bắt đầu bằng các ký tự “BACKUP” và theo sau nó là hai số
  • *[![:lower:]] bất kỳ file nào không kết thúc bởi ký tự alphabet thường.

––> Ghi chú: Có thể sử dụng wildcard với bất kỳ lệnh nào trên Shell cho phép nhận tên file làm đối số của lệnh.

Các lệnh manipulate:

cp

Lệnh cp cho phép copy file và thư mục. Có các dạng đơn giản như:

cr0ss@cr0ss-X455LA:~$ cp file1 file2

Cho phép sao chép nội dung của file1 vào file2. Với file1, file2 là tên các file cần thao tác.

cr0ss@cr0ss-X455LA:~$ cp file… directory

Cho phép chép file vào directory. Lưu ý: các ký tự … theo sau file có thể là nhiều tên file, có tác dụng copy nhiều file một lúc.

Ví dụ, trong thư mục hiện tại của mình đang chứa 2 file là file1.txt và file2.txt, giờ mình sẽ xem nội dung  file1.txt trước.

cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ less file1.txt

123
file1.txt (END)

tiếp đến là file2.txt

cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ less file2.txt

456
file2.txt (END)

OK, giờ mình sẽ thực hiện lệnh cp

cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cp file1.txt file2.txt
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$

và giờ xem lại nội dung từng file nhé, trước hết là file1.txt

cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ less file1.txt

123
file1.txt (END)

và file2.txt

cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ less file2.txt

123
file1.txt (END)

phần copy file vào thư mục thì các bạn tự demo thử nha!

Một số ví dụ thường gặp về lệnh cp:

  • cp file1 file2: copy nội dung file1 vào file2, nếu file2 chưa tồn tại, nó sẽ tạo. Nếu file2 đã tồn tại, nó sẽ ghi đè lên nội dung cũ của file2.
  • cp -i file1 file2: -i (iteractive) là ký hiệu đặc biệt.  Nếu file2 đã tồn tại, Shell sẽ nhắc nhở bạn trước khi ghi đè nội dung của file1 lên file2.
  • cp file1 dir1: copy file1 vào thư mục dir1
  • cp -R dir1 dir2: copy nội dung của thư mục dir1 vào thư mục dir2, nếu dir2 đã tồn tại, Shell sẽ ghi đè lên nội dung cũ của nó, nếu dir2 chưa tồn tại, Shell sẽ tạo mới dir2.

mv

Lệnh mv dùng để chuyển hoặc đổi tên file hoặc thư mục tùy vào cách nó được sử dụng như thế nào. Cú pháp như sau:

cr0ss@cr0ss-X455LA:~$ cp file1 file2

Để chuyển file vào một thư mục:

cr0ss@cr0ss-X455LA:~$ mv file… directory

Các ví dụ về lệnh mv gồm các tùy chọn:

  • mv file1 file2: Nếu file2 chưa tồn tại, nó sẽ đổi tên file1 thành file2. Nếu file2 đã tồn tại, nó sẽ thay thế nội dung của file2 thành nội dung của file1.
  • mv -i file1 file2: -i (iteractive) là một tùy chọn đặc biệt, nếu file2 đã tồn tại, Shell sẽ hỏi bạn có chắc về việc thay thế nội dung của file2 thành nội dung file1 không.
  • mv file1 file2 file3 dir: Chuyển file1, file2, file3 đến thư mục dir. Nếu dir chưa tồn tại, Shell sẽ báo lỗi.
  • mv dir1 dir2: Nếu dir2 chưa tồn tại, Shell sẽ đổi tên dir1 thành dir2. Nếu dir2 đã tồn tại, Shell sẽ chuyển thư mục dir1 vào trong thư mục dir2.

Phần demo các bạn tự làm nhé! 🙂

rm

Lệnh rm trên Shell dùng để xóa file hoặc thư mục. Cú pháp là:

cr0ss@cr0ss-X455LA:~$ rm file…

Dùng để xóa file. Và

cr0ss@cr0ss-X455LA:~$ rm -r dir…

Để xóa thư mục. (Các bạn lưu ý tùy chọn -r trong lệnh xóa thư mục).

Các ví dụ về lệnh rm:

  • rm file1 file2: Xóa file1 và file2.
  • rm -i file1 file2: Có thêm tùy chọn -i, Shell sẽ nhắc nhở bạn khi thực hiện xóa mỗi file.
  • rm -r dir1 dir2: Thư mục dir1, dir2 sẽ được xóa cùng với tất cả các thành phần chứa trong nó.

–-> Lưu ý các bạn nên cẩn thận khi sử dụng lênh rm. Trước khi dùng nó bạn phải tuyệt đối cân nhắc, bằng cách sử dụng các lệnh hữu ích khác như ls để liệt kê các file để chắc chắn rằng mình sẽ xóa đúng file. Bởi nếu bạn xóa nhầm một file hệ thống nào đó sẽ gây hậu quả rất nghiêm trọng

mkdir

Lệnh mkdir dùng để tạo một thư mục, cú pháp:

cr0ss@cr0ss-X455LA:~$ mkdir directory

Lệnh này sẽ tạo ra một thư mục có tên directory trong thư mục hiện hành.

––> Các lệnh có sử dụng wildcard

  • cp *.txt text_files: Copy tất cả các file kết thúc bằng đuôi .txt trong thư mục hiện hành vào một thư mục đã tồn tại có tên text_files.
  • mv my_dir ../*.bak my_new_dir: Chuyển thư mục con my_dir và tất cả các file kết thúc bằng .bak trong thư mục cha hiện hành vào trong thư mục mới đã tồn tại có tên là my_new_dir.
  • rm *~: Xóa tất cả các file kết thúc bằng ~ trong thư mục hiện hành. Một vài ứng dụng sẽ tạo file sao lưu sử dụng sơ đồ đặt tên này. Dùng lệnh này sẽ xóa tất cả ra khỏi thư mục.

Có một lệnh khá hữu ích nữa trên Shell đó là lệnh clear. Lệnh này dùng để xóa màn hình trên Terminal. Chính xác là sau khi bạn dùng lệnh này Terminal sẽ chuyển sang một page mới bằng một ký tự đặc biệt, ví dụ, màn hình Terminal của mình trước khi dùng clear là như thế này:

cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ less file1.txt
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ less file2.txt
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cp file1.txt… ~/Desktop
cp: cannot stat ‘file1.txt…’: No such file or directory
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cp file1.txt … ~/Desktop
cp: target ‘/home/cr0ss/Desktop’ is not a directory
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cp file1.txt … ~/Doccuments
cp: target ‘/home/cr0ss/Doccuments’ is not a directory
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cd ~
cr0ss@cr0ss-X455LA:~$ mkdir shell
cr0ss@cr0ss-X455LA:~$ cd ~/MyData/vidu_shell
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cp file1.txt … ~/shell
cp: cannot stat ‘…’: No such file or directory
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cp file1.txt ~/shell
cr0ss@cr0ss-X455LA:~/MyData/vidu_shell$ cd ~
cr0ss@cr0ss-X455LA:~$ clear

và sau khi  Enter ở dòng clear:

cr0ss@cr0ss-X455LA:~$

Ở bài sau mình sẽ nói về các lệnh xác định và lệnh hỗ trợ khi bạn không biết dạng lệnh của nó trên Shell như thế nào. Chào các bạn!

 

 

 

Các lệnh trên Shell (P2)

 

Bài viết này sẽ đề cập đến một số vấn đề mình đã nói sơ qua ở bài trước như cấu trúc thư mục trong Linux hay hệ thống Unix-like, quyền truy cập file (permisson),.. và mình sẽ giới thiệu một số lệnh khác.

Thư mục trên Linux.

Để hiểu được ý nghĩa của các tham số trong các câu lệnh, chẳng hạn như  cd ~/Downloads, bạn phải hiểu được cấu trúc của hệ thống thư mục trên Linux và Unix-likes

Không giống như trên Windows, các cây thư mục đều bắt nguồn từ các ổ đĩa, các hệ thống Unix-like lại bắt đầu bằng thư mục gốc, hay thư mục root (ký hiệu là /). Khái niệm ổ đĩa của Windows hay thư mục / của Unix-like đều là sự trừu tượng hóa tài nguyên lưu trữ (phần cứng) của hệ điều hành mà thôi. Các cây thư mục đều biểu diễn cấu trúc tổ chức thư mục trên một hệ điều hành, chỉ khác nhau một điểm đó là Windows có thể có nhiều cây thư mục tùy thuộc vào việc bộ nhớ của nó được trừu tượng thành bao nhiêu ổ đĩa, còn hệ thống Unix-like chỉ có một cây thư mục duy nhất bắt nguồn từ /.

Tóm tắt ý nghĩa của từng thư mục chính trên Unix-Linux.

Directory Description
/ Đây là thư mục gốc (root directory), là nơi bắt đầu của các file hệ thống, trong hầu hết các trường hợp, thư mục gốc chỉ chứa các thư mục con
/boot Đây là nơi mà Nhân Linux và file boot của hệ thống được lưu trữ, Nhân linux là file được gọi là vzlinuz.
/etc Thư mục /etc chứa các file cấu hình (configuration) của hệ thống. Các file trong /etc đa số là các file text. Điển hình là:

/etc/passwd: file này chứa thông tin cần thiết cho mỗi người dùng, trên đó chứa những người dùng được định nghĩa trên hệ thống

/etc/fstab: file này chứa một bảng các thiết bị được gắn kết khi hệ thống boot. File này định nghĩa ổ đĩa của bạn

/etc/hosts: file này liệt kê danh sách các host mạng  và địa chỉ IP và bản chất của hệ thống

/etc/init.d: thư mục này chứa các script, bắt đầu những dịch vụ thông thường khác nhau của hệ thống tại thời điểm boot

/bin, /usr/bin Hai thư mục này chưa hầu hết các chương trình trên hệ thống. /bin chứa các chương trình cần thiết để hệ thống yêu cầu tổ chức. Trong khi đó, /usr/bin lại chứa các chương trình ứng dụng cho các người dùng trên hệ thống
/sbin, /usr/sbin Thư mục /sbin chứa các chương trình cho người quản trị hệ thống, được sử dụng thông qua tên gọi superuser
/usr Thư mục này chứa các thứ đa dạng hỗ trợ cho người dùng ứng dụng. Ví dụ như:

/usr/share/X11: hỗ trợ người dùng hệ thống X windows

/usr/share/dict: các từ điển kiểm tra chính tả, Linux có một bộ phận kiểm tra chính tả, tiêu biểu là look và ispell

/usr/share/doc: các file tài liệu khác nhau trong một sự đa dạng các định dạng

/usr/share/man: các trang người dùng được giữ ở đây

/usr/src: chứa các file source code, nếu bạn cài đặt gói mã nguồn của nhân, bạn sẽ tìm thấy toàn thể source code của nhân ở trong này

/usr/local Nó là thư mục con dùng để cài đặt phần mềm hoặc các file khác dùng trên máy cục bộ. Nó có ý nghĩa khi phần mềm không là một phần của sự phân tán chính thức (thường ở trong /usr/bin).

Khi bạn tìm thấy một chương trình yêu thích trên hệ thống, chúng được cài đặt trong một trong các thư mục nằm trong /usr/local. Hầu hết, thư mục được chọn là /usr/local/bin

/var Thư mục này có chứa các file thay đổi khi hệ thống khởi chạy. Bao gồm:

/var/log: thư mục chứa các file log, chúng sẽ cập nhật khi hệ thống chạy, bạn nên xem file này trong từng thời điểm để nắm bắt “sức khỏe” của hệ thống.

/var/spool: thư mục này giữ các file được xếp hàng cho một vài tiến trình, như tin nhắn mail hoặc in công việc. Khi mail của người dùng gửi đến hệ thống lần đầu tiên trong một hệ thống cục bộ, tin nhắn được lưu trữ đầu tiên ở /var/spool

/lib Chứa các thư viện chia sẻ được (tương tự như các thư viện DLL trên windows)
/home Là nơi người dùng giữ việc của mình. Thông thường, nó chỉ là nơi người dùng được phép viết file. Nó giữ mọi thứ tốt và sạch sẽ. Bởi vì hệ thống Linux cho phép nhiều người dùng khác nhau trên một hệ thống. Sẽ thật tê nếu như bạn làm gì ảnh hưởng đến người dùng khác J
/root Là thư mục của superuser
/tmp Thư mục mà chương trình có thể viết các file tạm
/dev Là một thư mục khá đặc biệt, nó không chứa các file theo đúng nghĩa, nó chỉ chứa các thiết bị trên hệ thống. (trong hệ thống Linux hoặc Unix, các thiết bị được xem như file, chẳng hạn, bàn phím, màn hình, ổ đĩa,… đều là file trên Unix-Linux) ví dụ /dev/SDA là IDE ổ cứng đầu tiên trên hệ thống (nếu bạn cài Linux rồi thì bạn sẽ biết tới cái này)
/proc Nó cũng là thư mục khá đặc biệt. Trên thực tế, không phải tất cả các thư mục đều tồn tại, có một số là ảo. /proc là một trong số đó, nó chứa các lỗ dẫn tới nhân. Chúng là một nhóm các lối vào trong thư mục này tương ứng với tất cả các tiến trình đang chạy trên hệ thống. Một vài trong số chúng có thể view được, chẳng hạn bạn vào /proc/cpuinfo.
/media, /mnt /media là một thư mục đặc biêt, nó dùng để chuyển các điểm. Như chúng ta đã biết, các thiết bị lưu trữ vật lý như ổ cứng được đính kèm trong hệ thống cây thư mục. Tiến trình đính kèm một thiết bị vào cây  gọi là mounting.

Khi hệ thống khởi động, nó đọc danh sách các lệnh mounting trong /etc/fstab mô tả thiết bị được chuyển và trong cây thư mục. Tuy nhiên có nhiều thiết bị yêu cầu file tạm(tempotary file) như CD-ROM,  /media được dùng cho các thiết bị mounting tự đông, còn /mnt cung cấp một nơi thuận tiện để mounting các thiết bị có thể tháo được như CD-ROM, bạn sẽ thường thấy  thư mục /mnt/cdrom. Để xem các thiết bị và mount point bạn có thể gõ mount trên Terminal.

Tiếp theo sẽ là các Permission của người dùng.

Bài trươc mình đã nói sơ qua về quyên của người dùng đối với một file, cụ thể sau khi gõ ls -l hoặc ls -l ~/Downloads (hai lệnh này mình đã nói ở bài viết trước, các bạn tham khảo lại nhé) thì nó sẽ hiện ra một danh sách các file/thư mục có trong thư mục hiện hành (đối với ls -l) hoặc trong thư mục /hom/user_name/Downloads (đối với lệnh ls -l ~/Downloads) với định dạng đầy đủ, ví dụ mình lấy một trong các kết quả in ra sau khi gõ lệnh ls -l ~/Downloads trên Terminal của mình (thư mục hiện hành của mình là /hom/cr0ss/) là:

cr0ss@cr0ss-X455LA:~$ ls -l ~/Downloads
total 453160
-rw-rw-r– 1 cr0ss cr0ss 326412652 Th03 11 03:25 android-sdk_r24.4.1-linux.tgz
-rw-rw-r– 1 cr0ss cr0ss 96036772 Th03 19 23:56 arduino-1.6.8-linux64.tar.xz

-rwxr-xr-x 1 cr0ss cr0ss 108 Th03 28 06:58 example.sh
-rw-rw-r– 1 cr0ss cr0ss 52758 Th03 28 20:02 bash.png
-rw-rw-r– 1 cr0ss cr0ss 20250097 Th03 10 16:43 codeblocks_16.01.tar.gz
-rw-rw-r– 1 cr0ss cr0ss 59092 Th03 29 14:08 file_permissions.png
-rw-rw-r– 1 cr0ss cr0ss 68472 Th03 28 15:42 filesystem-structure.png
-rw-rw-r– 1 cr0ss cr0ss 161280 Th03 28 01:04 thuat-toan-horner.doc
-rw-rw-r– 1 cr0ss cr0ss 20940288 Th03 25 21:55 vlc-2.2.1.tar.xz
cr0ss@cr0ss-X455LA:~$

Hai trong số các kết quả in ra :

-rw-rw-r--   1 cr0ss     cr0ss   20940288  Th03 25 21:55 vlc-2.2.1.tar.xz
-rwxr-xr-x   1 cr0ss     cr0ss      108    Th03 28 06:58 example.sh

----------     -------  -------  -------- ------------ -------------
    |             |        |         |         |             |
    |             |        |         |         |         File Name
    |             |        |         |         |
    |             |        |         |         +---  Modification Time
    |             |        |         |
    |             |        |         +-------------   Size (in bytes)
    |             |        |
    |             |        +-----------------------        Group
    |             |
    |             +--------------------------------        Owner
    |
    +----------------------------------------------   File Permissions

các dòng khác thì tương tự. Đi từ phải sang trái:

  • vlc-2.2.1.tar.xz hoặc example.sh là file name.
  • Th03 25 21:25  hoặc Th03 28 06:58 là thời gian gần nhất bạn thao tác lên file đó (đọc, ghi, thực thi).
  • 20940288 hoặc 108 là kích thước của file.
  • cr0ss là nhóm người dùng có thể sử dụng được file đó.
  • cr0ss tiếp theo là tên user sở hữu file đó 1 là số thành phần có trong file/thư mục.
  • -rw-rw-r-- hoặc -rwxr-xr-x là file permissions là quyền truy cập file, trên hệ thống,do Linux là hệ thống phân quyền nên thông số này rất quan trọng.

∗ Ở đây mình chỉ tập trung vào thông số file permissions, các tham số file permissions có 4 nhóm: - Đầu tiên là dấu - có nghĩa là file hoặc d có nghĩa là thư mục - Tiếp theo là nhóm 3 ký tự kế tiếp: là các quyền của chủ sở hữu của file đó - Tiếp đến là nhóm 3 ký tự tiếp theo: là quyền của nhóm chủ sở hữu của file - Cuối cùng là nhóm 3 ký tự cuối: là quyền của các user khác Các chữ cái r, w, x, - tiếp theo nghĩa là quyền đọc ( r ), ghi ( w ),thực thi ( x ) và không được phép ( - ). Tất cả được giải thích theo hình vẽ dưới đây:

file_permissions

Bài viết sau này khi giới thiệu chi tiết về thay đổi quyền truy cập file sẽ nói chi tiết nhất về vấn đề này. Còn một lệnh nữa là lệnh less. less dùng để view một file text bất kỳ trong thư mục hiện hành hoặc trong bất kỳ thư mục nào kèm theo đường dẫn tới đó. Ví dụ mình đang ở thư mục /home/cr0ss/Downloads, khi gõ lệnh less example.sh trên Terminal sẽ cho kết quả như sau:

cr0ss@cr0ss-X455LA:~/Downloads$ less example.sh

 

#!/bin/bash
if [ $(id -u) != “0” ]; then
echo “You must be the superuser to run this script” >&2
exit 1
fi

và để thoát khỏi lệnh less thì bạn chỉ cần bấm q.

Các điều hướng trong less:

  • Page Up or b: Cuộn lên một trang
  • Page Down or space: Cuộn xuống một trang
  • G: Tới Cuối tập tin
  • 1G: Tới đầu tập tin
  • lcharacter: Tìm kiếm theo chiều xuôi của tập tin cho tới khi một ký tự character xuất hiện
  • n: Lặp lại tìm kiếm trước đó
  • h: Hiển thị danh sách đầy đủ ít các lệnh và lựa chọn
  • q: Thoát ra khỏi less

Bài này kết thúc ở đây, bài sau mình sẽ giới thiệu tiếp với các bạn các lệnh thao tác như cp, mv, rm,… và các lệnh thay đổi permission. Xin chào!

Các lệnh trên Shell(P1)

 

 

Các thao tác cơ bản trên Terminal

Hôm nay mình sẽ giới thiệu các thao tác trên terminal. Các bạn đọc bài giới thiệu của mình tại đây.

Giao diện sau khi mở của Terminal sẽ khác nhau đôi chút tùy vào hệ điều hành bạn sử dụng. Ví dụ Elementary OS nó sẽ trông như thế này:

cr0ss@cr0ss-X455LA:~$

Đầu tiên, ta test thử bàn phím trên Terminal bằng cách nhập 1 chuỗi ký tự bất kỳ, ví dụ

cr0ss@cr0ss-X455LA:~$ lskdjslakjfl

Terminal sẽ trả về kết quả như sau:

lskdjslakjfl: command not found

Nếu bạn nhận lại dòng lệnh như trên thì đừng lo lắng, mọi thứ đang vận hành tốt.

Ngoài bàn phím, bạn cũng có thể sử dụng chuột trên Terminal bằng cách cuộn trang lên-xuống, bôi đen kí tự, dòng,…

Ok, tất cả đã sẵn sàng cho các dòng lệnh đầu tiên trên Shell

Nhóm lệnh điều hướng (Nagavition) trên Shell: pwd (in ra thư mục làm việc hiện hành – print working directory), cd (chuyển thư mục – change directory), và ls (in ra danh sách các file và thư mục có trong thư mục đang làm việc), file (xác định kiểu dữ liệu được chứa trong file và in nó ra)

pwd

Trước tiên, các bạn xem cấu trúc thư mục của Linux và các hệ điều hành Unix-like

filesystem-structure

Về ý nghĩa và công dụng của các tên thư mục trong cây thư mục mình sẽ giải thích ở bài sau, giờ chúng ta sẽ tìm hiểu cách thao tác các lệnh cơ bản, nên mình nói sơ lược, hệ thống thư mục trên Linux bắt đầu bằng thư mục /, nó là thư mục gốc, các thư mục khác là thư mục con của nó. Thông thường khi các bạn mở Terminal lên, thư mục làm việc của các bạn sẽ là /home/user_name.  Các bạn có thể dùng lênh pwd để kiểm tra:

cr0ss@cr0ss-X455LA:~$ pwd

và kết quả sẽ là

/home/cr0ss

cd

Lệnh cd chuyển thư mục làm việc tới một thư mục nào đó bất kỳ tồn tại trên hệ thống. Cú pháp như sau: cd  _directory, trong đó, directory là đường dẫn tới một thư mục. Ví dụ:

cr0ss@cr0ss-X455LA:~$ cd /mnt   #mình chuyển tới thư mục /mnt
cr0ss@cr0ss-X455LA:/mnt$  #bây giờ thư mục làm việc sẽ chuyển đến đây

cr0ss@cr0ss-X455LA:/mnt$ pwd  #in ra thư mục hiện hành
/mnt

các câu sau dấu “#” trong đoạn demo trên là các comment, Shell sẽ bỏ qua các kí tự sau dấu #. Về sau mình sẽ nói rõ trong phần trong phần viết một Shell script.

Khi cd tới một thư mục không tồn tại trên hệ thống thì sẽ báo lỗi, ví dụ:

cr0ss@cr0ss-X455LA:/mnt$ cd /home/cr0ss/adad
bash: cd: /home/cr0ss/adad: No such file or directory

––> Lưu ý phím tắt cho thư mục /home/user_name sẽ là ~/, ví dụ mình sẽ chuyển thư mục làm việc của mình tới thư mục /home/cr0ss/Dowloads bằng cách sử dụng phím tắt:

cr0ss@cr0ss-X455LA:~$ cd ~/Downloads
cr0ss@cr0ss-X455LA:~/Downloads$

––> Ngoài ra còn có thể  chuyển thư mục làm việc ra  thư mục cha của nó bằng cách dùng lệnh cd ..

cr0ss@cr0ss-X455LA:~/Downloads$ cd ..
cr0ss@cr0ss-X455LA:~$

––> Lưu ý trong lệnh cd, kí hiệu “.” chính là thư mục đó tự tham chiếu đến chính nó, ví dụ khi đang ở thư mục làm việc là /home/user_name, bạn dùng lệnh “cd .” chính là chuyển thư mục làm việc đến chính nó, “cd ./directory” là chuyển thư mục làm việc tới thư mục con nằm trong /home/user_name.  Ví dụ:

cr0ss@cr0ss-X455LA:~$ cd .
cr0ss@cr0ss-X455LA:~$ pwd
/home/cr0ss

cr0ss@cr0ss-X455LA:~$ cd ./Downloads
cr0ss@cr0ss-X455LA:~/Downloads$

ls

Lệnh ls có nghĩa là in ra danh sách các file và  thư mục trong thư mục đang làm việc. ls có một số dạng như sau:

  1. ls: in ra danh sách các file và thư mục chứa trong thư mục hiện đang làm việc
  2. ls _directory: in ra danh sách các file trong _directory
  3. ls -l: in ra danh sách các file trong thư mục hiện hành theo dạng đầy đủ
  4. ls -l _directory: in ra danh sách các file trong _directory dưới dạng đầy đủ
  5. ls -la .. : in ra danh sách các file (gồm cả các file ẩn –  file ẩn  hoặc thư mục ẩn trên linux  bắt đầu bằng dấu chấm, bạn có thể xem bằng cách bấm Ctrl+H trong ứng dụng Files) trong thư mục cha đang làm việc với định dạng đầy đủ

Ví dụ:

ls

cr0ss@cr0ss-X455LA:~$ ls
cocos2d-x-3.10   Dropbox   opencv   Qt   Videos
Documents   Music   Pictures   sketchbook   WP_backup_codespdf
Downloads   MyData   Public   Templates

ls ~/Downloads

cr0ss@cr0ss-X455LA:~$ ls ~/Downloads
android-sdk_r24.4.1-linux.tgz   filesystem-structure.png
arduino-1.6.8-linux64.tar.xz   thuat-toan-horner.doc
codeblocks_16.01.tar.gz   vlc-2.2.1.tar.xz
cr0ss@cr0ss-X455LA:~$

ls -l

cr0ss@cr0ss-X455LA:~$ ls -l
total 112
drwxrwxr-x 15 cr0ss cr0ss 4096 Th03 3 18:11 cocos2d-x-3.10
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Documents
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 28 15:42 Downloads
drwx—— 6 cr0ss cr0ss 4096 Th03 28 13:56 Dropbox
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Music
drwx—— 4 cr0ss cr0ss 4096 Th03 3 13:24 MyData
drwxrwxr-x 13 cr0ss cr0ss 4096 Th03 3 16:38 opencv
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 13 20:24 Pictures
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Public
drwxrwxrwx 8 cr0ss cr0ss 4096 Th03 3 16:28 Qt
drwxrwxr-x 3 cr0ss cr0ss 4096 Th03 20 02:41 sketchbook
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Templates
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Videos
-rw——- 1 cr0ss cr0ss 57940 Th03 28 01:53 WP_backup_codespdf

ls -l ~/Downloads

cr0ss@cr0ss-X455LA:~$ ls -l ~/Downloads
total 453040
-rw-rw-r– 1 cr0ss cr0ss 326412652 Th03 11 03:25 android-sdk_r24.4.1-linux.tgz
-rw-rw-r– 1 cr0ss cr0ss 96036772 Th03 19 23:56 arduino-1.6.8-linux64.tar.xz
-rw-rw-r– 1 cr0ss cr0ss 20250097 Th03 10 16:43 codeblocks_16.01.tar.gz
-rw-rw-r– 1 cr0ss cr0ss 68472 Th03 28 15:42 filesystem-structure.png
-rw-rw-r– 1 cr0ss cr0ss 161280 Th03 28 01:04 thuat-toan-horner.doc
-rw-rw-r– 1 cr0ss cr0ss 20940288 Th03 25 21:55 vlc-2.2.1.tar.xz
cr0ss@cr0ss-X455LA:~$

ls -la ..

cr0ss@cr0ss-X455LA:~$ ls -la ..
total 12
drwxr-xr-x 3 root root 4096 Th03 3 12:03 .
drwxr-xr-x 23 root root 4096 Th03 23 14:24 ..
drwxr-xr-x 31 cr0ss cr0ss 4096 Th03 28 13:55 cr0ss
cr0ss@cr0ss-X455LA:~$

––> Lưu ý, các thư mục hay file mà ls in ra có màu khác nhau đối với từng loại.

file

Lệnh file được dùng theo cú pháp như sau: file name_of_file. Nó sẽ in ra xem xét thông tin về kiểu dữ liệu mà file đang chứa. Dưới đây là bảng mô tả các loại file trên Linux

Capture

––> Lưu ý trong phần ví dụ in ra của lệnh ls -l, ls -l ~/Downloads có các đoạn như:

drwxrwxr-x 15 cr0ss cr0ss 4096 Th03 3 18:11 cocos2d-x-3.10
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Documents
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 28 15:42 Downloads
drwx—— 6 cr0ss cr0ss 4096 Th03 28 13:56 Dropbox
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Music
drwx—— 4 cr0ss cr0ss 4096 Th03 3 13:24 MyData
drwxrwxr-x 13 cr0ss cr0ss 4096 Th03 3 16:38 opencv
-rw——- 1 cr0ss cr0ss 57940 Th03 28 01:53 WP_backup_codespdf

các bạn để ý những chỗ mình underline, phần sau mình sẽ phân tích chi tiết về những kí tự này, sơ lược thì những chữ được underline ở đầu các dòng đó là “permissions” nôm na là quyền truy cập file, còn những số mình gạch dưới đó là kích thước (byte) của thư mục/file đó

Nguồn hình ảnh: sưu tầm

 

 

Tổng quan về Shell

Chào các bạn! Trước khi bắt đầu bài viết, mình xin giới thiệu đôi chút về mục đích bài viết. Thực tế đa số hệ điều hành của các máy tính hiện nay chủ yếu thuộc hai kiểu đó là Microsoft Windows (năm 1985 bởi Microsoft) và kiểu Unix (năm 1960-1970 tại AT&T Bell Labs bởi Dennis Ritche và Ken Thompson), trong đó Linux (1991 bởi Linus Tovald) là một họ các hệ điều hành kiểu Unix được xây dựng từ chung một nhân Linux và các tiện ích đi kèm gọi là các Linux Distribution. Nếu các bạn đã quá quen thuộc Windows thì có vẻ như  Linux hay các hệ điều hành kiểu Unix còn hơi xa lạ và khó sử dụng (nhất là đối với Việt Nam mình 🙂 ). Ở đây mình không so sánh Windows với Linux hoặc Unix, mình viết bài này để giới thiệu cho các bạn mới làm quen và còn lạ lẫm với Unix-Linux để các bạn có thể làm chủ hệ điều hành của mình (dĩ nhiên là một cách tương đối thôi nhé, vì mình cũng không am hiểu tất tần tật về Unix-Linux, mình chỉ giới thiệu những gì mình biết thôi, hihi 🙂 ). Bài viết này và các bài viết sau của mình về Shell chủ yếu đều tham khảo trong cuốn The Linux Command Line của tác giả William E. Shotts, Jr. Nào, giờ thì bắt đầu thôi!

Nếu bạn đã và đang tìm hiều về  Linux hoặc một hệ điều hành Unix nào đó thì chắc hẳn ít nhất một lần các bạn đã nghe tới Shell, vậy Shell là cái gì? 🙂

Như bạn đã biết, hệ điều hành tương tác với người dùng thông qua giao diện đồ họa (GUIs) và giao diện dòng lệnh (CLIs). Thì Shell là một trình thông dịch lệnh tương tác giữa người dùng và hệ điều hành theo giao diện dòng lệnh có trên các hệ điều hành Unix-like như Linux, MacOS,…. Shell tương tự như Command Prompt trên Windows dùng để phục vụ các mục đích giống như các chương trình dùng  giao diện đồ họa. Giờ chúng ta cùng đi vào tìm hiểu chi tiết về Shell nhé!

Các loại Shell:

Hầu hết trên các hệ điều hành Linux đều có sẵn bash (viết tắt của Bourne Again Shell, là một phiên bản nâng cao của shell nguyên thủy sh trên Unix được viết bởi Steve Bourne). Ngoài bash ra còn có các loại shell khác trên các hệ thống Linux như tcsh, ksh, zsh.

Một Terminal là gì?

Dịch sát nghĩa thì nó là một thiết bị đầu cuối dùng để tương tác với người dùng, tuy nhiên ở đây mình chỉ nêu ý nghĩa của nó chứ không cố gắng dịch nghĩa nó ra cho các bạn  😀 Nó là một chương trình gọi là terminal emulator. Khi bạn gọi nó thì nó mở ra 1 cửa sổ và để bạn tương tác với shell. Có nhiều loại terminal emulator tùy vào các Linux distribution như kconsole, gnome-terninal, xterm, eterm, nxterm, rxvt, kvt.

Khởi động Terminal.

Trình quản lý cửa sổ của bạn có thể khởi động terminal theo các cách khác nhau. Ví dụ mình sử dụng Elementary OS, muốn mở Terminal có thể rê chuột lên trên góc trái màn hình click vào Applications, trong ô search gõ Terminal -> Enter. Nếu bạn sử dụng môi trường desktop KDE có thể gọi kconsole hoặc sử dụng Gnome có thể gọi gnome-terminal bằng cách sử dụng các phím tắt,…

Bài đầu tiên kết thúc ở đây. Bài sau mình sẽ hướng dẫn các bạn sử dụng Terminal thao tác với shell. Chào các bạn!