Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

December 29, 2015

Cài đặt và cấu hình syslog-ng trên CentOS 6

Khái niệm facility level và secrity level:

Facility level: đại diện cho đối tượng tạo ra thông báo (kernel, process).
acility NumberKeywordFacility Description
0kemkernel messages
1useruser-level messages
2mailmail system
3daemonsystem daemons
4authsecurity/authorization messages
5syslogmessages generated internally by syslog
6lprline printer subsystem
7newsnetwork news subsystem
8uucpUUCP subsystem
9-clock daemon
10authprivsecurity/authorization messages
11ftpFTP daemon
12-network news subsystem
13-log audit
14-log alert
15cronclock daemon
16local0local use 0 (local0)
17local1local use 1 (local1)
18local2local use 2 (local2)
19local3local use 3 (local3)
20local4local use 4 (local4)
21local5local use 5 (local5)
22local6local use 6 (local6)
23local7local use 7 (local7)

Việc sử dụng facility cho phép chúng ta kiểm soát log được dễ dàng hơn, dựa vào nguồn gốc của nó.

Severity levels: xác định một ngưỡng mà messages sẽ được logged
CodeSeverityKeywordDescription
0Emergencyemerg (panic)System is unstable
1AlertalertAction must be taken immediately
2CriticalcritCritical conditions
3Errorerr (error)Error conditions
4Warningwarning (warn)Warning conditions
5NoticenoticeNormal but significant condition
6InformationalinfoInformational messages
7DebugdebugDebug-level messages

Ngoài ra còn một mức đặc biệt được gọi là none, mức này sẽ disable facility đi cùng . Severity levels định nghĩa một số lượng các bản ghi chi tiết trong log file. Dấu sao[*] có thể được sử dụng để miêu tả cho tất cả cácfacilities level hoặc tất cả Severity levels

Cài đặt syslog-ng:

Yêu cầu: 
· Hệ điều hành CentOS 6.x trở lên
· Kết nối internet

