QuânSysAd's Blog: linux
Hiển thị các bài đăng có nhãn linux. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn linux. Hiển thị tất cả bài đăng

23 tháng 7 2021

Linux: alias nhưng có chấp nhận tham số

 Nhiều khi ta muốn làm alias các lệnh trong bash nhưng vị trí điền tham số nhiều khi nằm ở giữa lệnh. Ví dụ lệnh copy thì nhiều khi ta đã xác định được thư mục đích rồi nhưng còn file nguồn nhiều thì lại nằm giữa lệnh nên không thể alias được

Mặc định alias không chấp nhận tham số tuy nhiên bash có hỗ trợ làm function. Chỉ cần đưa function vào .bashrc là được

myfunction() {
    mv "$1" "$1.bak"
    cp "$2" "$1"
}
Trong đó $1 và $2 là 2 parameter của lệnh.

Sau khi khai báo function trong .bashrc thực hiện :`source .bashrc`
Sau đó ở bash chỉ cần gọi function là OK

$myfunction [tham số 1] [tham số 2]

Lưu ý đối với câu lệnh scp, nếu file name có dấu colon  ( hai chấm) thì phải dùng đường dẫn tuyệt đối :
VD:
scp ./filename.txt destination

05 tháng 7 2021

linux: Trỏ đường dẫn cài đặt khi build package bằng source

Mặc định các gói khi build bằng source thì file binary sẽ vào thư mục `/usr/local/bin` tuy nhiên nếu ta muốn các file binary vào thư mục khác khi sau khi cài đặt thì dùng thêm tham số--prefix=/duong/dan/thu/muc


Ví dụ:

./configure --prefix=/opt/zlib-1.2.11

Một số gói khác thì dùng tham số biến môi trường để thiết lập ví dụ khi cài lua, đặt giá trị cho biến INSTALL_TOP để trỏ đường dẫn. /opt/lua-5.3.5

make INSTALL_TOP=/opt/lua-5.3.5 linux install

Khi cài haproxy thì dùng PREFIX sau khi build để cài vào thư mục tùy chọn /opt/haproxy-2.4.1

make PREFIX=/opt/haproxy-2.4.1 install


Các tên biến để cài đặt này này có thể tra cứu bằng lệnh `make help` 

Đối với các gói tarball có sử dụng ./configure thì có thể tra cứu các build option bằng lệnh `./configure --help` để hiển thị các build option. Ví dụ khi build glibc.

../configure --prefix=PREFIX  : Trỏ đường dẫn mà file sau khi build sẽ được install


25 tháng 6 2021

Linux : Nâng cấp phiên bản shared library trong CentOS 7

Thông thường sau khi compile source từ gói, thì gói sẽ install  binary và các thư viện đi theo gói. Tuy nhiên nhiều trường hợp thư viện đi theo gói không được đưa vào đúng thư mục chứa thư viện shared library mặc định của linux khiến cho binary file không thể chạy được.

Để xử lý cách đơn giản là ta tìm file thư viện, thường có dạng libXXX.so.1.1.0 copy vào thư mục /lib64 sau đó xóa bỏ symbolic link của thư viện cũ. Tiếp theo là chạy lệnh ldconfig để thực hiện tạo lại symlink của thư viện shared object.

Khai báo các thư mục chứa file .so trong thư mục `/etc/ld.so.conf.d`. Trong đó tạo các file với các tên `.conf` sau đó nội dung file là đường dẫn tới thư mục chứa file `.so`



Để biết binary sử dụng thư viện shared libray nào ta dùng lệnh ldd ten_file_binary để kiểm tra.

13 tháng 5 2021

Build glibc from source

Install make
```

./configure --prefix=/usr/local  # Or your preferred place
make
make install
Build glibc

```

Lưu ý khi build glibc bao giờ cũng phải tạo thư mục có tên là build và chạy configure từ thư mục đó
```

mkdir build
cd build
export glibc_install="$(pwd)/install"
../configure --prefix "$glibc_install"
make -j `nproc`
make install -j `nproc`
```

Lưu ý: không sửa lại symlink trong /usr/lib64/libc.so.6

Nếu có sửa cần trả lại nguyên gốc 

ln -s /usr/lib64/libc-2.17.so /usr/lib64/libc.so.6

Lưu ý: Có thể sử dụng sln (là statically linked binary) sẽ không bị phụ thuộc vào libc và có thể sử dụng để đặt lại symbolic link thay cho việc sử dụng ln (phụ thuộc vào libc)


Nếu cần build phiên bản 32bit của glibc:

