2017年12月29日 星期五

Linux 透過 bc 計算 pi 測試效能

time echo "scale=3000; 4*a(1)" | bc -lq

ERROR: Log level NFLOG(4) requires NFLOG Target in your kernel and iptables

載入 xt_NFLOG 模組  即可

bash netstat

#!/bin/bash

cat /proc/net/tcp /proc/net/tcp|grep -v local_address | while read t l f t;do
lp=${l#*:};lp=$((16#${lp}));
fp=${f#*:};fp=$((16#${fp}));
lip=${l%:*};
fip=${f%:*};
ipl=$((16#${lip:6:2})).$((16#${lip:4:2})).$((16#${lip:2:2})).$((16#${lip:0:2}));
ipf=$((16#${fip:6:2})).$((16#${fip:4:2})).$((16#${fip:2:2})).$((16#${fip:0:2}));
echo $ipl:$lp $ipf:$fp
done ;
socket 使用情形 /proc/net/sockstat router 資訊 /proc/net/route

Linux FTP mirrot 工具

lftp -u user,pwd -e "mirror --parallel=3 --verbose /$REMOTE_DIR /$LOCAL_DIR" $REMOTE_HOST

刪除 Opendedup volume1

1.umount /mnt/volume1

2.rm -rf /opt/sdfs/volumes/volume1

3.rm /var/log/sdfs/volume1*

4.rm /etc/sdfs/volume1*

2017年12月25日 星期一

megacli 修復 不能自動 rebuild 的硬碟

1.檢視損毀的 raid 資訊
MegaCli64 -PdGetMissing -a0

2.替換硬碟 (內接卡第三顆硬碟)
MegaCli64 -PdReplaceMissing -PhysDrv[252:2] -array1,row0 -a0

3.設定強制 rebuild
MegaCli64 -PDRbld -Start -PhysDrv [252:2] -a0

4.檢查是否在 rebuild
MegaCli64 -PDRbld -ShowProg  -PhysDrv [252:2] -a0

5.檢視硬碟的簡易狀態
MegaCli64 -ShowSummary -a0

6.檢查狀態(可取得 Enclosure Device ID:)
MegaCli64 -PDList -aALL

其他注意事項
更換新硬碟狀態改成“Unconfigured Good”後,再改成“Offline”狀態,便可手動 rebuild

2017年11月24日 星期五

SMB mount error(112): Host is down 設定摘要

mount -t cifs -o user=username,vers=1.0 //server/share /mnt/mountpoint
mount -t cifs -o user=username,vers=2.0 //server/share /mnt/mountpoint

PROXMOX PVE (4.x,5.x) 重新設定 HTTPS Certificate

1.刪除以下檔案
rm /etc/pve/pve-root-ca.pem
rm /etc/pve/priv/pve-root-ca.key
rm /etc/pve/nodes//pve-ssl.pem
rm /etc/pve/nodes//pve-ssl.key

2.重新產生相關檔案
pvecm updatecerts -f

2017年11月21日 星期二

accel-ppp 固定 client ip

1.編輯 /etc/accel-ppp.conf
加入 module chap-secrets,注意載入順序
[modules]
chap-secrets
ippool

2.編輯  chap 帳號密碼檔案
chap-secrets=/etc/ppp/chap-secrets
user * password 192.168.2.101

2017年11月2日 星期四

PROXMOX VE 5.1 Infiniband IPoIB 設定摘要

1.安裝相關軟體
apt-get install opensm
apt-get install infiniband-diags

2.載入相關 module
modprobe ib_umad ib_ipoib

3.設定網路

ip addr add 10.0.0.1/24 dev ib0
ip link set ib0 up

4.infiniband network 必須要有 subnet manager
/etc/init.d/opensm start

5.其他
出現 ib0 NO-CARRIER 可能是缺少 subnet manager

2017年10月5日 星期四

LEAF 5.x mount CIFS 摘要

載入模組
cifs
hmac
md4
arc4

使用 mount 掛載,必須同時輸入密碼
mount -t cifs -o username=user,password=pass //server/share /mnt

2017年10月3日 星期二

Samba SWAT安裝

/etc/services 加入
swat 901/tcp

/etc/inited.conf 加入
swat stream tcp nowait.400 root /usr/sbin/swat swat

連線測試
http://localhost:901

移除軟體RAID

umount /dev/md2

1.RAID 狀態
# mdadm --detail /dev/md2
    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sdb1     
       2       8       33        2      active sync   /dev/sdd1

2.停用 RAID
mdadm --stop /dev/md2


3.移除 RAID
mdadm --remove /dev/md2

4.移除 superblocks
# mdadm --zero-superblock /dev/sdb1 /dev/sdd1

修改相關設定
/etc/mdadm/mdadm.conf

2017年10月2日 星期一

openvz cifs 摘要

不支援  container 掛載,必須先掛載至 host,再 bind 至  container

mount -t cifs //cifs-server/share-name /mnt-cifs -o username=username
/bin/mount -n --bind /mnt-cifs /var/lib/vz/root/${VEID}/mnt

2017年9月29日 星期五

booting ipxe from pxelinux 設定摘要

/tftpboot 目錄下內容
/tftpboot/ipxe.lkrn
/tftpboot/pxelinux.0
/tftpboot/ldlinux.c32

/tftpboot/pxelinux.cfg/default 內容
DEFAULT ipxe
LABEL ipxe
menu default
kernel ipxe.lkrn :a cpair -b 0 -f 0 0 && dhcp || goto a && chain menu.ipxe

/tftpboot/menu.ipxe  內容
#!ipxe
shell

/etc/dnsmasq.conf 相關設定
dhcp-boot=pxelinux.0

2017年9月28日 星期四

ipxe chainload with dnsmasq 設定範例

dhcp-match=set:ipxe,175 # iPXE sends a 175 option.
dhcp-boot=tag:!ipxe,undionly.kpxe

dhcp-boot=http://192.168.10.1/menu.ipxe
# dhcp-boot=menu.ipxe

2017年9月22日 星期五

Linux ext2 image 加大空間

dd if=/dev/zero bs=1024 count=220000 >> fs.ext2
e2fsck -f fs.ext2
resize2fs fs.ext2

2017年9月20日 星期三

tftp timeout

1.查看 /var/log/ademon.log
connection refused from ...
tftpd: read(ack): Connection refused

2.檢查 /etc/hosts.*
/etc/hosts.deny
/etc/hosts.allow

3.檢查 iptables 相關模組
kernel 2.4.x
ip_conntrack_tftp
ip_nat_tftp

kernel 2.6.x
nf_nat_tftp
nf_conntrack_tftp
nf_conntrack

簡易 uClibc 開發環境

1.下載 https://www.uclibc.org/downloads/binaries/0.9.30.1/system-image-x86_64.tar.bz2

2.解開 system-image-x86_64.tar.bz2

3.mount -o loop image-x86_64.ext2 /mnt2

4.mount --bind src /mnt2/src

5.chroot /mnt2 /bin/sh

Bering-uClibc_6.0.5-x86_64 新增 fusion模組

0.下載 Bering-uClibc_6.0.5_src.tgz,安裝開發環境(https://bering-uclibc.zetam.org/wiki/Main_Page)

1. ./buildtool.pl -t x86_64-unknown-linux-uclibc source kernel

2../buildtool.pl -t x86_64-unknown-linux-uclibc build toolchain

3.解開initrd.lrp,編輯 ./source/x86_64-unknown-linux-uclibc/linux/Bering-4.4.config 加入
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
CONFIG_FUSION_SAS=m
CONFIG_FUSION_MAX_SGE=128
CONFIG_FUSION_CTL=m
CONFIG_FUSION_LOGGING=y

4.建立 fusion modules
./buildtool.pl -t x86_64-unknown-linux-uclibc build kernel

5.修改 init 尋找 VERSION="`cat $LRPKG/initrd.version`" 加入
insmod /lib/modules/scsi_transport_spi.ko.gz
insmod /lib/modules/scsi_transport_sas.gz
insmod /lib/modules/mptbase.ko.gz
insmod /lib/modules/mptctl.ko.gz
insmod /lib/modules/mptscsih.ko.gz
insmod /lib/modules/mptspi.ko.gz

複製 上述 module 至 lib/modules中

6.封裝 initrd.lrp

2017年9月7日 星期四

Arch Linux 安裝摘要

0.光碟片開機

1.建立檔案系統
fdisk /dev/sda
mkfs.ext3 /dev/sda2

2.選定安裝的 mirror site
/etc/pacman.d/mirrorlist

3.建立基本系統
mount /dev/sda2 /mnt
pacstrap /mnt base

4.建立 fstab
genfstab -p /mnt >> /mnt/etc/fstab

5.設定系統組態(configuration)
arch-chroot /mnt

6.設定域名
echo 域名 > /etc/hostname

7.設定時區
ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime

8.產生語系設定檔及設定語系
echo en_US.UTF-8 >> /etc/locale.conf
locale-gen

9.產生kernel image
mkinitcio -p linux

10.安裝 grub
pacman -S grub

11.找尋已安裝的作業系統
pacman -S os-prober

12.產生 grub 設定檔
grub-mkconfig -o /boot/grub/grub.cfg

13.安裝 grub 開機檔案
BIOS 方式
grub-install /dev/sda

UEFI 方式
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug

2017年8月30日 星期三

bash中()及{}差別

1. {}中設定的變數會影響全域變數
2. { 必須有空白字元,}前必須有;字元

測試
c=a;echo c=$c;
{ echo "{} $c set {}"; c="set {}";};
(echo "() $c set ()"; c="set ()");
echo c=$c;

c=a;echo c=$c;
(echo "() $c set ()"; c="set ()");
{ echo "{} $c set {}"; c="set {}";};
echo c=$c;

2017年8月23日 星期三

INEO I-NA312N1 NAS 開啟 telnet 服務

INEO  I-NA312N1
http://<ip address>/cgi/telnet/telnet.cgi

2017年8月8日 星期二

Squid 存取控制設定摘要

1.Squid 使用存取控制清單 (ACL)依順序處理存取規則。
2.在使用 ACL 前必須先進行定義。
3.預設的 ACL all 與 localhost 。
4.定義 ACL 並不代表會套用,當存在對應的 http_access 規則時才會套用。


squid.conf存取控制選項
acl 的語法
acl ACL_NAME TYPE DATA
    ACL_NAME 可以隨意選擇。
    TYPE,/etc/squid/squid.conf 檔案的 ACCESS CONTROLS 區段中提供不同選項。
    DATA 視個別的 ACL 類型而定,例如主機名稱、IP 位址或 URL。 也可從檔案讀取。

http_access allow ACL 名稱
定義哪些人可使用代理,以及哪些人可存取網際網路的哪些內容。

url_rewrite_program 路徑
指定 URL 重寫器。

auth_param basic program 路徑
設定在代理上對使用者進行驗證的對應的程式

ident_lookup_access allow ACL 名稱
設定可以執行 ident 要求,為類型為 src 的 ACL 定義的所有用戶端確定每個使用者的身分。

2017年8月3日 星期四

LEAF Bering-uClibc 6.0.4 設定 squid 摘要

建立檔案系統
mkfs.vfat -F 32 -I /dev/sda1

編輯 leaf.cfg 設定載入以下 LRP
root license local dnsmasq dropbear mhttpd webconf squid ntpd

執行
syslinux /dev/sda1
dd if=/usr/share/syslinux/mbr.bin of=/dev/sda bds=440 count=1
echo "CST-8" > /etc/TZ
echo  "/root/squid.sh" >> /etc/default/local.start

編輯 /root/squid.sh 內容如下
#!/bin/sh
while read i j;
do mkdir -p -m 777 $i&&mount tmpfs -t tmpfs $i -o size=$j,mode=1777;
done<<REM
/dev/shm 128m
/var/cache/squid 256m
REM
squid=/etc/init.d/squid&&$squid restart||$squid start;

2017年7月25日 星期二

/squid-cf__metadata.shm): (13) Permission denied 錯誤訊息

Squid Cache: Version 3.5.26 錯誤訊息
ATAL: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied

原因:
缺少 /dev/shm

解決方法:
建立  /dev/shm mode=1777
mkdir -p /dev/shm && mount tmpfs -t tmpfs /dev/shm-o size=128,,mode=1777

其他相關錯誤
缺少 /var/cache/squid 或權限不符


Squid 一般組態選項摘要

http_port 連接埠
    Squid 用的連接埠,預設 3128

cache_peer 主機名稱 類型 代理連接埠 ICP 連接埠
     設定建立協同工作的快取網路。

cache_mem 大小
    設定常用回覆的記憶體容量。預設值 8 MB。

cache_dir 儲存類型 快取目錄 快取大小 層級 1 目錄 層級 2 目錄
    定義磁碟快取的目錄。

  cache_access_log 記錄檔案 , cache_log 記錄檔案 , cache_store_log 記錄檔案
    設定記錄檔

client_netmask 網路遮罩
    透過套用子網路遮罩在記錄檔案中遮罩用戶端的 IP 位址。

ftp_user 電子郵件
    設定 Squid 用於匿名 FTP 登入的密碼。

cache_mgr 電子郵件
    Squid 當機時傳送郵件地址。

logfile_rotate 值
    設定 Squid 輪替記錄檔案。預設值為 10,表示輪替編號為 0 到 9 的記錄檔案。

append_domain 網域
    指定當未指定網域時自動附加的網域。

forwarded_for 狀態
    選項設定為 on/off

negative_ttl 時間 , negative_dns_ttl 時間

never_direct allow ACL 名稱

Linux capabilities

1.kernel 2.2 以後支援
2.使用 extended attributes 中的 security方式支援
3.支援的檔案系統 Ext2, Ext3, Ext4, Btrfs, JFS, XFS, Reiserfs
4.常用指令 getcap,setcap

Capabilities list
CAP_AUDIT_CONTROL (since Linux 2.6.11)
CAP_AUDIT_WRITE (since Linux 2.6.11)
CAP_BLOCK_SUSPEND (since Linux 3.5)
CAP_CHOWN
CAP_DAC_OVERRIDE
CAP_DAC_READ_SEARCH
CAP_FOWNER
CAP_DAC_OVERRIDE
CAP_DAC_READ_SEARCH
CAP_FSETID
CAP_IPC_LOCK
CAP_IPC_OWNER
CAP_KILL
CAP_LEASE (since Linux 2.4)
CAP_LINUX_IMMUTABLE
CAP_MAC_ADMIN (since Linux 2.6.25)
CAP_MAC_OVERRIDE (since Linux 2.6.25)
CAP_MKNOD (since Linux 2.4)
CAP_NET_ADMIN
CAP_NET_BIND_SERVICE
CAP_NET_BROADCAST
CAP_NET_RAW
CAP_SETGID
CAP_SETFCAP (since Linux 2.6.24)
CAP_SETPCAP
CAP_SETUID
CAP_SYS_ADMIN
CAP_SYS_BOOT
CAP_SYS_CHROOT
CAP_SYS_MODULE
CAP_SYS_NICE
CAP_SYS_PACCT
CAP_SYS_PTRACE
CAP_SYS_RAWIO
CAP_SYS_RESOURCE
CAP_SYS_TIME
CAP_SYS_TTY_CONFIG
CAP_SYSLOG (since Linux 2.6.37)
CAP_WAKE_ALARM (since Linux 3.0)    

modes:
    e: Effective  This means the capability is “activated”.
    p: Permitted  This means the capability can be used/is allowed.
    i: Inherited  The capability is kept by child/subprocesses upon execve() for example.

使用範例
getfattr -d -m "security\\." /bin/ping
getcap /bin/ping
setcap -r /bin/ping
setcap 'cap_net_admin,cap_net_raw+ep' /bin/ping

複製 capabilities 參數
cp -a $src $dst
rsync -X $src $dst
tar -s, --preserve-order, --same-order
                             sort names to extract to match archive
      --selinux              Save the SELinux context to the archive
      --xattrs     

losetup 使用摘要

dd if=/dev/zero of=example.img bs=10240 count=512
mkfs.ext3 -F -q -m0 example.img
losetup /dev/loop0 example.img

mount /dev/loop0 /mnt
mount -o mand example.img /mnt

umount /mnt
losetup -d /dev/loop0

Bash 比較Linux 版本

func_uname_gt(){ v=0;
read v</proc/sys/kernel/osrelease&&v=${v%%-*}||return 1;
A=$(echo $v|$exe_awk 'BEGIN {FS="."};{print($1=="")?0:$1}').$(echo $v|$exe_awk 'BEGIN {FS="."};{print($2=="")?0:$2}')$(echo $v|$exe_awk 'BEGIN {FS="."};{print($3=="")?0:$3}');
B=$(echo $1|$exe_awk 'BEGIN {FS="."};{print($1=="")?0:$1}').$(echo $1|$exe_awk 'BEGIN {FS="."};{print($2=="")?0:$2}')$(echo $1|$exe_awk 'BEGIN {FS="."};{print($3=="")?0:$3}');
echo $A $B|$exe_awk '{print($1>$2)?0:1}'&&return 0;return 1;};

func_uname_gt 2.1.7;
 /proc/sys/kernel/random/uuid

2017年6月21日 星期三

[PDOException] SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

可能是 查詢 SQL 太長,或是連線逾時

1.修改 MySQL 設定檔
/etc/my.cnf
/etc/my.cnf.d/server.cnf

[mysqld]
max_allowed_packet=16M

2.連線時加入
SET SESSION wait_timeout=65535

2017年5月22日 星期一

增加 PHP 上傳檔案大小

 修改 /etc/php.ini

; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
;upload_max_filesize = 2M
upload_max_filesize = 16M

; Maximum size of POST data that PHP will accept.
; http://www.php.net/manual/en/ini.core.php#ini.post-max-size
;post_max_size = 8M
post_max_size = 16M

cpio 複製目錄檔案

$ find . -depth | cpio -pmdv /targetdir

Linux 快速建立指定大小的檔案

dd
truncate
fallocate

Linux bash 查詢網路卡網路速度



netspeed.sh 內容
 
#!/bin/sh
ns(){
A=$(grep $1 /proc/net/dev | while read a1 r1 c c c c c c c s1 c;do echo $r1-$s1; done;)
sleep 1;
B=$(grep $1  /proc/net/dev | while read a1 r1 c c c c c c c s1 c;do echo $r1-$s1; done;)

echo Receive:  $(( ${B%-*} - ${A%-*} ));
echo Transmit: $(( ${B#*-} - ${A#*-} ));
};

[ -z "$1" ]&&exit 1||ns $1;

使用方法
sh netspeed.sh eth0

CentOS 5.11 使用 yum 更新

修改 /etc/yum.repos.d/CentOS-Base.repo

加入 baseurl=http://vault.centos.org/5.11/os/x86_64

Proxmox 使用 VNC Client 連線 VM

1.登入 Web VM Monitor 選項

2.使用 VNC Port 6000 連線
輸入
change vnc 0.0.0.0:100 

3.使用 VNC Port 6000 連線 + 密碼保護 (password0)
輸入
change vnc 0.0.0.0:100,password
set_password vnc password0

2017年4月27日 星期四

cpio 複製

find . -xdev | cpio -pdm /target-dir

如何確認 DNS SRV 記錄

nslookup 
set type=srv
_ldap._tcp.dc._msdcs. Domain_Name 

disable ssh know_hosts

方法一
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host /usr/bin/hostname -s

方法二
編輯 ~/.ssh/config
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel QUIET

2017年4月19日 星期三

openvz centos7 安裝 opendedep

安裝
vzctl set 100 --devices c:10:229:rw --save
vzctl exec 100 mknod /dev/fuse c 10 229

vzctl exec 100 wget http://www.opendedup.org/downloads/sdfs-latest.rpm
vzctl exec 100 yum install sdfs-latest.rpm

vzctl exec 100 echo "* hardnofile 65535" >> /etc/security/limits.conf
vzctl exec 100 echo "* soft nofile 65535" >> /etc/security/limits.conf


建立及掛載
sudo mkfs.sdfs --volume-name=pool0 --volume-capacity=256GB
sudo mkdir /media/pool0
sudo mount.sdfs pool0 /media/pool0/

2017年4月11日 星期二

2017年3月27日 星期一

golang 換行字串寫法

golang 換行字串寫法

`line 1
line 2
line 3`

2017年3月23日 星期四

PageX連接 windows 7 出現 Android ADB Interface裝置更改為 MTP USB裝置

電腦管理->
裝置管理員->
PageX->
更新驅動程式軟體->
瀏覽電腦上的驅動程式軟體->
讓我從電腦上的裝置驅動程式清單挑選->
MTP USB裝置

2017年3月22日 星期三

bash type 摘要

#!/bin/bash
function fdisk(){ :;  }

echo "type";type fdisk
echo;echo "type -a";type -a fdisk
echo;echo "type -t";type -t fdisk
echo;echo "type -f";type -f fdisk
echo;echo "type -P";type -P fdisk

輸出結果:
type
fdisk is a function
fdisk ()
{
    :
}

type -a
fdisk is a function
fdisk ()
{
    :
}
fdisk is /sbin/fdisk

type -t
function

type -f
fdisk is /sbin/fdisk

type -P
/sbin/fdisk

2017年3月21日 星期二

列出系統連線前10名

# List Top 10 ip_conntrack
#Linux kernel 2.4.x
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10

 #Linux kernel 2.6.x-
cat /proc/net/nf_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10

2017年3月20日 星期一

讀取 /proc/{pid}/cmdline

cut -d $'\0' --output-delimiter=" " c1 -f 1-
===================================================

while read -d $'\0'; do echo $REPLY; done < cmdline;
===================================================

i=1
while t=$(cut -d $'\0' -f $i  /proc/1/cmdline)
do
echo $t
i=$(($i+1))
[ "$t" == "" ] && break;
done
====================================================
function func_strings { :;
_return='';
i=1;
while t=$(cut -d $'\0' -f $i $1 2>/dev/null);
do :;
[ "$t" == "" ] && break;
i=$(($i+1));
_return=$(echo -n $_return $t)
done;
echo $_return;
}

2017年3月15日 星期三

LEAF 安裝 tftpd

安裝
apkg -i daemontl.lrp
apkg -i tftp.lrp

修改
/etc/inetd.conf

2017年3月14日 星期二

dnsmasqs 設定摘要

#關閉 DNS 服務
port=0

# 設定 TFTP 服務
enable-tftp
tftp-root=/var/lib/tftp

2017年2月21日 星期二

read 從變數中讀取資料

A=a;
read r1 <<<$A;

B=b
r2=$(echo $B |while IFS= read -r r2;do :;echo $r2;done;);
echo = $r1 = $r2 =

A=$(echo -e "a1\nb1\n");
read r1 r2 <<<$A;
echo = $r1 = $r2 =


x1="1.2.3"
read a1 a2 a3<<<${x1//./ }
echo =$a1 =$a2 =$a3

x="1 2 3 4 5 6";
i=1;
while read -d " "; do :; eval "xx${i}=$REPLY";i=$(($i+1)); done <<<$x;
echo $xx1 $xx2 $xx3 $xx4;

Linux share library path 筆記

相關設定檔
/etc/ld.so.cache  
/etc/ld.so.conf   
/etc/ld.so.conf.d/

ldconfig (用來產生 /etc/ld.so.cache)
ldconfig -p 列出所有的share library

環境變數
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/lib

Linux S.M.A.R.T 摘要

查硬碟資訊
smartctl -i /dev/sda

開啟 S.M.A.R.T
smartctl -s on /dev/sda

查看健康狀態
smartctl -H /dev/sda

查看健康狀態(細項)
smartctl -A /dev/sda

進行一次自我檢測(在背景執行)
smartctl -t short /dev/sda

查看自我檢測執行進度
smartctl -a /dev/sda

Bash 檢查 kernel 版本


function kernelv(){
[ -f /proc/version ] && read _1 _2 v _3 < /proc/version || return 5;


v=${v%%-*};v=${v//./ };
read v1 v2 v3 <<<$v;
v1=${v1:-0};v2=${v2:-0};v3=${v3:-0};

[ "$1" == "" ] && { echo $v1.$v2.$v3; return 4; };
_v=${1//./ };
read _v1 _v2 _v3 <<<$_v;

_v1=${_v1:-0};_v2=${_v2:-0};_v3=${_v3:-0};

[ "$_v1" -gt "$v1" ] && { echo "gt"; return 1;  };
[ "$_v1" -lt "$v1" ] && { echo "lt"; return 2;  };
[ "$_v2" -gt "$v2" ] && { echo "gt"; return 1;  };
[ "$_v2" -lt "$v2" ] && { echo "lt"; return 2;  };
[ "$_v3" -gt "$v3" ] && { echo "gt"; return 1;  };
[ "$_v3" -lt "$v3" ] && { echo "lt"; return 2;  };
echo "eq"; return 0;
}

grub重新安裝摘要

grub-install  --boot-directory=DIR  /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

相關檔案
/etc/default/grub
/etc/grub.d/40_custom
/etc/fstab

Linux symbolic link 相關指令

readlink  -- 查詢 symbolic link 連結檔案
stat --- 查詢檔案屬性

2017年2月13日 星期一

2017年1月25日 星期三

gcc static

安裝
glibc-static yum install glibc-static

測試執行
gcc -static -ldl src.c obj.o -o exec

2017年1月6日 星期五

2017年1月5日 星期四