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

Ở các bài trước, chúng ta đã tìm hiểu được vài lệnh trên Shell, về ý nghĩa, các tùy chọn và đối số của nó,…

Tất cả các lệnh trên Shell chúng ta đã học và sắp học đều thuộc 4 loại sau:

  • Một chương trình thực thi: tất cả chúng  được chứa trong /usr/bin (các bạn có thể mở thư mục này để xem). Với loại này, chương trình có thể được compile thành các file binary. Như một chương trình được viết bằng C, C++ hoặc một ngôn ngữ script như Ruby, Python, Perl,..
  • Lệnh được xây dựng sẵn (built-in) trên Shell: ví như lệnh cd, ls, cp,mv,.. trên Shell là các lệnh được xây dựng sẵn.
  • Một hàm Shell: Là một Shell script thu nhỏ được tích hợp vào trong môi trường. Chúng ta sẽ tìm hiểu về cấu hình môi trường và viết một hàm Shell ở các bài học sau.
  • Một tên giả (alias): Những lệnh mà bạn có thể tự định nghĩa, xây dựng từ các lệnh khác. Chúng ta sẽ tìm hiểu sau.

Các lệnh trên Shell cùng các tùy chọn hay đối số của nó có khi nào khiến bạn thoắc mắc nó thuộc nhóm nào trong 4 nhóm trên hay bên trong nó có những bí ẩn gì không? Nếu có, giờ chúng ta cùng khám chúng thông qua các lệnh sau:

Xác định các lệnh:

type

Lệnh này là một trong các lệnh built-in của Shell. Dùng để hiển thị thể loại của lệnh có tên cụ thể mà Shell sẽ thực thi. Cú pháp của nó như sau:

type command

Với command là tên lệnh cần tìm hiểu. Ví du:

cr0ss@cr0ss-X455LA:~$ type cp
cp is /bin/cp
cr0ss@cr0ss-X455LA:~$ type ls
ls is aliased to `ls –color=auto’
cr0ss@cr0ss-X455LA:~$ type mv
mv is /bin/mv
cr0ss@cr0ss-X455LA:~$

Lưu ý ở lệnh type ls sẽ cho kết quả ls là một alias to `ls –color=auto’, điều này lý giải tại sao khi các bạn thực hiện lệnh ls trên Terminal của mình sẽ có các màu khác nhau cho các file và thư mục.

which

Thỉnh thoảng có nhiều hơn một phiên bản của chương trình thực thi nào đó được cài đặt lên hệ thống. Điều này không gây ra bất thường gì trên các servers lớn khi mà nó không chung các hệ thống Desktop. Cú pháp:

which command

trong đó command là lênh cần xác định, dùng để xác định chính xác địa điểm của chương trình thực thi. Ví dụ:

cr0ss@cr0ss-X455LA:~$ which ls
/bin/ls

––> Lưu ý: which chỉ dùng cho các chương trình thực thi, không dùng cho các lệnh được xây dựng sẵn hay alias, mà là thay thế cho các chương trình thực thi thực tế.

Lấy tài liệu hướng dẫn của các lệnh:

help

bash có một trợ giúp built-in cho các Shell built-in. Cú pháp sử dụng:

help option command

trong đó option có thể là -m để thay đổi định dạng của ngõ ra, ví dụ:

cr0ss@cr0ss-X455LA:~$ help -m cd
NAME
cd – Change the shell working directory.

SYNOPSIS
cd [-L|[-P [-e]] [-@]] [dir]

DESCRIPTION
Change the shell working directory.

Change the current directory to DIR. The default DIR is the value of the
HOME shell variable.

The variable CDPATH defines the search path for the directory containing
DIR. Alternative directory names in CDPATH are separated by a colon (:).
A null directory name is the same as the current directory. If DIR begins
with a slash (/), then CDPATH is not used.

