Linux筆記
https://i.linuxtoy.org/docs/guide/index.html 开源世界旅行手册
http://linuxcommand.org/index.php 教學
http://linux.vbird.org/linux_basic/0340bashshell-scripts.php 鳥哥
http://ithelp.ithome.com.tw/articles/10128568
常設定工具
設定mac terminal介面
https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
常用指令
Ref:https://www.mahahino.com/Article/Article_Detail.php?gid=eYyQe6eqGdKLa
環境
----------------------------------
env, uname -a //查系統資訊
hostnamectl [status | set hostname] - -transient //hostname..
dmesg //查開機資訊
dmidecode //查硬件資訊, 遵循 SMBIOS/DMI標準,包括 BIOS、系统、主板、處理器、MEM、CACHE等等。
sync //將資料同步寫入硬碟中
halt //進入停止模式
poweroff //關機!
reboot //重開機
shutdown -h now //將系統的服務停掉後,立即關機。, shutdown -r +60 //60分鐘系統會重新開機
history //列之前指令
who //查目前所有系統登入者的帳號
cat |more|less /etc/passwd //列所有帳號 ,cat /proc/[cpuinfo|meminfo] //詳細CPU或記憶體
free //記憶體
cat /etc/*elease //查詢centos 版本 version
nmap localhost //需要安裝nmap,掃描port **
//nmap -sn 192.168.1.0/24 這會掃描網路內從 192.168.1.0 and 192.168.1.255。(舊版使用 -sP)
pwd //顯示目前所在地
locale //查目前語系
uptime //到現在執行時間
vmstat //監控虛擬記憶體
top //前幾名行程
ps -aux|more //查目前執行的行程
pidof httpd //得到 httpd process PID
pstree //以樹形架構查行程依賴關係
pmap //查程式記憶體情況
mpstat //監控CPU
kill //刪除正在執行行程
who -la // 可以列出那些tty被占用
kill <pid>
crontab -e //編輯循環執行工作排程
quotacheck -a|-b|-f-v //查帳號磁碟空間的限制
iostat //查監控磁碟 I/O
nmon //監控系統效能
date +%Y/%m/%d %H:%M //日期與時間
g[tab][tab] //共有多少 g 開頭指令
man date //指令說明
info //與man差不多
apropos //=man -k,只要有關鍵字就列
whatis //=man -f, 其他說明
mandb //建立man說明資料庫
sar //長期的監控CPU,MEM,I/O**
semanage port -l //查看SELinux port
semanage port -a -t ssh_port_t -p tcp #### //設定 selinux ssh可以通過
chcon -Rv --type=[public_content_rw_t| httpd_sys_rw_content_t] folder //設定 目錄安全存取
getsebool -a|grep ftp // 查看ftp
setsebool ftp_home_dir 1 //設定
systemctl suspend //進入休眠模式
type -a ls //查程ls指令資訊
檔案&目錄
----------------------------------
ls -l|-a //列詳細|所有目錄和檔案
cd ~ //變更路徑|根目錄
mv //移動;改名
mv folder_name/ /home/tom/folder_name/ //移動目錄,需要在目的地給他的一個一樣的目錄名稱
如果要搬移目錄 並換目錄名稱,可用上面指令再修改目錄名稱(mv folder_old/ folder_new ),或者也可用 rsync -a folder_old/ folder_new/ && rm -rf folder_old/*.
ln ln -s /usr/local/nginx/www /home/[username]/xxx //Symbolic or soft link,去掉-s則是Hard link
unlink xxx //取消ln 所設的soft或hard 連結
rm -rf text|folder //刪
cp -aRp /ect/ /temp //複製
scp -P #### -pr username@ip:/home/ //遠端拷貝
tar -[z|Z]cvf file //打包(並壓縮)
//以下連續指令解壓,並且使用管理者複製,並執行...
tar zxvf macfonts.tar.gz && sudo cp -r macfonts/ /usr/share/fonts/ && sudo fc-cache -f -v
mkdir -p //建目錄,目錄如果已存OK
chmod -R 757 files/ //檔案權限(-R:全部目錄及檔案, r=4、w=2、x=1), chmod [ugoa] [+-=] [rwx] 檔案 //細部設定權限, chown -R apache:apache files/ //變更擁有者
chgrp //改變檔案所屬群組
stat index.php //查文件access,modify,change time
cat //連接檔或標準輸入並列印, cat -n file1 file2 //file1加行號存入file2, cat -b file1 file2 file3, file1//file2加上行號(空白行不加)附加到 file3
touch test.txt//建立文件,如果存在則更新時間
rsync -ave "ssh -p $Port" $From $To //備援
帳號
----------------------------------
useradd username, 開新帳號
ll -d /home/ilona, 建立家目錄(權限為700)
chsh -s /sbin/nologin ftp01 //此帳號不可以登入change shell
chfn [-foph] username//更改自己相關資訊
whoami //查目前登入者的帳號
last //查之前登入者
passwd username //設定密碼
sudo passwd root //某些沒有預設root登入的系統,可以透過設定密碼開啟root 登入
chage username //列出帳號 詳細密碼參數
usermod -l new old //修改使用者帳號(usermod -a -G www [myname] //讓我加入www群組)
userdel username //刪除帳號
id username //查帳號
finger username //查帳號屬性 ** (finger)
groupadd [-gr] username //新建一個群組
groupmod [-gn]// 修改群組
groupdel //刪除群組
gpasswd groupname //群組密碼 (如果要讓我退出www群組 gpasswd -d [myname] www)
visudo //讓使用者權限和root一樣,找到 root ALL=(ALL) ALL 字串,模仿他在下一行加入 newuser ALL=(ALL) ALL
網路
----------------------------------
vim [/etc/sysconfig/network, /etc/hosts, /etc/hostname,...]
netstat -tulpn | grep ':####' //查網路連線與後門
lsof -i tcp:80 //查看端口
ssh -p #### [email protected] //遠端登入 (建議用私鑰登入)
firewall-cmd –-permanent [–-add-service=ssh | –add-port=####/tcp | remove-port=20/tcp] –-reload --zone=public --list-ports –state --get-zones --zone=work –list-all
traceroute -n yahoo.com //本機與yahoo兩主機間各節點分析
host yahoo.com 168.95.1.1 //查IP
nslookup yahoo.com // 同 host,使用 /etc/resolv.conf作 DNS Server
dig [+trace|-t|-x] //查正解反解
route [add|del] [-nee] 網域或主機 netmask [mask] [gw(gateway:ip)|dev(網卡:eth0)] //兩主機間路由設定TCP/IP協定
ping -c 3 168.95.1.1 //3次檢查主機是否存在
ip -s link show eth0 //ifconfig+ route+more
ifconfig eth0 192.168.100.100,暫時修改網路介面,給予 eth0 一個 192.168.100.100/24 的參數, ifconfig eth0:0 down|up, 關掉/啟動 eth0, systemctl restart network,重設網路參數, /etc/sysconfig/network-scripts
telnet google.com 80 ** (telnet tlenet-server)//明碼lsmod 查網卡驅動模組是否載入
iwlist //無線網卡AP偵測與取得
iwconfig //設定無線網卡
dhclient //使用 DHCP
wget http://xxx/file //download
tcpdump -i eth0 -nn//網路監控,監聽,以 IP 與 port捉下 eth0 網路卡封包,持續 3 秒
nc, netcat //要安裝(yum install nc)監聽用戶連線,任何TCP 或 UDP 封包都監控(GAPING_SECURITY_HOLE)**,
1. nc -zv 192.168.1.100 22 //測試TCP 22 port 是否有開啟
2. nc -zvn -w 1 192.168.1.100 1-100 200-300 //掃描 1 ~ 100 與 200 ~ 300 TCP 連接埠
3. nc -zvnu 192.168.1.100 1-65535 // 掃描 UDP 的連接埠
-z – 讓nc只是簡單的掃描listening daemons不會實際傳送任何資料給Server。
-v – 詳細的資訊模式。
-w – timeout 的時間為多少秒
-n – 不要做任何 DNS 或 service lookups 動作
-U – 指定使用 Unix Domain Sockets.
-u – 找 UDP
找尋&字串&列印&比對
----------------------------------
which //範圍侷限在 /PATH 下 ,binary都可搜尋
whereis //不精確搜索,範圍局限在/bin、/usr/share等。
locate file //查資料位置,用前需 updatedb **(mlocate)
find /var -type f -ctime -1 //找一天前,
find / -mtime 0 //找24小時內變動檔,
find /var -name 'filename' //找 filename,
find /var -name '*.zip' -type f //找類型,
find / -size +1024M //根目錄下>1G的文件
grep -rnw 'directory' -e "pattern", 搜尋目錄找字串
sed -i '4s/foo/bar/g' file, 取代檔案內的字串
printf '%st %st %st %st %st n' $(cat printf.txt) //格式化列印,僅列出姓名與成績:(用 [tab] 分隔)
echo $PATH|${PATH} //在螢幕上面顯示出您的環境變數 PATH
//環境變數PATH,目錄與目錄中間以冒號(:)分隔。如果要加入:
export PATH=$PATH:/dir1/bin
//如果要永久變更環境變數:
# vi /etc/profile
# 在頁尾加入 export PATH=$PATH:/dir1/bin //save,exit
# source /etc/profile //生效
--------------
unset, unalias //取消變數與命令別名
pr /etc/man_db.conf //列印
awk -F ":" '{print $1}' /etc/passwd //過濾/etc/passwd中用户資訊,相較於 sed 常用於一整個行處理, 一行中分數個『欄位』,處理小型db
sort //进行相同记录排列在一起, sort -nr //按照数字进行降序排序
uniq -c //合并重复行,并记录重复次数
diff passwd.old passwd.new //比對兩檔案, diff /etc/rc0.d/ /etc/rc5.d/ //比對兩目錄
cmp -l passwd.old passwd.new //diff 以行比對, cmp以位元組比對.也可比對binary files
patch -p0 < passwd.patch //用 patch file 更新舊版資料, patch -pN < patch_file //更新, patch -R -pN < patch_file //還原
程式&服務&壓縮&其他
----------------------------------
yum install|update|upgrade|erase //安裝|更新|升級|移除
rpm -ivh|-Uvh|-e //新|升級|移除
systemctl start|restart|stop|status serivce,服務啟動關閉
strace //除錯的工具
gzip /home/filename //壓縮filename
gunzip < /home/filename.gz //解壓縮
bzip2 -d gcc-x.x.x.tar.bz2 //解壓縮,不保留原檔案, -k保留
zip -r wwwroot.zip wwwroot //壓縮
unzip wwwroot.zip //解壓縮
dd if=/dev/zero of=./largefile bs=8k count=10000 //進入磁碟測試寫入速度if:輸入, of:輸出
sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" //清除緩存
cal [10] [2015]//日曆
bc //計算機
init 0 systemctl poweroff
init 1 systemctl rescue
init [234] systemctl isolate multi-user.target (init 3 轉成文字界面)
init 5 systemctl isolate graphical.target (轉成圖形界面)
init 6 systemctl reboot
磁碟
----------------------------------
df -h, 查磁碟容量
du -s -h,查目錄內所有檔案大小
fdisk -l,查硬碟
fdisk /dev/sdb, 分割硬碟
mkfs.ext4|exfat|ntfs-3g /dev/sdb1,格式化
mount -ro ntfs-3g /dev/sdb1 /disk2,掛載, mount -t auto,自動掛umount /dev/sdb1 //卸載
lsblk //磁碟列表
blkid //查裝置UUID等參數
crontab
https://crontab.guru 排程時間格式編輯器
https://free.com.tw/crontab-guru/ 排程時間格式編輯器
目錄結構意義
http://jashliao.pixnet.net/blog/post/161938997-每天一個linux指令--linux目錄結構
進程、線程
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
awk
tail -f access.csv | awk 'BEGIN{FS="[,]"}{if($8>20){print $0,"執行秒數",$8}}'
strace
curl
http://evelynnote.blogspot.tw/2011/03/curl.html
#取cookie
curl -D cookie_file.txt http://www.sinyi.com.tw
記憶體管理
uname -r 目前運行的 Linux kernel 版本
free -m 看目前使用記憶體
cat /proc/meminfo 記憶體資訊
htop
釋放記憶體
#!/bin/bash
# Linux 2.6.16 之後增加 drop caches 機制
#
# /proc/sys/vm/drop_caches 表示目前設定
# 0 表示開啟 cache
# 1 釋放 沒在使用的 cache (一般建議)
# 2 釋放 dentry, inode cache
# 3 = 1 + 2 (不建議)
sync;sync;echo 1 > /proc/sys/vm/drop_caches
sync;sync;echo 0 > /proc/sys/vm/drop_caches
sync;sync;
tcpdump 擷取通過某網路介面的封包。(需有 root 權限!)
http://blog.xuite.net/jyoutw/xtech/23669726-tcpdump+的用法
YUM
epel
#自動抓下正確的 RPM 檔安裝
sudo yum -y install epel-release
#更新套件
yum -y update
#安裝
yum install
#移除
yum remove httpd
#列出所有的套件,若在list後面接套件名稱,則可單獨列出該套件。
yum list
#列出所有可以更新的套件
yum list updates
#列出所有已經安裝的套件
yum list installed
#列出所有套件的相關資訊,若在info後接上套件名稱,則可單讀該套件相關資訊。
yum info
#搜尋所有相關的套件,如yum search httpd,在從中找到所需要的套件
yum search
#安裝路徑
rpm -qa | gewp xxx
rpm -ql xxx
lsof
監測打出去1433 port數量
sudo lsof -i -P | grep -i "ESTABLISHED" | grep :1433
查套件名稱
rpm -qa 套件名稱
Screen
Ctrl + a ? help
Ctrl + a A rename
Ctrl + a n next screen
Ctrl + a p 前一頁
Ctrl + a d 卸離 screen -r [id] 回來screen
Ctrl + a k 真正卸離
Ctrl + a w list screen's windows
Ctrl + a S 水平切割視窗
Ctrl + a Q 離開視窗
Ctrl + a Tab : 切換視窗
Ctrl + a [、Ctrl-a ] : 跨視窗複製貼上
screen -ls list screens
VI
m ALPHA
標記書籤(其中 ALPHA 為任一英文字母 a...z,故最多可標記 26 個書籤)。
ALPHA
回到書籤的位置。(「`」為鍵盤數字「1」左邊的那個鍵)。
ALPAH
回到書籤那行的第一個字元。(「'」為鍵盤「;」右邊的那個鍵)。
:marks
列出所有設的書籤。
:delmarks ALPHA (為小寫的英文字母)
多檔操作
先進入 vi ,再用指令〝:e FILE〞載入檔案
:e file2 ←載入 file2
Ctrl+v 區塊編輯
:only
只保留游標所在的視窗,關掉其他的視窗。(被關掉的視窗要已存檔,或用〝:only!〞不存檔強迫關閉)
:close
關掉游標所在的視窗。(被關掉的視窗要已存檔,或用〝:close!〞來強迫關閉)
:sp [FILE]
新增一水平分割視窗。
:vsp {FILE}
新增一垂直分割視窗。
上傳檔案
scp -P 1234 -pr [email protected]:/home/test/test/ /home/user/temp/ (-P port)
scp -P 1234 -pr /home/user/temp/ [email protected]:/home/test/test/
查ODBC
odbcinst -j
tsql -H hostname -p port -U user -P password
查daemon
ps -ef
search file
find / -type f -name "*.conf"
search word in files
grep -rn "search word" ./*
tail
tail -f access.csv | grep listSearch.json | grep -e 'page=[0-9]{3,4}' --color
Shell script
Shell Script有一些預設的特殊變數如下:
$? :表示上一個指令的離開狀況,一般指令正常離開會傳回 0。不正常離開則會傳回 1、2 等數值。
$1 :表示輸入的第一個參數,$2 則為第二個參數,依此類推。
$0 :shell script的檔名。
$@ :即代表 $1, $2,....直到所有參數結束。也就是說 $@ 代表了 "$1" "$2" "$3"....。
$ :所有參數無間隔的連在一起,成為單一個參數。也就是說 $ 代表了 "$1 $2 $3..."
運算符號
在 shell 中的四則運算必須使用 expr 這個指令來輔助。注意,在 + - / 的二邊都有空白,如果沒有空白將產生錯誤:
乘號要用 \ 因為*有其他意義
expr 6 - 2
sum=expr 10 + 20
echo $sum
結果:
4
30
iconv
轉編碼
iconv -c -f UTF-8 -t BIG-5 keyword12.csv > keyword_12_big5.csv
查查檔案編碼
vi 檔案
set fileencoding
>/dev/null 2>&1
http://ibookmen.blogspot.tw/2010/11/unix-2.html
常用套件
wkhtmltoimage
html轉縮圖
https://contentparty.org/r/aeabecd7650107e62e8ddf2cf6011f80
安裝紀錄
* Network Configuration (internal network)
- Login as root
- Refine network configuration
> vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
#HWADDR=
IPADDR=192.168.20.11
NETMASK=255.255.255.0
NM_CONTROLLED=no
> vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=tae-vm-003
GATEWAY=192.168.20.19
> vim /etc/hosts
127.0.0.1 test-003.local test-003
> vim /etc/resolv.conf
search www.google.com
nameserver 192.168.23.33
> service network restart
*Test network
1.Look gateway
> ping XXX
2.External network
> ping XXXX
3.FQDN
> ping www.google.com.tw
* Install General Package
- Update base repostory
> yum -y update
> yum -y upgrade
- Setup yum repo priority plugin
> yum install yum-plugin-priorities
- Install tools in common uses
> yum install man man-pages crontabs parted mlocate bind-utils xorg-x11-xauth screen vim wget
- Install packages
> yum install sudo ntp dejavu-lgc-sans-fonts git telnet traceroute nmap cifs-utils
* Set up time synchronisation mechanism
> vim /etc/ntp.conf
server time.stdtime.gov.tw
> vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
> chkconfig ntpd on
> service ntpd start
* Config security mechanisms
> vim /etc/selinux/config
SELINUX=disabled
> chkconfig iptables off
> chkconfig ip6tables off
> adduser tutor (create admin account)
> passwd tutor
Enter new password twice
> visudo
%wheel ALL=(ALL) ALL (un-mark this setting)
> vim /etc/group
wheel:x:10:tutor (add admin account into wheel group, to allow sudo privilege)
> vim /etc/ssh/sshd_config
PermitRootLogin no
>service sshd restart