```
../configure --prefix=$HOME/test/glibc32-2.32 \
--host=i686-linux-gnu \
--build=i686-linux-gnu \
CC="gcc -m32" CXX="g++ -m32" \
CFLAGS="-O2 -march=i686" \
CXXFLAGS="-O2 -march=i686"

make
make install
```

18 tháng 2 2021

Linux: Trigger một script khi cắm thiết bị usb

Tình huống: Khi cắm ổ cứng usb, nhiều khi file device thay đổi, hoặc thiết bị bị mất nguồn usb gây ra thay đổi tên device, lúc này thư mục mount đang chạy sẽ bị lỗi do mount ko đúng, lúc này cần phải remount lại và chạy lại tiến trình đang truy xuất.
Như vậy ta cần chạy bash script để mount và re-run lại process đang chạy dở.

Tạo file: `/etc/udev/rules.d/test.rules`

Nội dung:

```
ACTION=="add",ATTRS{idVendor}=="152d", ATTRS{idProduct}=="2329", RUN+="/tmp/test.sh
```


idvendor và idproduct lấy bằng cách chạy command: `lsusb` hoặc chạy `udevadm info --name=/dev/sdX` (tương ứng với thiết bị của bạn)



ID_VENDOR_ID=152d
ID_MODEL_ID=2329

11 tháng 12 2020

Linux: Tạo packet tới host mà không cần nc hay telnet.

 Tạo packet tới host mà không cần nc hay telnet.

Dùng trong trường hợp khi máy ko có cài nc telnet


#!/bin/bash
if exec 3>/dev/tcp/localhost/4000 ; then
	echo "server up!"
else
	echo "server down."
fi

30 tháng 10 2020

Linux : awk , phân cách bằng ký tự tab, và bỏ qua n dòng đầu tiên

 Sử dụng các tùy chọn:

-F $"\t" : Phân cách bằng ký tự tab

FNR>1 : Bỏ qua dòng đầu tiên


awk  'FNR > 1 -F $"\t" {print $1}'

22 tháng 10 2020

Linux: Xem một đoạn trong history command ?

 Bạn muốn xem lại một đoạn bất kỳ trong history command, hãy dùng lệnh fc. Ví dụ khi cần xem command đã sử dụng giữa dòng 28706 và 28800 ta dùng lệnh sau:

`fc -l 28706 28800`

07 tháng 10 2020

Yum báo lỗi : /usr/local/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)

CentOS 7 : There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:

```

/usr/local/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)

```

Cách xử lý: thêm vào file `.bash_profile` dòng sau:

```
export LD_LIBRARY_PATH=/lib64/:$LD_LIBRARY_PATH

```


Sau đó `source .bash_profile` để load lại là ok
Ngoài ra phải trỏ lại đường dẫn lib về nguyên bản phiên bản cũ:
```
cd /lib64
sudo ln -s -f liblzma.so.5.2.2 liblzma.so.5
```

24 tháng 3 2020

Linux : Chạy lệnh dưới danh nghĩa user khác

Đôi khi bạn sử dụng root để chạy lệnh nhưng chương trình không cho phép.
Bạn hãy sử dụng lệnh sau để chạy lệnh dưới danh nghĩa user khác:
runuser -l userNameHere -c 'command'
runuser -l userNameHere -c '/path/to/command arg1 arg2'

16 tháng 3 2020

Lựa chọn Linux stack cho hạ tầng của bạn

Cho đến nay thì nên sử dụng các stack sau:
Hosting: Amazon Web Services, Google Cloud, and Microsoft Azure
Linux distribution: CentOS, Debian, OpenSuSE
configuration manager: Chef, Puppet, SaltStack

12 tháng 1 2020

Cài đặt Cisco AnyConnect Secure Mobility Client trên Linux

Lưu ý: Hãy dùng bộ cài có tên sau : anyconnect-linux64-4.8.01090-predeploy-k9.tar.gz để cài.
Sau khi giải nén bằng lệnh
tar xzvf anyconnect-linux64-4.8.01090-predeploy-k9.tar.gz
Thực hiện vào trong thư mục : vpn và chạy:
sudo ./vpn_install.sh
Cài thêm một số thư viện để chạy giao diện
sudo apt-get install libpangox-1.0-0
sudo apt-get install openconnect
Sau đó dùng lệnh sau để khởi động AnyConnect Client.
/opt/cisco/anyconnect/bin/vpnui
Chúc các bạn thành công.

20 tháng 12 2019

Linux: Sử dụng phím tắt Alt + K trong Vim

