Lệnh set trong linux với các ví dụ dễ hiểu

Lệnh set trong Linux là một công cụ mạnh mẽ để quản lý các biến môi trường và tùy chọn shell. Nó cho phép bạn hiển thị, thiết lập hoặc hủy bỏ các biến, ảnh hưởng đến hành vi của shell. Với lệnh set, bạn có thể tùy chỉnh môi trường làm việc và điều khiển cách các script thực thi. Hãy khám phá các tùy chọn khác nhau của nó để khai thác tối đa sức mạnh của shell!

Lệnh set trong linux là gì?

Lệnh set trong Linux là một công cụ mạnh mẽ để quản lý các biến môi trường và tùy chỉnh hành vi của shell. Command set in linux cho phép bạn hiển thị, thiết lập hoặc hủy bỏ các biến shell, ảnh hưởng đến cách các lệnh khác được thực thi. Nó cũng có thể được sử dụng để thay đổi các tùy chọn shell, ví dụ như bật hoặc tắt chế độ debug để gỡ lỗi script. Sử dụng lệnh set một cách khéo léo giúp bạn kiểm soát môi trường làm việc và tự động hóa các tác vụ một cách hiệu quả hơn. Hãy nhớ tham khảo tài liệu hướng dẫn để hiểu rõ hơn về các tùy chọn khác nhau của lệnh này.

Tìm hiểu Mục đích và Cú pháp của Lệnh set

Trong bước này, bạn sẽ tìm hiểu về mục đích và cú pháp của lệnh set trong Linux. Lệnh set được dùng để thiết lập, hủy thiết lập và hiển thị các biến và tùy chọn shell.

Đầu tiên, hãy cùng khám phá cú pháp của lệnh set:

set [option] [variable[=value]]

Ở đây, option đại diện cho các tùy chọn khác nhau có thể dùng với lệnh set. Còn variable[=value] đại diện cho biến shell bạn muốn thiết lập hoặc hủy.

Một số tùy chọn phổ biến được dùng với lệnh set bao gồm:

  • -a: Tự động đánh dấu các biến được sửa đổi hoặc tạo để xuất ra môi trường của các lệnh tiếp theo.
  • -e: Thoát ngay lập tức nếu một lệnh thoát với trạng thái khác không (non-zero status).
  • -u: Xem các biến chưa được thiết lập là lỗi khi thay thế.
  • -x: In các lệnh và đối số của chúng khi chúng được thực thi.

Để hiển thị tất cả các biến shell hiện đang được thiết lập, bạn chỉ cần chạy lệnh set mà không có bất kỳ đối số nào:

set

Ví dụ về đầu ra:

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="4" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='5.1.4(1)-release'
COLUMNS=80
COMP_WORDBREAKS=$' \t\n"\'><=;|&(:'
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoreboth
HISTFILE=/home/labex/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/labex
HOSTNAME=8d5d8d1f0a3f
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LINES=24
LOGNAME=labex
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAILCHECK=60
OLDPWD=/home/labex
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PIPESTATUS=([0]="0")
PPID=1
PS1='${debian_chroot:+($debian_

Sử dụng lệnh set để chỉnh sửa các biến Shell

Trong bước này, bạn sẽ học cách chỉnh sửa các biến shell bằng lệnh set.

Đầu tiên, hãy cùng tạo một biến shell mới để bắt đầu làm quen nhé.

set MYVAR="Hello, World!"

Bây giờ, hãy kiểm tra xem biến vừa tạo có hoạt động đúng không nào.

echo $MYVAR

Ví dụ về kết quả:

Hello, World!

Bạn cũng có thể dùng lệnh set để thay đổi giá trị của biến shell đã có.

MYVAR="Goodbye, World!"
set MYVAR

Ví dụ về kết quả:

MYVAR="Goodbye, World!"

Để xóa một biến shell, bạn có thể dùng tùy chọn -u với lệnh set.

set -u MYVAR
echo $MYVAR

Ví dụ về kết quả:

bash: MYVAR: unbound variable

Như bạn thấy, biến MYVAR đã bị xóa, và việc truy cập nó sẽ gây ra lỗi.

Cuối cùng, hãy tìm hiểu cách biến shell thành chỉ đọc bằng tùy chọn -a.

set -a READONLY_VAR="This variable is read-only"
READONLY_VAR="New value"

Ví dụ về kết quả:

bash: READONLY_VAR: readonly variable

Trong ví dụ này, biến READONLY_VAR đã được đặt là chỉ đọc, và việc sửa đổi nó gây ra lỗi.

Quản lý Biến Môi Trường với Lệnh set

Trong bước này, bạn sẽ học cách quản lý các biến môi trường bằng lệnh set.

Biến môi trường là một loại biến shell đặc biệt, có thể truy cập bởi mọi tiến trình trong hệ thống.

Chúng thường được dùng để lưu trữ cấu hình, đường dẫn và thông tin quan trọng khác.

Hãy bắt đầu bằng cách hiển thị các biến môi trường hiện tại:

set -o | grep -E '^[a-Z_]+='

Ví dụ về kết quả:

BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
HISTCONTROL=ignoreboth
HISTFILE=/home/labex/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/labex
HOSTNAME=8d5d8d1f0a3f
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LOGNAME=labex
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAILCHECK=60
OLDPWD=/home/labex
OPTERR=1
OPTIND=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PIPESTATUS=([0]="0")
PPID=1
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/labex/project
RANDOM=1836
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:progcomp
SHLVL=1
SSH_CLIENT='172.17.0.1 52390 22'
SSH_CONNECTION='172.17.0.1 52390 172.17.0.2 22'
SSH_TTY=/dev/pts/0
TERM=xterm-256color
UID=1000
USER=labex
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_ID=1
_=/usr/bin/env

Như bạn thấy, kết quả bao gồm danh sách tất cả các biến môi trường đang được thiết lập.

Bây giờ, hãy tạo một biến môi trường mới:

export MYENV_VAR="This is an environment variable"

Để xác minh biến đã được tạo đúng cách, ta dùng lệnh echo:

echo $MYENV_VAR

Ví dụ về kết quả:

This is an environment variable

Để biến môi trường chỉ đọc, bạn có thể dùng lệnh readonly:

readonly READONLY_ENV_VAR="This variable is read-only"
READONLY_ENV_VAR="New value"

Ví dụ về kết quả:

bash: READ

Kết luận cho linux set command

```html

Vậy là chúng ta đã cùng nhau khám phá lệnh `set` trong Linux, một công cụ mạnh mẽ để tùy chỉnh môi trường làm việc. Hy vọng qua bài viết này, bạn đã hiểu rõ hơn về cách lệnh này hoạt động và những ứng dụng thực tế của nó. Đừng ngần ngại thử nghiệm các tùy chọn khác nhau để tìm ra cấu hình phù hợp nhất với nhu cầu của bạn. Linux set command có thể giúp bạn đơn giản hóa nhiều tác vụ hàng ngày, từ việc gỡ lỗi script đến quản lý biến môi trường. Hãy nhớ rằng, việc thực hành thường xuyên là chìa khóa để làm chủ bất kỳ công cụ nào, và lệnh `set` cũng không ngoại lệ. Chúc bạn thành công trên hành trình khám phá thế giới Linux đầy thú vị! Hãy tiếp tục tìm hiểu và khám phá thêm nhiều lệnh hữu ích khác nhé.

```
Last Updated : 17/10/2025