LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

Kiến thức phần mềm

Một số lệnh hay dùng trên Linux/Ubuntu

Một số lệnh hay dùng trên Linux/Ubuntu

Một số lệnh hay dùng trên Linux/Ubuntu

Chia sẻ bài viết
5
(6)

Như chúng ta đã biết, Linux là nhân (kernel) được sử dụng cho nhiều hệ điều hành mã nguồn mở (Open-source OS) được sử dụng rộng rãi hiện nay như Linux Mint, Ubuntu, CentOS. Các hệ điều hành này là miễn phí và có các tính năng không thua kém gì các hệ điều hành thương mại. Các hệ điều hành này ngày càng đáng tin cậy, an toàn, ngày càng thân thiện với người dùng và được hàng ngàn lập trình viên trên thế giới tiếp tục phát triển.

Các hệ điều hành này hỗ trợ chế độ Terminal để thao tác với hệ thống thông qua lệnh. Ưu điểm của nó là thực hiện tác vụ nhanh hơn so với việc chúng ta sử dụng giao diện đồ họa. Do sử dụng cùng nhân Linux nên hầu hết các lệnh tương đối giống nhau trừ một số lệnh đặc biệt. Dưới đây là một số câu lệnh thông dụng mà chúng tôi giới thiệu đến các bạn tham khảo. Bạn có thể xem thêm bài viết: Lập trình Shell Script trên Linux/Ubuntu

Mục lục

Lệnh liên quan tới network

Kiểm tra địa chỉ IP Public (Check IP public)

Có nhiều trang cho phép bạn kiểm tra IP Public của máy bạn: https://www.whatismyip.com/what-is-my-public-ip-address/

Nhưng cần có trình duyệt, trường hợp bạn muốn kiểm tra bằng dòng lệnh, sử dụng lệnh sau:

curl http://checkip.amazonaws.com
curl v4.ident.me
curl ipecho.net/plain
curl http://smart-ip.net/myip
curl bot.whatismyipaddress.com

Xem phiên địa chỉ IP của máy

# Lệnh này để xem tất cả các địa chỉ IP trên máy
ifconfig

# Xem với nhiều thông tin chi tiết hơn
ifconfig -a 

Kiểm tra các cổng (port) đang được mở trên máy

Xem thông tin các cổng đang mở

# Xem tất cả các cổng (port) đang được mở
netstat

# Xem các port đang lắng nghe các kết nối tới
netstat -l 

Bạn có thể sử dụng thêm với lệnh grep để lấy chi tiết thông tin.

# Liệt kê kết nối tới cổng 8080
netstat -an | grep :8080

# Đếm số kết nối tới cổng 8080
netstat -an | grep :8080 | wc -l

# Thêm tham số -p để biết pid của ứng dụng đang mở cổng hoặc đang kết nối tới cổng
netstat -alp | grep 8080
netstat -anp | grep 8080 

Các lệnh nén và giải nén dữ liệu

# Cài đặt một số ứng dụng hỗ trợ nén và giải nén
sudo apt install zip unzip pv

# Lệnh nén 1 tệp sang zip file
zip a.log.zip a.log

# Lệnh giải nén tệp zip
unzip a.log.zip

# Giải nén tệp tar.gz, nhưng không biết được tiến trình
# Nếu là tệp lớn phải chờ lâu thì hơi bất tiện
tar -xf mysql.tar.gz

# Giải nén tệp tar.gz và hiển thị tiến trình
pv mysql.tar.gz | tar -xz 

Xem thông tin server

Ghi chú: Hầu hết các lệnh trên xem thông tin cấu hình server đều phải sử dụng quyền root.

Xem thông tin nhà sản xuất

Xem thông tin nhà sản xuất
Xem thông tin nhà sản xuất
# Lệnh này cho phép xem thông tin về nhà sản xuất server
sudo dmidecode | grep "System Information" -A 9

Xem thông tin thông tin Mainboard

Xem thông tin thông tin Mainboard
Xem thông tin thông tin Mainboard
#  Lệnh này sẽ xuất ra màn hình thông tin Mainboard của server, tuy nhiên không phải tất cả server đều có thông tin này
sudo dmidecode | grep "Base Board" -A 10

Xem thông tin CPU

Xem thông tin CPU
Xem thông tin CPU
#  Lệnh này sẽ trả về thông tin của CPU trong server, tuy nhiên sẽ chỉ trả về thông tin của từng Core
cat /proc/cpuinfo | head -n 25
Xem thông tin của CPU Core
Xem thông tin của CPU Core
# Lấy thông tin về tổng số core của CPU
cat /proc/cpuinfo | grep processor | wc -l

# Lấy thông tin chi tiết hơn
cat /proc/cpuinfo 

Xem thông tin số CPU Cores

lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('

CPU(s):                56
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             2 

Như trên số CPU Cores là 56, tức là máy có thể chạy 56 tiến trình song song thực sự. Công thức tính: [Số CPU Cores] = [Số lượng Socket] * [Số core trên 1 socket] * [Số thread trên 1 core] = 2*14*2=56

Ngoài ra, bạn có thể cài ứng dụng để xem thông tin:

sudo apt-get install libvirt-bin
sudo virsh nodeinfo

CPU model:           x86_64
CPU(s):              56
CPU frequency:       2297 MHz
CPU socket(s):       1
Core(s) per socket:  14
Thread(s) per core:  2
NUMA cell(s):        2
Memory size:         65731628 KiB 

Xem thông tin RAM

Xem thông tin RAM
Xem thông tin RAM
cat /proc/meminfo

Lệnh này sẽ trả về các thông tin về bộ nhớ RAM, trong đó MemTotal chính là tổng dung lượng bộ nhớ RAM đang có trong server.

Xem thông tin HDD

Xem thông tin HDD
Xem thông tin HDD
cat /proc/scsi/scsi

Lệnh này sẽ trả về thông tin những HDD vật lý đang được lắp trong server tuy nhiên chỉ bao gồm model HDD chứ không bao gồm dung lượng. 

Xem thông tin HDD
Xem thông tin HDD
# Liệt kê dung lượng các HDD đang được lắp
sudo fdisk -l | grep Disk

# Nếu chỉ xem dung lượng các ổ
df -h

# Liệt kê các file có dung lượng lớn hơn 100M (large file)
find / -xdev -type f -size +100M -exec du -sh {} ';' | sort -rh | head -n50 

Xem thông tin PCI Bus

lspci
Lệnh này sẽ hiển thị thông tin về tất cả PCI Bus và các thiết bị kết nối tới nó. Lệnh này có thể gộp của “ls” + “pci”.

# lspci
00:00.0 Host bridge: Intel Corporation 5500 I/O Hub to ESI Port (rev 13)
00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 13)
00:09.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 9 (rev 13)
00:14.0 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub System Management Registers (rev 13)
00:14.1 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers (rev 13)
00:14.2 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub Control Status and RAS Registers (rev 13)
00:1a.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02)
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801IB (ICH9) 2 port SATA Controller [IDE mode] (rev 02)
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
06:03.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200eW WPCM450 (rev 0a

Ngoài ra bạn có thể sử dụng thêm các tham số tùy theo mục đích sử dụng. Ví dụ:

# Xem thông tin SubSystem
lspci -m

# Hiển thị dưới dạng cây để xem các thiết bị nào kết nối tới nó
lspci -t

# Xem thông tin chi tiết
lspci -v

Xem thông tin hệ điều hành

Để xem đầy đủ thông tin hệ điều hành, bạn sử dụng lệnh sau:

uname -a

Linux TEST-APP01 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

Ngoài ra bạn có thể sử dụng tham số sau để lấy thông tin từng loại:

  • -s: Tên nhân hệ điều hành (Kernel name)
  • -r: Phiên bản nhân release hệ điều hành sử dụng (Kernel release)
  • -v: Phiên bản nhân (Kernel version)
  • -n: Tên node (Nodename)
  • -m: Tên phần cứng (Hardware name)
  • -i: Platform phần cứng (Hardware platform)
  • -p: Kiểu bộ vi xử lý (Processor type)
  • -o: Hệ điều hành (Operating system)

Xem phiên bản bộ biên dịch C/C++

gcc -v
g++ -v
cc -v
c++ -v
make -v
cmake -v

Thường bạn cài lệnh sau sẽ có đầy đủ công cụ để build các project C/C++:

sudo apt-get install build-essential
sudo apt  install cmake
sudo apt-get install autotools-dev
sudo apt-get install autoconf

Xem log đăng nhập hệ thống

# Lệnh này để xem tất cả các log đăng nhập hệ thống
last

Xem log các lệnh đã thực thi trên hệ thống

# Xem tất cả các lệnh mà đã được thực thi trên server trước đó
history

# Kết hợp với lệnh grep để tìm lệnh nào đã thực hiện trước đó
history | grep gcc

Trên Ubuntu, các lệnh trong history của từng user được lưu trong tệp ~/.bash_history tương ứng của user đó. Do đó, trên Ubuntu, bạn có thể xem history bằng lệnh:

cat ~/.bash_history

Xem không gian ổ đĩa

# Xem thông tin ổ đĩa (Tổng dung lượng, dung lượng đã sử dụng, dung lượng chưa sử dụng) 
df
df -h

# Liệt kê folder, file và kích thước tương ứng
du -sh /*
du -sh * 

Xem dung lượng bộ nhớ

# Xem dung lượng bộ nhớ (Tổng dung lượng, dung lượng đã sử dụng, dung lượng chưa sử dụng)
free -m

Lệnh quản trị hệ thống

Kiểm tra, cài đặt, gỡ bỏ các gói cài đặt

Trên dòng Linux, công cụ APT (Advanced Packageing Tool) được sử dụng phổ biến để thực hiện cài đặt các gói. Tất cả lệnh dùng với công cụ này đều phải sử dụng quyền root. Nếu bạn ở account thường bạn phải thêm sudo đằng trước, nếu bạn đang ở tài khoản root thì không cần.

Để cài đặt một gói sử dụng lệnh sau:

sudo apt-get install <package-name-01> <package-name-02> ...

Mọi người chỉ cần đến install rồi nhấn phím tab thì cộng cụ hiển thị tên tất cả các gói hỗ trợ, hoặc nhập một phần tên gói và nhấn tab để công cụ gợi ý thêm tên chính xác.

# Lệnh sau thực hiện cài đặt gói từ mã nguồn
sudo apt-get build-dep <package-name>

# Lệnh sau sẽ thực hiện gỡ bỏ một gói
sudo apt-get remove <package-name>
sudo apt-get remove --purge <package-name>
sudo apt-get purge <package-name> 


Sử dụng lệnh với remove thì công cụ chỉ gỡ bỏ những tệp cài đặt nhưng vẫn giữ nguyên các tệp cấu hình, còn sử dụng purge thì công cụ sẽ gỡ bỏ toàn bộ cả tệp cài đặt và tệp cấu hình.

# Lệnh sau thực hiện tìm kiếm các gói
sudo apt-get search <search-info>

search-info có thể là tên chương trình, ghi chú,…. Lệnh này trả về danh sách các tên gói phù hợp điều kiện tìm kiếm.

# Lệnh sau thực hiện cập nhật danh sách các package
# Lệnh này sẽ làm thay đổi tệp /etc/apt/sources.list hoặc /etc/apt/preferences
sudo apt-get update

# Lệnh sau sẽ nâng cấp tất cả các gói đã cài đặt
sudo apt-get upgrade 

# Lệnh sau nâng cấp toàn bộ hệ thống tới một phiên bản mới, tự động giải quyết xung đột (Ít dùng)
sudo apt-get dist-upgrade

# Lệnh sau thực hiện để chuẩn đoán. Nó không cập nhật danh sách nguồn, mà chỉ kiểm tra lỗi phụ thuộc
sudo apt-get check

# Lệnh này để xử lý lỗi phụ thuộc trong lệnh cài đặt trước đó:
sudo apt-get -f install

Lệnh sau gỡ bỏ các tệp cài đặt .deb đã cũ trong hệ thống của bạn. Phụ thuộc vào thói quen cài đặt của bạn, xóa bỏ các tệp trong /var/cache/apt/archives có thể thu hồi một lượng không gian đĩa đáng kể:

sudo apt-get autoclean

Lệnh sau tương tự như trên nhưng nó sẽ xóa bỏ tất cả các gói trong nơi lưu trữ:

sudo apt-get clean

Nó không tốt lắm nếu bạn đang sở hữu một đường truyền Internet chậm, vì khi cài đặt sẽ phải tải lại các gói (đáng ra có sẵn tại nơi lưu trữ).

Lênh sau sẽ cho biết dung lượng các gói được lưu trữ:

du -sh /var/cache/apt/archives

Nơi lưu trữ các gói đã được cài đặt là /var/cache/apt/archives.

Dùng tham số -s đằng trước để giả lập hành động. Ví dụ lệnh sau:

sudo apt-get -s install <package-name>

sẽ giả lập việc cài đặt một gói, cho bạn biết nơi gói sẽ được cài đặt và cấu hình của nó.

Ngoài ra để cài đặt các tệp *.rpm bạn phải sử dụng công cụ RPM (Red Hat Package Manager). Lệnh thực hiện cài đặt gói rpm như sau:

rpm -ivh pidgin-2.7.9-5.el6.2.i686.rpm

Trong đó-i là cài đặt; -v để hiển thị đẹp hơn và-h để hiển thị dấu # cho các gói đã giải nén. Trong trường hợp bạn thấy tất cả các thành cần thiết đều đã được cài đặt thì hệ thống vẫn báo thiếu, bạn có thể sử dụng tham số –nodeps để bỏ qua không yêu cầu phải cài đặt các thành phần phụ thuộc trước:

rpm -ivh --nodeps BitTorrent-5.2.2-1-Python2.4.noarch.rpm

Lệnh sau kiểm tra các thành phần phụ thuộc:

rpm -qpR BitTorrent-5.2.2-1-Python2.4.noarch.rpm

Trong đó, tham số -q nghĩa là truy vấn,-p là liệt kê danh sách các thành phần mà gói hỗ trợ,-R là liệt kê danh sách các thành phần mà gói này phụ thuộc.

# Để kiểm tra một gói RPM đã được cài đặt hay chưa, bạn hãy sử dụng tham số -q
rpm -q BitTorrent

# Để hiển thị chi tiết các tệp trong gói RPM đã được cài đặt, bạn hãy sử dụng tham số -ql (query list)
rpm -ql BitTorrent

# List danh sách các PPA bằng lệnh
ls /etc/apt/sources.list.d

# Dựa trên list trên xem PPA nào lỗi, sau đó dùng lệnh sau hay xóa
sudo rm -i /etc/apt/sources.list.d/myppa.list

Kiểm tra các tiến trình đang chạy

ps là lệnh sử dụng để kiểm tra tiến trình đang chạy. Cú pháp của lệnh hỗ trợ cả hai kiểu cú pháp là BSD và UNIX.

# Hiển thị danh sách các tiến trình và thông tin chi tiết tiến trình, bạn sử dụng một trong hai lệnh sau
ps aux
ps -ef

# Để hiển thị các tiến trình của một người dùng nào đó, bạn sử dụng tham số -u
ps -f -u test_user

# Để tìm kiếm tiến trình theo tên, bạn sử dụng tham số -C
ps -C apache2

# Để tìm kiếm tiến trình theo Process ID, bạn sử dụng tham số -p
ps -f  -p 3150,7298,6544

# Để hiển thị tiến trình sắp xếp theo thứ tự sử dụng CPU, RAM, bạn hãy sử dụng lệnh sau
ps aux --sort=-pcpu,+pmem

# Để hiển thị tiến trình theo cấu trúc cây, bạn sử dụng tham số --forest
ps -f --forest -C apache2

# Ngoài ra bạn kết hợp với lệnh grep để tìm đúng tiến trình mình mong muốn
ps -ef | grep process_test

# Lệnh sau hiển thị cây tiến trình
pstree

Lệnh lấy pid của một tiến trình đang chạy

Lệnh ps chỉ giúp xem pid của một tiến trình đang chạy, còn nếu muốn lấy chính xác pid thì hơi khó. Trong trường hợp cần lấy chính xác pid của một process, bạn nên sử dụng lệnh sau:

pidof <ProcessName>

Trong đó ProcessName là tên tiến trình đang chạy, có thể trả về một hoặc nhiều pid. Ví dụ:

pidof compiz
2180

pidof bash
24321 12769 10331 8116 2408

Ngoài ra bạn có thể sử dung ps kết hợp với awk:

ps aux | grep -i firefox | awk {'print $2'}

Bạn có thể thay firefox bằng tên khác. Lệnh này trả về cả pid của tiến trình hiện tại.

Dừng các tiến trình bị treo

kill là lệnh dừng các tiến trình khi tiến trình đó bị treo. Chỉ có super-user mới có thể dừng tất cả các tiến trình còn user khác chỉ có thể dừng tiến trình mà user đó tạo ra.
Trước khi kill một tiến trình, bạn cần xác định pid của tiến trình đó, sau đó sử dụng một trong các lệnh sau:

kill -TERM pid
kill -SIGTERM pid
kill -9 pid

Ví dụ kill tiến trình firefox:

$ ps -ef | grep firefox
1986 ?        Sl     7:22 /usr/lib/firefox-3.5.3/firefox

$ kill -9 1986
# Với lệnh killall, bạn có thể kill tiến trình theo tên
killall -9 firefox

# Lệnh pkill sẽ kill tất cả các tiến trình có tên chứa xâu truyền vào
pkill sample 

# Có thể sử dụng kết hợp với lệnh pidof ở trên
kill -9 $(pidof firefox) 

Xem tài nguyên hệ thống

top là lệnh hiển thị sự hoạt động của các tiến trình, đặc biệt là thông tin về tài nguyên hệ thống và việc sử dụng các tài nguyên đó của từng tiến trình.
Lệnh sau sẽ hiển thị thông tin các Task, thông tin bộ nhớ, CPU và vùng Swap. Nhấn phím ‘q’ để thoát khỏi cửa sổ:

top

Sử dụng tham số -O (Không phải số 0 mà là chữ O viết hoa) để sắp xếp tiến trình:

top -O

Tiếp đó bạn nhấn (Shift + O) để hiển thị danh sách kí tự tương ứng với trường thông tin, sau đó bạn nhấn kí tự tương ứng với trường để sắp xếp theo trường đó. Ví dụ nhấn phím ‘a’ để sắp xếp theo PID, nhấn (Shift+P) để sắp xếp theo % sử dụng CPU.

Sử dụng tham số -u để hiển thị thông tin các tiến trình theo user:

top -u tecmint

Hiển thị tiến trình đang chạy dưới dạng cây

pstree là lệnh hiển thị các tiến trình đang chạy dưới dạng cây. Bạn có thể sử dụng một trong các cú pháp sau:

pstree
pstree pid
pstree user

Ngoài ra bạn có thể sử dụng lệnh tree:

tree

Trường hợp báo không tìm thấy lệnh thì bạn phải cài đặt gói này bằng lệnh: sudo apt-get install tree

Xem cú pháp dòng lệnh

man là lệnh xem hướng dẫn về dòng lệnh như cú pháp, các tham số… Ví dụ:

man man

Giải phóng bộ nhớ cache

Nếu OS sử dụng quá nhiều memory cho cache, thì bạn có thể dùng lệnh sau để giải phóng:

sudo su
sync; echo 1 > /proc/sys/vm/drop_caches

Lệnh này không ảnh hưởng đến các ứng dụng đang chạy.

Hiển thị ứng dụng sử dụng nhiều bộ nhớ nhất

# Lệnh sau hiển thị 10 ứng dụng sử dụng nhiều bộ nhớ nhất
ps aux --sort=-%mem | awk 'NR<=10{print $0}'

Lệnh thao tác người dùng

Lệnh tạo người dùng mới

useradd: là lệnh tạo một người dùng mới. Cú pháp của lệnh như sau:

useradd [options] username

Đơn giản nhất để tạo user mới bạn sử dụng lệnh sau:

useradd tecmint

Lệnh này tạo user mới nhưng user này ở trạng thái khóa, để mớ khóa user này bạn cần phải thiết lập mật khẩu bằng lệnh passwd:

passwd tecmint

Hệ thống hiển thị giao diện để bạn nhập mật khẩu. Khi người dùng mới được tạo, hệ thống sẽ tự động thêm vào tệp ‘/etc/passwd‘. Tệp này được sử dụng để lưu trữ thông tin các người dùng. Nội dung thêm dạng như dưới (Thư mục home mặc định hệ thống để là: /home/) :

tecmint:x:504:504:tecmint:/home/tecmint:/bin/bash

Để tạo user với thư mục home được xác định trước, bạn dùng lệnh sau:

useradd -d /data/projects anusha

Để tạo user trong một nhóm xác định, bạn sử dụng tham số -g theo sau là GID (Group ID). Nếu bạn muốn xác định User ID (UID) bạn sử dụng tham số -u theo sau là UID:

useradd -u 1000 -g 500 tarunika

Để thêm user vào nhiều group, bạn dùng tham số -G theo sau là danh sách tên các group:

useradd -G admins,webadmin,developers tecmint

Mặc định khi tạo tài khoản người dùng mới, tài khoản sẽ không bao giờ bị hết hạn.

# Nếu bạn muốn tạo tài khoản có thời gian sử dụng bạn sử dụng tham số -e
useradd -e 2014-03-27 aparna

# Nếu muốn thiết lập thời gian hết hạn của mật khẩu, bạn sử dụng tham số -f theo sau số ngày
useradd -e 2014-04-27 -f 45 tecmint

# Còn nếu bạn muốn kiểm tra thời gian hết hạn của tài khoản, bạn sử dụng lệnh change với tham số -l
chage -l aparna 

Lệnh tạo nhóm người dùng mới

groupadd: là lệnh tạo một nhóm người dùng mới. Khi dùng lệnh này, thông tin sẽ được cập nhật vào tệp “/etc/group“. Cú pháp lệnh như sau:

groupadd [options] group
# Để tạo nhóm người dùng mới, bạn dùng lệnh sau
groupadd apache

# Để kiểm tra chắc chắn bạn đã tạo thành công chưa, bạn sử dụng lệnh sau
# Nếu thấy có dòng có tên nhóm là apache là okie
grep apache /etc/group

Thay đổi mật khẩu người dùng

passwd là lệnh thay đổi mật khẩu người dùng. Cú pháp của lệnh như sau:

passwd {options} {user_name}
# Nếu bạn đăng nhập với người dùng thông thường, lệnh sau sẽ thay đổi mật khẩu của người dùng hiện tại
passwd

# Nếu bạn đăng nhập dưới người dùng root, bạn sẽ có thể thay đổi mật khẩu các các người dùng khác
passwd linuxtechi

# Để hiển thông tin trạng thái mật khẩu, bạn sử dụng tham số-S
passwd -S linuxtechi

# Để hiển thị thông tin trạng thái mật khẩu của tất cả người dùng, bạn sử dụng tham số -Sa
passwd -Sa

# Để xóa mật khẩu của người dùng, bạn sử dụng tham số -d
passwd -d linuxtechi 

# Để thiết lập mật khẩu của người dùng hết hạn ngay lập tức, bạn sử dụng tham số -e
passwd -e linuxtechi 

# Để khóa mật khẩu người dùng, bạn sử dụng tham số -l
passwd -l linuxtechi 

# Để mở khóa mật khẩu người dùng, bạn sử dụng tham số-u
passwd -u linuxtechi

# Để thiết lập sau bao nhiêu ngày phải đổi mật khẩu, bạn sử dụng tham số -n
passwd -n 90 linuxtechi 

Xóa người dùng

userdel là lệnh xóa người dùng. Cú pháp của lệnh như sau:

userdel [options] username

Lệnh sau xóa người dùng linuxtechi:

userdel -r linuxtechi

Thao tác nhóm người dùng

groupdel là lệnh xóa người nhóm dùng. Cú pháp của lệnh như sau:

groupdel group

Lệnh sau xóa nhóm test:

groupdel test

gpasswd là lệnh giúp quản trị nhóm người dùng, bạn có thể sử dụng lệnh này để đổi mật khẩu, thêm hay loại bỏ người dùng khỏi nhóm. Cú pháp của lệnh như sau:

gpasswd [option] group
# Sử dụng tham số -r để xóa mật khẩu
gpasswd -r test

# Sử dụng tham số -a để thêm người dùng vào nhóm
gpasswd -a daothang test

# Sử dụng tham số -d để xóa người dùng khỏi nhóm
gpasswd -d daothang test

groups giúp hiển thị danh sách người dùng trong một nhóm. Cú pháp của lệnh như sau:

groups [user]

Lệnh sau hiển thị danh sách người dùng trong trong nhóm chứa người dùng hiện tại:

groups

Lệnh sau hiển thị danh sách người dùng trong trong nhóm chứa người dùng daothang:

groups daothang

Lệnh thao tác với thư mục, tệp tin

Lệnh cơ bản thao tác thư mục tệp tin trên Linux/Ubuntu

Một số lệnh thông thường chắc ai dùng Linux đều biết:

# Lệnh tạo thư mục
mkdir <Tên thư mục cần tạo>

# Lệnh xóa thư mục (Yêu cầu thư mục phải là thư mục trống)
rmdir <Tên thư mục cần xóa>

# Lệnh chuyển thư mục
cd <Đường dẫn tới thư mục cần chuyển>

# Lệnh xem danh sánh cách tệp trong thư mục
ls
ls -al

# Lệnh tạo tệp mới và tệp này trắng
touch <Tên tệp muốn tạo>

# Nếu muốn tạo và edit luôn thì bạn sử dụng một trong các lệnh sau
vi <Tên tệp muốn tạo>
nano <Tên tệp muốn tạo>
gedit <Tên tệp muốn tạo>

Mỗi lệnh tương ứng với 1 tool, tùy theo từng người mà thích dùng tool nào hơn. Riêng gedit là GUI Tool cho phép sửa trực quan bằng giao diện. Ngoài ra bạn có thể sử dụng nhiều tool khác.

# Để xóa một tệp tin bạn sử dụng lệnh sau
rm <Tên tệp cần xóa>

# Trường hợp bạn muốn xóa tệp, thư mục và tất cả các file trong các thư mục con ban sử dụng lệnh sau
rm -rf <Tên tệp hoặc thư mục cần xóa>

Tên tệp hoặc thư mục bạn có sử dụng kí tự *, ?… Lệnh này rất nguy hiểm, nếu đánh nhầm tên thư mục có thể xóa hết toàn bộ dữ liệu hệ thống.

Lệnh thao tác tệp trên FTP Server

Sử dụng lệnh ftp để kết nối tới server FTP:

ftp 192.168.0.1
ftp domain.com
ftp user@ftpdomain.com

Sau khi kết nối đến rùi, các lệnh cũng gần giống như thao tác trên Ubuntu thông thường:

# Sử dụng lệnh cd để chuyển thư mục, lệnh ls để xem danh sách tệp
cd test
ls

# Để chuyển tệp giữa các thư mục trên FTP, bạn sử dụng lệnh rename
mkdir bk
rename my_file.txt bk/my_file.txt

# Để lấy tệp từ server, trước hết bạn phải dùng lệnh lcd để thiết lập thư mục sẽ tải tệp về, sau đó dùng lệnh get để tải tệp
lcd /u01/test
get my_file.txt

# Để lấy nhiều tệp, bạn sử dụng lệnh mget
mget *.txt 

Lệnh này sẽ hỏi bạn có thực hiện từng tệp không, để hệ thống không hỏi lại khi kết nối tới FTP bạn phải thêm tham số -i:

ftp -i 192.168.0.1
# Để đẩy tệp lên FTP Server bạn sử dụng lệnh put
put test_file.xls

# Để đẩy nhiều tệp, bạn sử dụng lệnh mput
mput *.xls

# Để đóng kết nối, bạn có thể sử dụng một trong các lệnh sau
bye
exit
quit

Lệnh thao tác với SFTP Server

Trên Ubuntu 16, sử dụng lệnh sau để download file từ FTP Server:

wget ftps://test:123456a@@172.19.200.164/test/test.log --no-check-certificate

Để upload file lên bạn cần cài đặt phần mềm lftp trước:

sudo apt-get install lftp

Trong thư mục home, tạo tệp mới tệp .lftprc:    

nano ~/.lftprc

Với nội dung như sau:

set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no

Sau đó đánh lệnh sau để upload tệp

$ lftp test@172.19.200.164
Password:

$ lftp test@172.19.200.164:~> mput test.zip
1031293623 bytes transferred in 18 seconds (53.53 MiB/s)

Lệnh xác định vị trí của một file

Có nhiều trường hợp bạn chỉ biết tên file nhưng không biết nó được lưu trong thư mục nào, khi đó bạn có thể sử dụng lệnh sau để xác định vị trí của file:

locate <Tên tệp>

Ví dụ:

locate libxml2.so
/opt/lampp/lib/libxml2.so
/opt/lampp/lib/libxml2.so.2
/opt/lampp/lib/libxml2.so.2.9.4

Lệnh locate trên tìm rất nhanh vì thực chất nó lấy dữ liệu từ một database có sẵn, để đảm bảo chính xác bạn nên gọi lệnh cập nhật database này trước khi sử dụng lệnh locate:

sudo updatedb
locate libxml2.so

Lệnh tìm kiếm tệp

Bạn có thể sử dụng lệnh find, lệnh này có ưu điểm hỗ trợ tìm kiếm theo pattern:

find <Thư-mục-tìm-kiếm> -name <Pattern-tìm-kiếm>

Ví dụ:

find / -name libxml*
# Nếu bạn muốn tên tệp không phân biệt hoa thường có thể dùng lệnh
find / -iname libxml*

# Sử dụng thêm "-not -path" nếu muốn loại bỏ thư mục không tìm kiếm
find / -iname libxml* -not -path './obj/*'

# Sử dụng "-type f" nếu muốn chỉ tìm file, không phải thư mục
find / -iname libxml* -not -path './obj/*' -type f

Lệnh tìm các tệp có nội dung chứa text nào đó

Kết hợp lệnh find với grep để thực hiện điều này:

find / -type f -exec grep -H 'text-to-find-here' {} \;

Bạn mở rộng lệnh này với các option cho lệnh find như ở trên. Ví dụ:

find . -iname "*.h" -not -path './data/*' -type f -exec grep -H 'public class' {} \;

Lệnh loại bỏ phần comment khỏi tệp

Nhiều những tệp có quá nhiều comment (Bắt đầu bằng dấu #) trong khi dòng cấu hình thực rất ít. Bạn mong muốn loại bỏ hết các comment để có thể tập trung vào dữ liệu cần:

grep -o '^[^#]*' file

Ví dụ:

grep -o '^[^#]*' squid.conf.default > squid.conf

Lệnh tạo tệp với dung lượng tùy ý

Đôi khi bạn cần tạo ra các tệp dữ liệu lớn, chẳng hạn để test trường hợp đầy HDD, hoặc test ứng dụng khi xử lý file lớn. Để tạo tệp dung lượng lơn, sử dụng lệnh sau:

fallocate -l 10G test.log

Lệnh trên tạo ra tệp test.log có dung lượng 10G. Các thông số bạn có thể thay đổi cho phù hợp.

Xem dung lượng của tệp, thư mục

# Sử dụng 1 trong các lệnh sau để xem kích thước các tệp trong thư mục hiện tại
ls -l
ll

# Lệnh sau hiển thị các file và sắp xếp theo thời gian
ls -lt
ls -ltr

# Lệnh sau để xem kích thước 1 thư mục
du -hs /path/to/directory
du -hs *
du -sh * | sort -h

# Lệnh tìm kiếm các file (tệp) có dung lượng lớn hơn 100M
find / -xdev -type f -size +100M -exec du -sh {} ';' | sort -rh | head -n50

Lệnh thao tác văn bản

Xử lý văn bản với lệnh awk

awk không đơn giản là lệnh mà có thể gọi nó như ngôn ngữ lập trình. Nó cho phép bạn thực hiện các xử lý phức tạp. Chi tiết hơn bạn có thể xem tại: https://likegeeks.com/awk-command/https://linuxconfig.org/learning-linux-commands-awkhttps://www.tutorialspoint.com/awk/awk_basic_examples.htm

Khi sử dụng xử lý text bạn cần biết:

  • awk sẽ tách dữ liệu đầu phân chia bởi dấu cách vào thành mảng. Để truy cập vào các phần tử bạn sử dụng kí tự $ theo sau là số:
    • $0: Toàn bộ dòng
    • $1: Trường thứ nhất
    • $2: Trường thứ 2
    • $n: Trường thứ n
  • Ngoài ra awk hỗ trợ sẵn các biến:
    • FIELDWIDTHS: Chỉ định chiều rộng trường
    • RS: Chỉ định dấu phân cách giữa các bản ghi
    • FS: Chỉ định dấu phân cách các trường dữ liệu
    • OFSORS: Chỉ định dấu phân cách đầu ra
  • Hỗ trợ cấu trúc lặp: whilefor
  • Hỗ trợ lệnh rẽ nhánh: if
  • Các hàm/lệnh hay sử dụng:
    • Lệnh in ra màn hình: printprintf
    • Hàm toán học: sincossqrtexplogrand,…
    • Hàm thao tác xâu: touppertolower,…
    • Hàm tự bạn định nghĩa

Nói đầu đủ về lệnh này thì mất rất nhiều thời gian, bạn có thể tham khảo các link ở trên. Ở đây tôi chỉ đưa ra ví dụ sử dụng:

Giả sử bạn có dữ liệu log lưu trong tệp test.log với nội dụng dạng như dưới, trong đó có các dòng log thời gian tính theo mili giây. Bạn cần lấy dòng log có thời gian lớn hơn 1 giây:

[2018-03-19 03:50:12.340] [INFO] test - conn.query 1521406212314
[2018-03-19 03:50:12.340] [INFO] test - before commit 1521406212314
[2018-03-19 03:50:12.421] [INFO] test - after commit 1521406212314
[2018-03-19 03:50:12.421] [INFO] test - before callback 1521406212314
[2018-03-19 03:50:12.421] [INFO] test - insert_execution callback begin emit begin
[2018-03-19 03:50:12.422] [INFO] test - insert_execution callback emit end
[2018-03-19 03:50:12.422] [INFO] test - g_nLastNewOrderTimestamp 1521406212422
[2018-03-19 03:50:12.423] [INFO] test - ltrim begin
[2018-03-19 03:50:12.423] [INFO] test - insert_execution callback end
[2018-03-19 03:50:12.423] [INFO] test - after callback 1521406212314
[2018-03-19 03:50:12.427] [INFO] test - 1 'trades in ' 113.43395599722862 'ms'
[2018-03-19 03:50:12.427] [INFO] test - list begin lrange begin
[2018-03-19 03:50:12.427] [INFO] test - ltrim end normal.
[2018-03-19 03:50:12.429] [INFO] test - lrange callback begin
[2018-03-19 03:50:12.429] [INFO] test - list end lrange callback end lrange end
[2018-03-19 03:50:18.985] [INFO] test - list begin lrange begin
[2018-03-19 03:50:18.988] [INFO] test - lrange callback begin
[2018-03-19 03:50:18.989] [INFO] test - 2018-03-18T20:50:18.989Z get_trade 3
[2018-03-19 03:50:18.992] [INFO] test - Transaction No 1521406218991
[2018-03-19 03:50:18.993] [INFO] test - last of insert_execution
[2018-03-19 03:50:18.993] [INFO] test - list end lrange callback end lrange end
[2018-03-19 03:50:18.995] [INFO] test - pool.getConnection
[2018-03-19 03:50:18.997] [INFO] test - pool.beginTransaction 1521406218991
[2018-03-19 03:50:19.010] [INFO] test - conn.query 1521406218991
[2018-03-19 03:50:19.010] [INFO] test - before commit 1521406218991
[2018-03-19 03:50:19.051] [INFO] test - after commit 1521406218991
[2018-03-19 03:50:19.051] [INFO] test - before callback 1521406218991
[2018-03-19 03:50:19.051] [INFO] test - insert_execution callback begin emit begin
[2018-03-19 03:50:19.052] [INFO] test - insert_execution callback emit end
[2018-03-19 03:50:19.052] [INFO] test - g_nLastNewOrderTimestamp 1521406219052
[2018-03-19 03:50:19.053] [INFO] test - ltrim begin
[2018-03-19 03:50:19.053] [INFO] test - insert_execution callback end
[2018-03-19 03:50:19.054] [INFO] test - after callback 1521406218991
[2018-03-19 03:50:19.061] [INFO] test - 3 'trades in ' 70.98334199935198 'ms'
[2018-03-19 03:50:19.062] [INFO] test - list begin lrange begin
[2018-03-19 03:50:19.062] [INFO] test - ltrim end normal.
[2018-03-19 03:50:19.068] [INFO] test - lrange callback begin
[2018-03-19 03:50:19.068] [INFO] test - list end lrange callback end lrange end
[2018-03-19 03:50:19.201] [INFO] test - list begin lrange begin
[2018-03-19 03:50:19.204] [INFO] test - lrange callback begin

Với awk bạn chỉ cần sử dụng lệnh đơn giản sau:

cat test.log | grep "'ms'" | awk {'if ($10>1000) print'}

Xử lý một số lỗi hay gặp trên Ubuntu

apt-get update fails to fetch files, “Temporary failure resolving …” error

Lỗi khi bạn thực hiện “apt-get update” nhưng nhiều link không lấy được dữ liệu do không xác định được IP từ một số domain.

<code>Reading package lists... Done
W: Failed to fetch http://gb.archive.ubuntu.com/ubuntu/dists/oneiric/InRelease      
W: Failed to fetch http://gb.archive.ubuntu.com/ubuntu/dists/oneiric-updates/InRelease  
W: Failed to fetch http://gb.archive.ubuntu.com/ubuntu/dists/natty-backports/InRelease  
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/oneiric-security/InRelease  
W: Failed to fetch http://archive.canonical.com/ubuntu/dists/natty/InRelease  
W: Failed to fetch http://extras.ubuntu.com/ubuntu/dists/natty/InRelease </code>

Gặp lỗi này bạn cấu hình DNS cho Ubuntu sang DNS của Google: 8.8.8.8 bằng lệnh sau:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null

Ubuntu sử dụng hết RAM cho phần cache

Hiện tại tôi có server với RAM 16G, ứng dụng chỉ sử dụng hơn 7.1G, còn dư 700M, còn lại hệ thống sử dụng gần 8G cho phần CACHE.

Ubuntu sử dụng nhiều RAM cho phần cache
Ubuntu sử dụng nhiều RAM cho phần cache

Cũng có người thắc mắc về vấn đề này ở bài viết Cached Memory Takes all the memory, mọi người confirm rằng: Đây thực sự không phải là vấn đề, nó là thiết kế của Ubuntu. Ubuntu tận dụng RAM không sử dụng để làm cache giúp tăng tốc độ hệ thống. RAM sử dụng cho cache có thể được ứng dụng sử dụng bất cứ khi nào cần.

Có thể sử dụng lệnh sau để giải phóng bộ nhớ cache, không ảnh hưởng đến các ứng dụng:

// Chuyển sang quyền root
sudo -i

// Xóa bộ đệm
sync; echo 1 > /proc/sys/vm/drop_caches

// Kiểm tra lại bộ nhớ
free -w -h

Nếu bạn muốn giữ free mem luôn ở mức 2G trở lên, bạn có thể chạy bash sau check-free-mem.sh:

#!/bin/bash

# 1.5G
checkMem=1.5

while [ true ]
do
    echo -----------------------------
    freeMem=$( awk '/MemFree/ { printf "%.3f \n", $2/1024/1024 }' /proc/meminfo )
    echo FreeMem = $freeMem
    if (( $(echo "$freeMem < $checkMem" | bc -l) ))
    then
        echo Clean cache memory...
        sync; echo 1 > /proc/sys/vm/drop_caches
        freeMem=$( awk '/MemFree/ { printf "%.3f \n", $2/1024/1024 }' /proc/meminfo )
        echo New FreeMem = $freeMem
    fi
    echo Waiting 60s...
    sleep 60s
done

Lệnh chạy như sau:

sudo ./check-free-mem.sh

Có thể bạn quan tâm: Lập trình Shell Script trên Linux/Ubuntu

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 6

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén