Thủ thuật với biến môi trường trên Linux

Chia sẻ

Biến môi trường cung cấp cho chúng ta những thông tin rất giá trị, và chúng có thể được tuỳ chỉnh để thay đổi hoặc nâng cao trải nghiệm người dùng
Biến môi trường tồn tại để chuẩn hoá cũng nâng cấp môi trường shell trên các hệ thống Linux. Có một loạt các biến môi trường mặc định đã được hệ thống cài đặt sẵn cho chung ta, những bạn vẫn có thể cài đặt những biến môi trường riêng của bạn, hoặc đơn giản hơn là chỉnh sửa lại các thiết lập mặc định

Bắt đầu với câu lệnh env

Để xem toàn bộ các biến môi trường trong hệ thống cũng như giá trị của chúng, các bạn sử dụng công cụ env và các bạn có thể thấy danh sách tên các biến được VIẾT HOA cùng với giá trị của chúng

$ env
LS_COLORS=(long output)
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=rhel8t
XDG_SESSION_ID=5
USER=khess
SELINUX_ROLE_REQUESTED=
PWD=/home/khess
HOME=/home/khess
SSH_CLIENT=192.168.1.94 53911 22
SELINUX_LEVEL_REQUESTED= XDG_DATA_DIRS=/home/khess/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_TTY=/dev/pts/1
MAIL=/var/spool/mail/khess
TERM=xterm-256color
SHELL=/bin/bash SELINUX_USE_CURRENT_RANGE=
SHLVL=1
LOGNAME=khess
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000 PATH=/home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/bin
HISTSIZE=1000
LESSOPEN=||/usr/bin/lesspipe.sh %s _=/usr/bin/env

Rất nhiều biến môi trường được đặt và được xuất ra từ file /etc/profile và /etc/bashc. Có một dòng trong file /etc/profile như sau

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

To make permanent changes to the environment variables for all new accounts, go to your /etc/skel files, such as .bashrc, and change the ones that are already there or enter the new ones. When you create new users, these /etc/skel files will be copied to the new user’s home directory.
Để tạo ra thay đổi vĩnh viễn tới các biến môi trường cho tất cả các tài khoản được tạo ra sau đó, bạn hãy tìm tới các files /etc/skel như là file .bashrc và thay đổi chúng. Khi bạn tạo một users mới thì các files /etc/skel sẽ tự động được sao chép vào thư mục home của user mới

Khám phá shell levels (SHLVL)

Để gọi gía trị của các biến môi trường đơn, sử dụng câu lệnh sau, sử dụng SHLVL

$ echo $SHLVL 1

Giá trị thay đổi tuỳ thuộc theo bạn có bao nhiêu subshells đang mở. Ví dụ, bạn thử thực hiện lệnh bash hai lần và thực hiện lại câu lệnh

$ bash
$ bash echo $SHLVL 3

Shell level 3 có nghĩa là bạn đã ở dưới 2 tần subshells, do đó bạn gõ exit 2 lần để quay về shell thông thường

Các thao tác với biến PATH

Biến PATH chứa các đường dẫn để thực thi câu lệnh và scripts. Để thấy các giá trị của biến PATH trong máy bạn, nhập câu lệnh

$ echo $PATH
/home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

Thử tạm thời đổi giá trị biến PATH của bạn bằng cách nhập câu lệnh sau để thêm đường dẫn /opt/bin vào

$ PATH=$PATH:/opt/bin
$ echo $PATH
/home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/bin

Sự thay đổi này chỉ là tạm thời trong phiên làm việc nó không phải vĩnh viễn vì nó không được nhập vào file .bashrc. Để khiến thay đổi này là vĩnh viễn, nhập câu lệnh PATH=$PATH:/opt/bin ở trong file .bashrc ở trong thư mục home của bạn
Khi bạn thực hiện việc đó, bạn đã  tạo ra một biến PATH mới bằng cách thêm một thư mục mới vào biến PATH hiện tại. Các thư mục được ngăn cách với nhau bởi dấu :

Tìm hiểu kĩ về $USER, $PWD, và $LOGNAME

Tôi có một suy nghĩ là các câu lệnh pwd và whoami thực chất chỉ là đọc các nội dung của các biến $PWD, $USER hay $LOGNAME. Khi tôi thử xem mã nguồn thì nó lại không như vậy, có khi tôi sẽ viết lại mã nguồn để nó làm theo đúng như thế. Vì chẳng có lí do nào để thêm hàng loạt thư viện và hơn 400 dòng code để hiển thị thư mục bạn đan g làm việc. Bạn có thể chỉ cần echo biến $PWD ra màn hình, điều này tương tự với $USER và $LOGNAME
Nếu bạn muốn tự xem mã nguồn thì bạn có thể xem chúng tại GitHub. Nếu bạn bạn tìm thấy các chương trình (hoặc những thứ khác) sử dụng biến môi trường thì tôi rất muốn được biết về nó. Phải thú thật là tôi không quá giỏi khi đọc mã nguồn C, mặc dù một số người dùng rất thành thạo các biến môi trường nhưng họ có vẻ không cần đọc những thứ mà tôi nghĩ rằng họ cần phải đọc

Cùng chơi một trò chơi với $SHELL

Để tìm hiểu shells nào đã được cài trong hệ thống của bạn, sử dụng câu lệnh

$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash

Thường là bash, nhưng bạn có thể tìm thấy các shell khác như /bin/tcsh, /bin/csh, /bin/mksh, /bin/ksh, hay /bin/rksh.
Bạn có thể dùng bất cứ shells nào trong đó và có nhiều điều khác biệt giữa các shells. Nhưng nếu bạn là một quản trị viên hệ thống Solaris và bạn muốn sử dụng Korn shell. Bạn có thể chỉnh shell mặc định về /bin/ksh sử dụng câu lệnh chsh

$ chsh Changing shell for khess. New shell [/bin/bash]: /bin/ksh
Password: Shell changed.

Tuy nhiên nếu bạn gõ echo $SHELL, thì bạn vẫn nhận được về giá trị /bin/bash, bạn cần đăng xuất ra và đăng nhập lại để thấy sự thay đổi . Khi bạn đăng nhập lại, bạn sẽ  thấy sự phản hồi khác khi gõ echo $SHELL
Bạn có thể truy cập vào shells khác và gõ echo $SHELL để xem báo cáo về shell hiện tại cũng như giá trị của biến $SHLVL vốn đã được trình bày ở trên

Thiết đặt các biến môi trường riêng của bạn

Bạn có thể thiết đặt các biến môi trường riêng của bạn cho mỗi phiên làm việc, hoặc có thể lưu lại vĩnh viễn bằng cách đặt chúng vào các file ~/.bashrc hay /.profile hoặc bất cứ startup file nào bạn dùng cho shell mặc định

Chia sẻ