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.
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 [free tuts .net]
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.
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%
:
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:
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:
/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:
cat /etc/passwd |grep nickfarrow nickfarrow:x:1000:1000:nickfarrow,,,:/home/nickfarrow:/bin/bash
Một số user khác và shell khi login:
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:
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
:
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
:
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)
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:
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