Đôi khi bạn mở vim editor ở trong terminal. Và bạn đã gán tổ hợp phím tắt ví dụ Alt+K nhưng nó không hoạt động
Để xử lý, hãy thêm đoạn sau vào trong file ~/.vimrc
let c='a'
while c <= 'z'
  exec "set .c.">=\e".c
  exec "imap \e".c." .c.">"
  let c = nr2char(1+char2nr(c))
endw

set timeout ttimeoutlen=50
Để gán cho các tổ hợp chữ HOA thì dùng thêm đoạn dưới đây
let c='A'
while c <= 'Z'
  exec "set .c.">=\e".c
  exec "imap \e".c." .c.">"
  let c = nr2char(1+char2nr(c))
endw

set timeout ttimeoutlen=50
Ngoài ra nếu trong terminal, bạn ở vim ở chế độ Insert mà bạn bấm Control+V , tiếp theo bấm tiếp ALT-x mà nó ra kết quả ^[x (trong terminal) thì hãy dùng script sau đây trong .vimrc
for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." .c.">"
  exec "map! \e".c." .c.">"
endfor
Chúc các bạn thành công.

17 tháng 12 2019

Linux: Thay đổi độ sáng màn hình bằng CLI

Bạn hãy tham khảo 2 câu lệnh dưới đây. Câu lệnh đầu tiên là tìm ra tên màn hình kết nối. Và câu lệnh thứ hai là set độ sáng màn hình.
xrandr | grep " connected" | cut -f1 -d " "
xrandr --output VGA1 --brightness 0.9
Ở đây tôi đặt độ sáng là 0.9, sáng nhất là 1, tối nhất là 0

15 tháng 12 2019

Linux: Thay đổi độ phân giải màn hình bằng CLI

Bạn hãy tham khảo đoạn command dưới đây, lưu ý thay các tham số phù hợp với tham số phần cứng của bạn
cvt 1366 768 60
xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
xrandr --addmode VGA1 1368x768_60.00
xrandr --output VGA1 --mode 1368x768_60.00
Chúc các bạn thành công.

Linux : Chạy Sopcast trong Ubuntu bằng VLC.

Chạy Sopcast trong Ubuntu bằng VLC.
Sau khi cài sp-sc , đây là file binary của sopcast cli down từ trang chủ của Sopcast về. Copy file đó vào thư mục/usr/bin/. Việc cài các thư viện liên quan để chạy sopcast này mình sẽ ko đề cập ở đây.
Bạn soạn file sopcast có nội dung như sau
#!/bin/bash
if [ "$(pgrep sp-sc)" ]; then
  killall sp-sc;
fi

sp-sc $1 3908 8908 > /dev/null &
sleep 10 && vlc -q http://localhost:8908/tv.asf
Thực hiện set quyền chạy cho file này , hoặc đơn giản là sudo chmod +x /usr/bin/sopcast
Lúc này để chạy một kênh sopcast ta dùng lệnh sau: sopcast sop://broker.sopcast.com:3912/260816
Khi chạy xong để đóng Sopcast đang chạy ngầm hãy tìm PID của sp-sckill -9 nó đi hoặc dùng lệnh sau:
kill -9 `pidof sp-sc`
Bạn sẽ thấy vlc chạy kênh của sopcast. Chúc các bạn thành công

26 tháng 8 2019

CentOS: Lưu lại các lịch sử lệnh và có thể sử dụng tra cứu giữa các phiên với nhau đồng thời

Thông thường, khi bạn sử dụng nhiều terminal kết nối remote tới Linux thì khi bạn gõ lệnh bên cửa sổ này, sau đó sang cửa sổ khác bấm Ctrl+R để tra cứu lại các lệnh đã thực thi thì không thấy xuất hiện. Để có thể khắc phục điều đó. Hãy thêm các lệnh sau vào file /etc/bashrc
Lưu ý: Khi sang cửa sổ khác muốn xem lại lịch sử ở phiên khác thì hãy bấm ENTER vài lần nhé
HISTTIMEFORMAT='%F %T '
HISTFILESIZE=-1
HISTSIZE=-1
HISTCONTROL=ignoredups
HISTIGNORE=?:??
shopt -s histappend
shopt -s cmdhist
shopt -s lithist
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$"\n"}history -a; history -c; history -r"
Chúc các bạn thành công.

27 tháng 7 2019

Oracle: chỉ định rõ thư mục chứa file tnsname.ora.

Ví dụ, cần để hệ điều hành biết được Oracle sẽ đọc file ở thư mục nào thì cần đưa giá trị đường dẫn vào biến TNS_ADMIN , và có thể đặt sẵn trong file .profile hoặc .bash_profile
export TNS_ADMIN=/opt/oracle/instantclient_11_2/