Cài đặt EPEL repo:
Code:
[root@myserver ~]# cd /root
[root@myserver ~]# wget http://dl.fedoraproject.org/pub/epel...6-8.noarch.rpm
[root@myserver ~]# rpm -Uvh /root/epel-release-6-8.noarch.rpm
kiểm tra lại EPEL repo đã cài đặt thành công hay không
Code:
[root@myserver ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.cisp.com
 * epel: mirror.metrocast.net
 * extras: mirror.symnds.com
 * updates: mirrors.easynews.com
repo id     repo name                status
base        CentOS-6 - Base           4,802
epel         Extra Packages for Enterprise Linux 6 - i386  8,318
extras      CentOS-6 - Extras         12
updates    CentOS-6 - Updates      93
repolist: 13,225
cài đặt syslog-ng
Code:
[root@myserver ~]# yum install syslog-ng syslog-ng-libdbi
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.cisp.com
 * epel: archive.linux.duke.edu
 * extras: mirror.symnds.com
 * updates: mirrors.easynews.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package syslog-ng.i686 0:3.2.5-3.el6 will be installed
--> Processing Dependency: libnet.so.1 for package: syslog-ng-3.2.5-3.el6.i686
--> Processing Dependency: libevtlog.so.0 for package: syslog-ng-3.2.5-3.el6.i686
---> Package syslog-ng-libdbi.i686 0:3.2.5-3.el6 will be installed
--> Processing Dependency: libdbi.so.0 for package: syslog-ng-libdbi-3.2.5-3.el6.i686
--> Running transaction check
---> Package eventlog.i686 0:0.2.12-1.el6 will be installed
---> Package libdbi.i686 0:0.8.3-4.el6 will be installed
---> Package libnet.i686 0:1.1.5-1.el6 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
====================================================================================================
 Package                       Arch              Version                    Repository         Size
====================================================================================================
Installing:
 syslog-ng                     i686              3.2.5-3.el6                epel              442 k
 syslog-ng-libdbi              i686              3.2.5-3.el6                epel               31 k
Installing for dependencies:
 eventlog                      i686              0.2.12-1.el6               epel               17 k
 libdbi                        i686              0.8.3-4.el6                base               39 k
 libnet                        i686              1.1.5-1.el6                epel               55 k
 
Transaction Summary
====================================================================================================
Install       5 Package(s)
 
Total download size: 583 k
Installed size: 1.7 M
Is this ok [y/N]: y
Nếu hệ thống yêu cầu import GPG key, gõ y để đồng ý
Code:
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid : EPEL (6)
 Package: epel-release-6-8.noarch (installed)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Is this ok [y/N]: y
Hệ thống đã cài đặt thành công syslog-ng. Nhưng chưa thể chạy được vì mặc định hệ thống đang dùng rsylog.

Cấu hình hệ thống dùng syslog-ng:
tắt rsyslog
Code:
[root@myserver ~]# chkconfig rsyslog off
Kiểm tra lại kết quả
Code:
[root@myserver ~]# chkconfig --list rsyslog
rsyslog        0:off 1:off 2:off 3:off 4:off 5:off
bật syslog-ng
Code:
[root@myserver ~]# chkconfig syslog-ng on
kiểm tra lại kết quả
Code:
[root@myserver ~]# chkconfig --list syslog-ng
syslog-ng            0:off 1:off 2:on 3:on 4:on
Stop Rsyslog
Code:
[root@myserver ~]# service rsyslog stop
Shutting down system logger:   [  OK  ]
Start Syslog-ng
Code:
[root@myserver ~]# service syslog-ng start
Starting syslog-ng:                  [  OK  ]
Cấu hình syslog-ng nhận log từ các thiết bị trong mạng:
Thêm dòng cấu hình sau vào phần cuối của file cấu hình syslog-ng /etc/syslog-ng/syslog-ng.conf:

Code:
# test log
source s_device {
        udp(ip(0.0.0.0) port(514));
        tcp(ip(0.0.0.0) port(514));
};
 
destination d_device {
        file(
                "/var/log/syslog/$HOST-$YEAR$MONTH$DAY.log"
                perm(644)
                create_dirs(yes)
        );
};
 
log { source(s_ device); destination(d_ device); };
với cấu hình trên hệ thống sẽ nhận log từ tất cả các thiết bị trong mạng với địa chỉ ip nguồn là bất kỳ, trên port 514, giao thức tcp và upd. Và sẽ đặt file log của thiết bị trong thư mục /var/log/syslog. Tên của file log sẽ được đặt dựa vào tên của máy chủ và thời gian hiện hành của hệ thống.

khởi động lại dịch vụ syslog-ng để thực hiện các thay đổi.

Code:
[root@myserver syslog-ng]# service syslog-ng restart
Stopping syslog-ng:                     [  OK  ]
Starting syslog-ng:                     [  OK  ]

Cấu hình gởi log đến sysnlog-ng server trên windows và linux

Trong bài viết sau sẽ hướng dẫn các bạn cấu hình forward logs từ Windows & Linux đến syslog-ng server.

Trên hệ điều hành Linux

Sử dụng rsyslog.

Mở file rsyslog.conf và thêm dòng cấu hình sau vào cuối file cấu hình:

Code:
[root@test ~]# vim /etc/syslog.conf
 
#Configure syslog to Send Logs to a Remote Log Host
*.*                 @@192.168.1.11:514
Khởi động lại dịch vụ để các thay đổi được thực hiện
Code:
[root@test ~]# service syslog restart
Shutting down kernel logger:          [  OK  ]
Shutting down system logger:          [  OK  ]
Starting system logger:               [  OK  ]
Starting kernel logger:               [  OK  ]
Sử dụng syslog-ng.

Mở file cấu hình syslog-ng.conf, xóa toàn bộ nội dung bên trong file này và thêm vào phần cấu hình bên dưới.
Code:
[root@test ~]# vim /etc/syslog-ng/syslog-ng.conf
 
@version:3.2
 
# syslog-ng configuration file.
#
# This should behave pretty much like the original syslog on RedHat. But
# it could be configured a lot smarter.
#
# See syslog-ng(8) and syslog-ng.conf(5) for more information.
#
 
options {
        flush_lines (0);
        time_reopen (10);
        log_fifo_size (1000);
        long_hostnames (off);
        use_dns (no);
        use_fqdn (no);
        create_dirs (no);
        keep_hostname (yes);
};
 
source s_sys {
        file ("/proc/kmsg" program_override("kernel: "));
        unix-stream ("/dev/log");
        internal();
        # udp(ip(0.0.0.0) port(514));
};
 
destination syslog-ng_server {
        tcp("192.168.2.11" port(514));
        #udp("192.168.2.11" port(514));
};
 
log { source(s_sys); destination(syslog-ng_server); };
Lưu ý: Trong file cấu hình trên server sẽ gởi log đến remote server bằng giao thức tcp. Nếu muốn dùng giao thức udp thay cho giao thức tcp chúng ta cần sửa phần cấu hình destination syslog-ng_server thành
Code:
destination syslog-ng_server {
        #tcp("192.168.2.11" port(514));
        udp("192.168.2.11" port(514));
};
Khởi động lại dịch vụ để các thay đổi được thực hiện
Code:
[root@test ~]# service syslog-ng restart
Stopping syslog-ng:                                        [  OK  ]
Starting syslog-ng:                                        [  OK  ]
Kiểm tra ghi log

Chạy lệnh bên dưới để kiểm tra việc ghi log đến server syslog-ng trung tâm.
Code:
[root@test ~]# logger –t “message test”
Trên server log trung tâm chạy lênh sau để kiểm tra quá trình ghi log có thành công hay không. Nếu không thì kiểm tra lại kết nối mạng và cấu hình tường lửa.
Code:
[root@myserver syslog-ng]#  cat /var/log/device/{log_name}.log
Trên hệ điều hành windows.

Download ứng dụng Evtsys theo link sau.
http://shink.in/7yRdX
Sau khi download file, chúng ta tiến hành giải nén.
Mở command line và di chuyển vào thư mục file được giải nén, chạy lệnh sau.
Code:
Cú pháp: evtsys.exe -i -h [syslog server] -p [port]
C:\>evtsys.exe -i -h 192.168.2.11 -p 514
Tham khảo thêm phần cấu hình Syslog-ng theo link sauhttp://svuit.com/showthread.php?718-...3%AAn-CentOS-6

Cấu hình xoay vòng log file

Cấu hình xoay vòng log file

Phần lớn các bản phân phối sẽ cài đặt một cấu hình syslog mặc định cho hệ thống, bao gồm logging to messages và các log file khác trong thư mục /var/log. Để ngăn cản nhưng file này ngày càng lớn trở nên cồng kềnh và có thể làm đầy ổ cứng gây ảnh hưởng đến các dịch vụ khác đang chạy. một hệ thống xoay vòng log (log rotation) nên được cài đặt. Hệ thống cron đưa ra các lệnh để thiết lập những log files mới, những log file cũ được đổi tên bằng cách thay một con số ở hậu tố. ví dụ khi có sự xoay vòng log xảy ra file /var/log/messages sẽ được chuyển thành /var/log/messages.1 và hệ thống sẽ tạo mới một file /var/log/mesages. Sự xoay vòng này có thể được cấu hình cho một số lượng lớn các file. Tùy theo cấu hình mà các file này sẽ được lưu lại bao nhiêu bản cũ nhất trên server trước khi bị xóa đi.
Tiện ích thi hành rotation là logrotate. Lệnh này được cấu hình sử dụng cho một hoặc nhiều files - được xác định bởi các tham số đi cùng. File cấu hình mặc định là /etc/logrotate.conf
File cấu hình logrotate sẽ tương tự như bên dưới
Code:
[root@log ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
 
# keep 4 weeks worth of backlogs
rotate 4
 
# create new (empty) log files after rotating old ones
create
 
# use date as a suffix of the rotated file
dateext
 
# uncomment this if you want your log files compressed
#compress
 
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
 
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}
 
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}
 
# system-specific logs may be also be configured here.
Có hai kiểu xoay vòng log thường được sử dụng:
  • Xoay vòng log theo dung lượng file
  • Xoay vòng log theo thời gian


Mỗi kiểu đều có ưu nhược điểm riêng. Tùy thuộc vào đặc điểm của từng hệ thống mà ta chọn kiểu xoay vòng log thích hợp
Để cấu hình xoay vòng log cho các dịch vụ ta sẽ đặt các file cấu hình xoay vòng log trong thư mục /etc/logrotate.d

Ví dụ:
 Cấu hình xoay vòng log cho log của web server apache ta làm như sau.
Tạo file cấu hình cấu hình xoay vòng log
Vim /etc/logrotate.d/httpd

Thêm phần cấu hình bên dưới vào file cấu hình.
Code:
/var/log/httpd/*log {
  size 70M
  compress
  dateext
  notifempty
  rotate 7
  missingok
  sharedscripts
  postrotate
    /etc/init.d/httpd restart
  endscript
}
Size 70M: hệ thống sẽ xoay vòng log khi dung lượng file log lớn hơn 70M. Tại đây chúng ta cũng có thể cấu hình xoay vòng log dựa trên thời gian bằng cách dùng các chỉ thị sau (daily, weekly, monthly). Để xoay vòng log theo ngày, tuần và tháng.
Compress: nén các file log cũ theo chuẩn gzip. Mục đích giảm không gian đĩa cứng
Dateext: ngày sẽ được thêm vào trong tên file mới.
Rotate 7: hệ thống chỉ lưu giữ 7 file log trên server. Các file cũ hơn sẽ được xóa bỏ khỏi hệ thống
Misingok: hệ thống sẽ không tạo ra lỗi. Nếu tập tin không được tìm thấy.
Sharedscripts: chạy các script bất kỳ trước (prerotate) hoặc sau khi (postrotate) xoay vòng cho mỗi file log.

Tham khảo thêm tại: http://linuxcommand.org/man_pages/logrotate8.html

November 9, 2015

Một số tiện ích dùng để quản lý trên linux

Mình thi thoảng phải quản lý linux server, mà trong đó có một số thao tác quản lý quan trong như quản lý đĩa cứng, quản lý mạng, quản lý đường truyền mà nếu phải tự tìm thông tin mà không có tool sẽ rất bất tiện. Ở dưới đây mình sẽ giới thiệu một sô tool quản lý mà cá nhân mình thấy "siêu tiện" với những bạn nào hay phải mày mò trên server linux:

iotop : quản lý disk IO

Cài đặt:
$ sudo yum install iotop
Sau khi cài đặt xong thì bạn chỉ cần khởi động bằng lệnh iotop sẽ thấy một màn hình như sau:

Từ màn hình trên thì chúng ta có thể thấy câu lệnh find đang "ngốn" disk IO (read) với tốc độ đọc 9.4M 1s, và từ đó đưa ra được chính sách thích hợp :smile:

iftop: quản lý đường truyền:

Cài đặt:
$ sudo yum install iftop
Cũng như trên bạn chỉ cần khởi động bằng : sudo iftop, sẽ cho chúng ta màn hình như dưới đây:

Bạn có thể thấy rất trực quan kết nối nào, port nào đang ngốn bao nhiêu đường truyền của bạn.
Bạn có thể dùng option -i để chỉ định ethernet device:

$ sudo iftop -P -i eth0

htop: quản lý tổng quan

Chắc tool này đã quá quen thuộc với mọi người rồi nên mình không cần phải nói thêm nhiều. Mình hay sử dụng htop để xem các thông số chính như load average và số lượng core được sử dụng.

Cách cài đặt và khởi động cũng tương tự như trên, bạn có thể sử dụng yum:
$ sudo yum install htop

ohmu : tool để visualize dung lượng đĩa cứng

Đây là một tiện ích rất cool để bạn xem được phân phối đĩa cứng của bạn, xem phần mềm nào đang "ngốn" dung lượng nhất.
Bạn cài đặt thông qua python:
$ sudo yum install python-setuptools
$ sudo easy_install pip
$ sudo pip install -U pip
$ sudo pip install ohmu --upgrade
Sau khi cài đặt xong chỉ cần khởi động sudo ohmu /folder/name. Kết quả là một màn hình rất cool và dễ hiểu về phân phối dung lượng đía cứng:


Hy vọng bài viết sẽ có ích cho các bạn
nguon: http://kipalog.com/

August 21, 2015

Chống DDoS với Varnish

Thông thường Varnish sử dụng chính để làm cache front end, tuy nhiên bạn hoàn toàn có thể cấu hình sử dụng để chống DDoS.
Varnish Cache
Hướng dẫn này viết từ trường hợp thực tế, mình đã chống DDoS thành công cho một người bạn. Nếu bạn cũng đang đau đầu về việc bị DDoS, hãy tham khảo bài viết này biết đâu có thể áp dụng được.
Ngay khi kết nối SSH, mình kiểm tra file access.log thì thấy ngay đúng là server đang bị DDoS.
DDoS access.log
Một loạt request có cách thức giống nhau, cùng một user-agent, IP khác nhau. Tính sơ sơ cũng phải đến cả trăm request mỗi giây, hỏi sao server không bị overload.
Nếu sử dụng CSF để block từng IP thì không ổn, vì quá nhiều IP. May thay các request này đều có một điểm chung là user-agent trong header giống nhau, như vậy có thể block lại được toàn bộ những request này dễ dàng.
Do CSF không hỗ trợ block theo header, nên mình phải sử dụng Varnish để filter riêng những request này ra và trả về Error 403. Với một đoạn code ngắn bên dưới để trong block sub vcl_recv { ... }, mình đã khống chế hoàn toàn được vụ DDoS.
sub vcl_recv {
        if (req.http.user-agent ~ "Hotbar") {
                return(synth(403,"Not allowed."));
        }
Ý nghĩa của đoạn code trên là filter những request có user-agent chứa Hotbar, nếu có thì trả lại lỗi 403, ngược lại thì pass cho Nginx webserver xử lý.
nguồn: http://hocvps.com/chong-ddos-voi-varnish/

August 20, 2015

[SOLVED] Warning: Your hosting provider is using the suhosin patch for PHP, which limits the maximum number of fields allowed in a form: 1000 for suhosin.post.max_vars.

A script is getting this error, so we need to raise the value to about 1500.

Warning: Your hosting provider is using the suhosin patch for PHP, which limits the maximum number of fields allowed in a form: 1000 for suhosin.post.max_vars.
1000 for suhosin.request.max_vars.
Please ask your hosting provider to increase the Suhosin limit to 4581 at least, or you will have to edit the translation files.

Thank you!

SOLVED:

Just edit your php.ini (which was loaded) and add:

suhosin.request.max_vars = 5000
suhosin.post.max_vars = 5000

P.S. Please backup your php.ini before this.

Tìm kiếm file và thư mục trong Linux sử dụng giao diện dòng lệnh

Sử dụng câu lệnh Find

Câu lệnh Find cho phép người dùng tìm file nếu biết gần đúng tên file. Đây là dạng câu lệnh đơn giản nhất tìm kiếm file trong thư mục hiện tại mà khớp với tiêu chí nhất định. Người dùng có thể tìm kiếm file theo tên, chủ sở hữu, nhóm, loại file, theo quyền, ngày tháng năm và theo nhiều tiêu chí khác.
Gõ câu lệnh sau để liệt kê tất cả các file tìm được trong thư mục hiện tại:
find .
Dấu chấm chỉ thị thư mục hiện tại.
find
Để tìm những file khớp với một mẫu đặc biệt, sử dụng tham số “-name”. Người dùng có thể sử dụng siêu ký tự (như “*”) nhưng phải đặt ký hiệu thoát “\ trước mỗi siêu ký tự.
Ví dụ như, nếu ta muốn tìm tất cả các file mà bắt đầu với “pro” trong thư mục Documents, sử dụng câu lệnh cd Documents/ để chuyển tới thư mục Documents, sau đó gõ câu lệnh sau:
find . –name pro\*
Tất cả những file bắt đầu với “pro” trong thư mục sẽ được liệt kê ra.
Lưu ý: Câu lệnh find mặc định phân biệt chữ hoa và chữ thường. Nếu muốn tìm kiếm một từ hay một cụm từ không phân biệt chữ hoa chữ thường, hãy sử dụng tùy chọn “-iname” cùng câu lệnh find.
tìm tên
Nếu không có file nào phù hợp tiêu chí, sẽ không có kết quả nào hiển thị.
Câu lệnh find có nhiều tùy chọn để lọc tìm kiếm. Để tìm hiểu rõ hơn, gõ “man find” trong cửa sổ Terminal và nhấn Enter.

Sử dụng câu lệnh locate

Câu lệnh locate nhanh hơn câu lệnh find vì nó sử dụng cơ sở dữ liệu được xây dựng trước đó trong khi lệnh find lại tìm kiếm trong hệ thống theo thời gian thực, từ tất cả các thư mục và file. Câu lệnh locate trả về một danh sách tất cả tên đường dẫn chứa nhóm các ký tự đặc biệt.
Cơ sở dữ liệu được cập nhật định kỳ từ cron, nhưng người dùng cũng có thể tự cập nhật bất cứ lúc nào vì vậy có thể nhận được kết quả ngay. Để làm điều này, gõ câu lệnh sau:
sudo updatedb
Nhập mật khẩu.
mật khẩu
Dạng gốc của câu lệnh locate tìm ra tất cả các file trong hệ thống file, bắt đầu từ thư mục gốc mà chứa toàn bộ hay bất cứ phần nào của tiêu chí tìm kiếm.
locate mydata
Ví dụ như, câu lệnh sau đã tìm thấy 2 file chứa “mydata” và 1 file chứa “data”.
locate
Nếu muốn tìm toàn bộ các file hay thư mục chứa chính xác như tiêu chí tìm kiếm, sử dụng tùy chọn “-b” cùng câu lệnh locate như sau:
locate –b’\mydata’
locate2
Lệnh mlocate là một biến thể của locate. Kết quả tìm kiếm chỉ gồm những file mà người dùng hiện tại đã truy cập tới. Khi bạn cập nhật cơ sở dữ liệu mlocate, nó duy trì thông tin tem thời gian trong cơ sở dữ liệu. Việc này cho phép mlocate biết được nếu các nội dung trong một thư mục bị thay đổi mà không cần đọc lại nội dung và cập nhật vào cơ sở dữ liệu nhanh hơn mà ít phụ thuộc vào ổ cứng.
Khi cài đặt mlocate, file nhị phân /usr/bin/locate thay đổi và trỏ tới mlocate. Để cài đặt mlocate khi câu lệnh không có trong bản phân phối Linux, gõ câu lệnh sau:
sudo apt-get install mlocate
mlocate
Lệnh mlocate không sử dụng cùng file cơ sở dữ liệu với câu lệnh locate chuẩn. Do vậy, người dùng có thể tạo cơ sở dữ liệu một cách thủ công bằng cách gõ câu lệnh sau:
sudo /etc/cron.daily/mlocate
Lệnh mlocate sẽ không hoạt động cho đến khi cơ sở dữ liệu được tạo thủ công hay khi script được chạy từ cron.
mlocate database
Để xem thông tin chi tiết về câu lệnh locate và mlocate, gõ man locate hoặc man mlocatetrong cửa sổ lệnh và nhấn Enter. Màn hình trợ giúp sẽ hiện ra.

Sử dụng câu lệnh which

Lệnh which trả về đường dẫn tuyệt đối của file thực thi được gọi khi một lệnh được đưa ra. Điều này hữu ích khi cần tìm vị trí của một file thực thi để tạo một biểu tượng tắt tới chương trình trên màn hình, trên một panel hay ở vị trí khác trong tiện ích quản lý desktop. Ví dụ như, gõ câu lệnhwhich firefox sẽ hiển thị những kết quả như hình dưới.
Lưu ý: Mặc đinh thì câu lệnh which chỉ hiển thị kết quả phù hợp đầu tiên. Để hiện thị toàn bộ kết quả, sử dụng tùy chọn “-a” cùng câu lệnh. Câu lệnh “which firefox” sẽ trở thành “which –a firefox”.
which firefox
Người dùng có thể tìm kiếm nhiều file thực thi cùng một lúc. Chỉ những đường dẫn tới những file thực thi được tìm thấy mới được hiển thị. Trọng ví dụ dưới đây, chỉ file thực thi “ps” được tìm thấy.
tìm nhiều file thực thi
Lưu ý: Câu lệnh which chỉ tìm đường dẫn tới file thực thi mà người dùng hiện tại được phép sử dụng. Nếu tìm kiếm một file thực thi mà chỉ có người quản trị được phép sử dụng, sẽ không có kết quả nào được hiển thị.
Để tìm hiểu thêm thông tin về câu lệnh which, gõ man which ở cửa sổ lệnh và nhấn Enter.

Sử dụng câu lệnh whereis

Lệnh whereis được dùng để tìm kiếm vị trí đặt các file nhị phân, file nguồn hay file “man” cho một chương trình. Ví dụ như, khi gõ whereis firefox” ta sẽ thu được kết quả hiển thị như hình dưới đây.
whereis
Nếu bạn chỉ muốn đường dẫn tới file thực thi hiển thị và không hiển thị đường tới file nguồn và file “man”, sử dụng tùy chọn “-b”. Chẳng hạn như, câu lệnh “whereis –b firefox” sẽ chỉ hiển thị kết quả là “/usr/bin/firefox”. Điều này rất thuận tiện do người dùng thường sẽ tìm kiếm file thực thi chương trình nhiều hơn là tìm kiếm nguồn và file “man” của chương trình đó. Người dùng cũng có thể chỉ tìm kiếm file nguồn (“-s”) hay các file “man” (“-m”).
Để tìm hiểu thông tin chi tiết về câu lệnh, gõ man whereis ở cửa sổ câu lệnh và nhấn Enter.

Sự khác nhau giữa whereis và which

Lệnh whereis chỉ vị trí các file nhị phân, file nguồn và những file “man” với chỉ một câu lệnh, trong khi lệnh which chỉ cho ra vị trí file nhị phân.
Lệnh whereis tìm từ một danh sách thư mục đặc biệt cho file nhị phân, file nguồn và file “man” trong khi lệnh which tìm kiếm các thư mục được liệt kê trong môi trường PATH được phép của người dùng hiện thời. Với lệnh whereis, danh sách thư mục đặc biệt có thể được tìm thấy trong phần FILES của file “man”.
Theo mặc định, lệnh whereis hiển thị mọi kết quả tìm được trong khi lệnh which chỉ hiển thị kết quả đầu tiên tìm được.
Do lệnh whereis chỉ sử dụng đường dẫn đã được nhúng (hard-code) vào câu lệnh, bạn có thể không tìm thấy kết quả mình trông đợi. Nếu bạn đang tìm kiếm một chương trình mà bạn nghĩ có thể đã được cài trong một thư mục mà không được liệt kê trong file “man” của câu lệnh whereis, hãy sử dụng câu lệnh which với tùy chọn “-a” để tìm tất cả kết quả từ hệ thống.