If the directory is not found, and the shell option `cdable_vars’ is set,
the word is assumed to be a variable name. If that variable has a value,
its value is used for DIR.

Options:
-L force symbolic links to be followed: resolve symbolic links in
DIR after processing instances of `..’
-P use the physical directory structure without following symbolic
links: resolve symbolic links in DIR before processing instances
of `..’
-e if the -P option is supplied, and the current working directory
cannot be determined successfully, exit with a non-zero status
-@ on systems that support it, present a file with extended attributes
as a directory containing the file attributes

The default is to follow symbolic links, as if `-L’ were specified.
`..’ is processed by removing the immediately previous pathname component
back to a slash or the beginning of DIR.

Exit Status:
Returns 0 if the directory is changed, and if $PWD is set successfully when
-P is used; non-zero otherwise.

SEE ALSO
bash(1)

IMPLEMENTATION
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html&gt;

cr0ss@cr0ss-X455LA:~$

 

––> Lưu ý: Khi một dấu ngoặc vuông xuất hiện trong một mô tả cú pháp của lệnh, trong dấu ngoặc vuông, dấu “|” dùng để phân cách các tùy chọn của lênh, trong ví dụ trên ta thấy:

cd [-L|-P] [dir]

Có nghĩa là lệnh cd được tùy chọn bởi -L hoặc -P và theo sau bởi tham số dir.

–help

Nhiều chương trình thực thi có hỗ trợ tùy chọn –help để mô tả các hỗ trợ về cú pháp của lệnh. Ví dụ:

cr0ss@cr0ss-X455LA:~$ cp –help
Usage: cp [OPTION]… [-T] SOURCE DEST
or: cp [OPTION]… SOURCE… DIRECTORY
or: cp [OPTION]… -t DIRECTORY SOURCE…
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
-a, –archive same as -dR –preserve=all
–attributes-only don’t copy the file data, just the attributes
–backup[=CONTROL] make a backup of each existing destination file
-b like –backup but does not accept an argument
–copy-contents copy contents of special files when recursive
-d same as –no-dereference –preserve=links
-f, –force if an existing destination file cannot be
opened, remove it and try again (this option
is ignored when the -n option is also used)
-i, –interactive prompt before overwrite (overrides a previous -n
option)
-H follow command-line symbolic links in SOURCE
-l, –link hard link files instead of copying
-L, –dereference always follow symbolic links in SOURCE
-n, –no-clobber do not overwrite an existing file (overrides
a previous -i option)
-P, –no-dereference never follow symbolic links in SOURCE
-p same as –preserve=mode,ownership,timestamps
–preserve[=ATTR_LIST] preserve the specified attributes (default:
mode,ownership,timestamps), if possible
additional attributes: context, links, xattr,
all
–no-preserve=ATTR_LIST don’t preserve the specified attributes
–parents use full source file name under DIRECTORY
-R, -r, –recursive copy directories recursively
–reflink[=WHEN] control clone/CoW copies. See below
–remove-destination remove each existing destination file before
attempting to open it (contrast with –force)
–sparse=WHEN control creation of sparse files. See below
–strip-trailing-slashes remove any trailing slashes from each SOURCE
argument
-s, –symbolic-link make symbolic links instead of copying
-S, –suffix=SUFFIX override the usual backup suffix
-t, –target-directory=DIRECTORY copy all SOURCE arguments into DIRECTORY
-T, –no-target-directory treat DEST as a normal file
-u, –update copy only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, –verbose explain what is being done
-x, –one-file-system stay on this file system
–help display this help and exit
–version output version information and exit

By default, sparse SOURCE files are detected by a crude heuristic and the
corresponding DEST file is made sparse as well. That is the behavior
selected by –sparse=auto. Specify –sparse=always to create a sparse DEST
file whenever the SOURCE file contains a long enough sequence of zero bytes.
Use –sparse=never to inhibit creation of sparse files.

When –reflink[=always] is specified, perform a lightweight copy, where the
data blocks are copied only when modified. If this is not possible the copy
fails, or if –reflink=auto is specified, fall back to a standard copy.

The backup suffix is ‘~’, unless set with –suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the –backup option or through
the VERSION_CONTROL environment variable. Here are the values:

none, off never make backups (even if –backup is given)
numbered, t make numbered backups
existing, nil numbered if numbered backups exist, simple otherwise
simple, never always make simple backups

As a special case, cp makes a backup of SOURCE when the force and backup
options are given and SOURCE and DEST are the same name for an existing,
regular file.

Report cp bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/&gt;
General help using GNU software: <http://www.gnu.org/gethelp/&gt;
For complete documentation, run: info coreutils ‘cp invocation’
cr0ss@cr0ss-X455LA:~$

Một vài chương trình không có tùy chọn –help, nhưng nếu bạn cố thử thì nó sẽ báo lỗi trên Terminal.

man

Hầu hết các chương trình thực thi dạng command line có cung cấp một phần chính thức của tài liệu được gọi là manual hoặc man page. man là một chương trình phân trang đặc biệt có cú pháp:

man program

trong đó program là của một lệnh cần view. Các man page thường khác nhau nhưng hình thức vẫn là mô tả cú pháp của lệnh, mục đích của lệnh, danh sách các tùy chọn của lệnh, được sử dụng như một tài liệu tham khảo không phải là một hướng dẫn. Ví dụ:

cr0ss@cr0ss-X455LA:~$ man ls

sẽ view các cú pháp, tùy chọn, mục đích của lệnh ls. Khi muốn thoát khỏi man page bạn bấm q.

Trên hầu hết các hệ thống Linux thì man sử dụng less để view các man page.

Bài sau chúng ta sẽ tìm hiểu các lệnh chuyển hướng I/O, chào các bạn!

Advertisements

Author: phuoctv

My name is Phuoc. I'm interested in computer programming and sharing the knowledge. My email: phuoctv14@gmail.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s