03/08/2018, 10:18

Biến môi trường trên Linux

Bài trước chúng ta đã tìm hiểu quyền truy cập file. 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 ...

Bài trước chúng ta đã tìm hiểu quyền truy cập file. 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 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 một chương trình nào đó được load.

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 đó.

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%:

echo %PATH%

C:Program Files (x86)Gitgit-cheetah..in;C:Program Files (x86)Gitgit-che

etah..in;C:imagemagickImageMagick-6.7.7-Q16;C:ProgramDataOracleJavajavapath;C:Windowssystem
32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.
0;C:Program Files (x86)Gitcmd;C:HashiCorpVagrantin;D:SoftSystemBashs
hell2;C:xamppphp;C:ProgramDataComposerSetupin;C:Program Files
odejs;C:
Program FilesIntelIntel(R) Management Engine ComponentsDAL;C:Program FilesI
ntelIntel(R) Management Engine ComponentsIPT;C:Program FilesTortoiseSVNin

// set biến

C:UsersDungNV>SET MAGICK_HOME=C:/imagemagick

C:UsersDungNV>SET MAGICK_CONFIGURE_PATH=%MAGICK_HOME%/config

C:UsersDungNV>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 phiên terminal.

2. Các biến môi trường quan trọng 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 phần mềm ffmpeg (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://code24h.com

// ở đâ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.

3. Tổng kết

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 HT, thường là /usr/bin /bin /usr/local/bin /sbin ... Bài tới chúng ta sẽ tìm hiểu về cơ chế đường ống (pipe) và lọc kết quả (filter).

BÀI KẾ SAU
BÀI KẾ TIẾP

Nguồn: code24h.com

0