Thứ Sáu, 28 tháng 7, 2023

Hiểu về biến môi trường trên Linux và cách sử dụng

Trong bài này chúng ta sẽ tìm hiểu khái niệm về biến môi trường trên Linux, đây là bài rất quan trọng vì nó sẽ giúp bạn có thể cấu hình môi trường trên Linux.

Bài trước chúng ta đã tìm hiểu quyền truy cập file và thư mục, trong bài này mình sẽ trình bày thế nào là biến môi trường trên Linux, sau đó chúng ta sẽ lần lượt tìm hiểu các biến môi trường quan trọng và cách cài đặt chúng.

Mục lục

  • 1. Biến môi trường trong Linux là gì?
  • 2. Danh sách biến môi trường trong Linux và cách cài đặt
    • Biến $PATH
    • Các biến môi trường khác

1. Biến môi trường trong Linux là gì?

Khi làm việc trên máy tính chúng ta cần những thông tin như tên phiên bản hệ điều hành (HĐH) đang chạy, tên thư mục home, thư mục chứa lệnh chương trình …

Một khái niệm quan trọng trên linux đó là môi trường (environment) được định nghĩa qua các biến môi trường. Một số biến được đặt bởi hệ thống, số khác do bạn đặt, hoặc set bởi shell (các lệnh) hay từ một chương trình nào đó.

Bài viết này được đăng tại [tranvanbinh.vn]

Một biến môi trường có tên là một dãy chữ cái và nhận một giá trị nhất định, giá trị này có thể là số, chữ, tên file, thiết bị (device) hay một kiểu dữ liệu nào đó, đặc biệt là các biến không được trùng nhau.

Trên Windows cũng có khái niệm biến môi trường. Bạn chuột phải Computer > Properties > Advanced System Settings > Environment Variables. Có system và user variables.

freetuts-bien-moi-truong

Trên Window: Muốn xem biến trong command prompt thì bạn bật CMD lên và gõ lệnh echo %PATH%:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
echo %PATH%
 
C:\Program Files (x86)\Git\git-cheetah\..\bin;C:\Program Files (x86)\Git\git-che
 
etah\..\bin;C:\imagemagick\ImageMagick-6.7.7-Q16;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system
32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.
0\;C:\Program Files (x86)\Git\cmd;C:\HashiCorp\Vagrant\bin;D:\Soft\System\Bash\s
hell2;C:\xampp\php;C:\ProgramData\ComposerSetup\bin;C:\Program Files\nodejs\;C:\
Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\I
ntel\Intel(R) Management Engine Components\IPT;C:\Program Files\TortoiseSVN\bin
 
// set biến
C:\Users\DungNV>SET MAGICK_HOME=C:/imagemagick
 
C:\Users\DungNV>SET MAGICK_CONFIGURE_PATH=%MAGICK_HOME%/config
 
C:\Users\DungNV>SET MAGICK_CODER_FILTER_PATH=%MAGICK_HOME%/modules/filters

Trên Linux: Bạn có thể set và get ra biến môi trường như sau:

1
2
3
TEST=”Linux programming”
echo $TEST
Linux programming

Các bạn để ý khi khai báo biến TEST chúng ta không dùng dấu $, dấu $ đầu dòng là ký hiệu của bash trên terminal. Khi truy cập giá trị biến TEST thì cần thêm dấu $ thành echo $TEST. Những biến khai báo trực tiếp trên terminal kiểu này sẽ không giữ được khi bạn thoát khỏi Terminal.

2. Danh sách biến môi trường trong Linux và cách cài đặt

Tiếp theo mình trình bày một số khái niệm liên quan đến biến môi trường, ý nghĩa các biến môi trường hay dùng và cách cài đặt chúng.

Shell (hệ vỏ) là phần giao diện dịch các lệnh của người dùng gõ vào thành các lệnh cho nhân hệ điều hành thực thi rồi trả lại kết quả. Trong bài đầu về Linux mình có mô tả về shell như là lớp trên của hạt nhân. Khi login vào hệ thống shell sẽ thực thi việc khởi tạo các biến môi trường. Việc này thường là đọc các file cấu hình như sau:

1
2
3
/etc/environment         → lưu các biến môi trường mức hệ thống.
~/.profile
~/.bashrc hay ~/.bash_profile

→ lưu các biến môi trường cho người dùng đang login, các file này nằm trong mục home của bạn. Khi đọc file .profile hay .bashrc … hệ thống có thể sẽ load tiếp các file khác được định nghĩa trong đó.

Các file trên là ví dụ shell bash trên Ubuntu. Cũng tùy loại shell và phiên bản Linux. Ví dụ trên centOS thì các file khởi tạo biến môi trường là /etc/profile, các file trong mục /etc/profile.d/ …

Muốn xem shell nào được load khi các bạn login thì truy cập file /etc/passwd.

Ví dụ mình xem nickfarrow lúc login sẽ dùng shell gì thì làm như sau:

1
2
cat /etc/passwd |grep nickfarrow
nickfarrow:x:1000:1000:nickfarrow,,,:/home/nickfarrow:/bin/bash

Một số user khác và shell khi login:

1
2
3
4
5
speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
hplip:x:112:7:HPLIP system user,,,:/var/run/hplip:/bin/false
saned:x:113:123::/home/saned:/bin/false
evanclark:x:1001:1001::/home/evanclark/:/bin/sh
sshd:x:119:65534::/var/run/sshd:/usr/sbin/nologin

Để ý tới phần cuối cùng tách bởi dấu “:”, shell có thể là bash hoặc sh, false nghĩa là user này không có quyền chạy shell nào cả.

Đây là các biến hệ thống trong /etc/environment máy mình (chỉ có mỗi PATH và JAVA_HOME) như sau:

1
2
3
4
lanthuong:psi$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
 
JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386

File /etc/environment lưu các biến toàn cục (global) quy định:

  • Loại shell bạn sử dụng
  • Các thư mục chứa lệnh commands và các biến quy định cách sử dụng, giao diện cửa sổ lệnh (terminal). Shell có thể là bash, sh hay ksh.

Biến $PATH

Biến PATH cho thấy đường dẫn tới các thư mục chứa câu lệnh (chương trình) để chạy khi bạn gõ trên terminal, các mục cách nhau dấu “:” ví dụ /usr/local/sbin; /usr/local/bin...

Ví dụ khi bạn cài đặt phần mềm ffmpeg trên Ubuntu (thư viện chuyên chỉnh sửa video, audio …), hay khi các bạn cài phần mềm imagemagick trên Linux thì các chương trình của ffmpeg, imagemagick sẽ được lưu ở mục /usr/local/bin hoặc là ở /sbin …

Với biến PATH như trên thì bạn không cần biết ffmpeg, imagick cài ở đâu, mỗi khi bạn gõ lệnh ffmpeg hay convert (của imagick) trên terminal thì hệ thống tự biết tìm đến mục chứa nó để chạy.

Muốn hiện đường dẫn tuyệt đối của một lệnh thì bạn gõ lệnh whereis:

1
2
whereis ffmpeg
ffmpeg: /usr/local/bin/ffmpeg

Muốn hiện hết các mục chứa chương trình (câu lệnh) thì bạn echo $PATH:

1
2
echo $PATH
/usr/lib/jvm/java-7-openjdk-i386/bin:/home/nickfarrow/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/nickfarrow/Public/android-sdk-linux/tools:/home/nickfarrow/Public/android-sdk-linux/platform-tools:/home/nickfarrow/Public/android-ndk-r9d::/home/nickfarrow/D/DPublic/Google/google_appengine/

Như các bạn thấy trên đây, ngoài các mục bin ra thì còn rất nhiều mục mình định nghĩa riêng ở chỗ khác nữa. File /etc/environment chỉ khai báo các biến toàn cục cho mọi người dùng.

Các biến môi trường khác

* HOME đường dẫn tới thư mục home của người dùng hiện tại, để tiện lợi hơn bạn có thể thay bằng dấu ~ trong nhiều trường hợp.

* TERM (terminal)

1
2
3
4
5
echo $TERM
xterm      // khi login chế độ đồ họa (như X-Window)
 
echo $TERM
linux     // khi login chế độ lệnh (thường là remote ssh)

Để dễ hình dung bạn hay truy cập vào các chế độ lệnh khác nhau (virtual cotsole) bằng cách nhấn Ctrl+Alt+Fn, n = 1-> 6) là chế độ dòng lệnh, Fn = 7,8 là chế độ đồ họa, còn lại chưa dùng.

Trên máy ảo VBox bạn nhấn Right Ctrl + (Shift) + F1, F2 F3 ... để thay đổi chế độ terminal (mặc định Host key VirtualBox là Right Ctrl, nếu bạn setting khác đi thì nhấp phím đó).

* DISPLAY: số (mã) màn hình mặc định các ứng dụng đồ họa sẽ chạy trên đó.

Để dễ hình dung bạn so sánh Desktop Remote (TeamViewer hay ChromeRemote) với Remote command (SSH). Nếu bạn ssh vào máy tính của bạn và muốn mở chrome lên bạn có thể chạy lệnh sau:

1
2
3
export DISPLAY=:0 && /usr/bin/google-chrome https://freetuts.net
 
// ở đây máy mình DISPLAY=:0 có thể máy bạn là :1 :2 ... bạn thử bằng echo $DISPLAY

Lý do là khi remote ssh thì chế độ display mà bạn login sẽ không phải là cho các ứng dụng X-Window (hay X11), chỉ gõ lệnh input/output ra màn hình terminal. Muốn mở chương trình đồ họa như chrome bạn phải set lại DISPLAY cho nó = lệnh export rồi bật chrome lên.

Tóm lại, qua bài này các bạn đã tìm hiểu thế nào là biến môi trường và các biến môi trường hay gặp.

Việc thiết lập giá trị cho các biến môi trường khá đơn giản. Trên Linux các biến môi trường lưu trong mục home của người dùng: .bashrc.bash_profile.bash_aliasses/etc/profile ... Biến môi trường quan trọng nhất là PATH, nó lưu vị trí các mục chứa chương trình chạy trên hệ thống, thường là /usr/bin /bin/usr/local/bin /sbin

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master