2013年7月17日 星期三

bashrc

不登出系統而要讓某些寫入 ~/.bashrc 的設定生效
source ~/.bashrc


console的中文提示改英文
locale 查當前的語系
(這台是CentOS7)
$ cat /etc/locale.conf
LANG="zh_CN.UTF-8"
解法:
將以下設定加入.bashrc
LANG=en_US.UTF-8
LANGUAGE=en_US:us
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
然後
$ . .bashrc



2013年7月15日 星期一

关于system("stty echo")和system("stty icanon")

看到以下程式因此有此一問...
system ("stty -echo");
print "Please enter your password: ";
chomp($p=<STDIN>);
system ("stty echo");
print "\n output\n"

http://tieba.baidu.com/p/1094350750
system 函数是linux系统的调用函数
system("stty -echo"); //这句代码实现的功能是在终端输入时在屏幕不显

system("stty echo"); 设置了不显是以后,调用scanf等io操作时在屏幕不显,加上这句,就又可以显示了!!!
參考文獻: http://www.cnblogs.com/alaska1131/articles/1663041.html
测试方法:
stty -echo;read;stty echo;read

read用法:
http://linux.vbird.org/linux_basic/0320bash.php#read
[root@www ~]# read [-pt] variable
選項與參數:
-p  :後面可以接提示字元!
-t  :後面可以接等待的『秒數!』這個比較有趣~不會一直等待使用者啦!

範例一:讓使用者由鍵盤輸入一內容,將該內容變成名為 atest 的變數
[root@www ~]# read atest
This is a test        <==此時游標會等待你輸入!請輸入左側文字看看
[root@www ~]# echo $atest
This is a test          <==你剛剛輸入的資料已經變成一個變數內容!

範例二:提示使用者 30 秒內輸入自己的大名,將該輸入字串作為名為 named 的變數內容
[root@www ~]# read -p "Please keyin your name: " -t 30 named
Please keyin your name: VBird Tsai   <==注意看,會有提示字元喔!
[root@www ~]# echo $named
VBird Tsai        <==輸入的資料又變成一個變數的內容了!


linux常見問題

linux terminal 不小心按到ctrl+s解法:
因為大多數編輯器存檔都是ctrl+s
在linux使用終端機vim檔案時不小心按到ctrl+s會整個畫面卡住
解法:
ctrl+q

http://www.savs.hcc.edu.tw/~chuavv/lcmd/lcmd.htm

Linux切換鍵
<Ctrl><Alt><F1>切換至第一文字終端。在Linux之下你可以同時打開好幾個終端機。
<Ctrl><Alt><Fn> (n=1..6) 切換至第n文字終端。
<Ctrl><Alt><F7>切換至第一圖形 (GUI)終端。
<Ctrl><Alt><Fn>(n=7..11) 切換至第n圖形 (GUI)終端。
<Tab>自動完成指令。
<ArrowUp>(↑鍵) 捲動而編輯指令歷史。按<Enter>來執行。
<Shift><PgUp>捲上終端之輸出。可以用在login指示下,這樣可以看啟動電腦所有之資訊。
<Shiift><PgDown>捲下終端之輸出。
<Ctrl><Alt><+>(X-windows) 切換X-server至下一螢幕解析度。
<Ctrl><Alt><->(X-windows) 切換X-server至前一螢幕解析度。 
<Ctrl><Alt><BkSpc>(X-windows) 殺掉目前的X-windows server。如果X-windows server當機時就用這方法離開。
<Ctrl><Alt><Del>關掉系統,然後重新啟動。
<Ctrl>c殺掉目前正在執行的程序。
<Ctrl>d從目前之終端離開(logout)。
<Ctrl>d傳送「End-of-File」至目前正在執行的程序。
<Ctrl>s暫停終端之輸出。.
<Ctrl>q回復終端之輸出。
<Ctrl>z將目前之程序放到背景。
reset如你用cat顯示二進制檔之內容到螢幕,有時螢幕上所顯示之字元都是亂碼。用之指令來回復正常之輸出。
<MiddleMouseButton><滑鼠中鍵>:貼上在別的地方已標記過的文字。這是Linux正常的「複製/貼上」運作。
~自己的home directory。 
.(句點) 目前的目錄。
..(兩點) 父(上一層的)目錄。

系統資訊指令
指令說明
pwd顯示目前使用之目錄。
hostname顯示或改變這主機(local host)之名稱。
whoami顯示我的login name.
date顯示或改變電腦之日期和時間。格式為[mmddhhmm[yyyy]]。[月/日/時(24)/分[/年]]。例:改變目前之日期和時間為2000-12-31 23:57,就下:date 123123572000。
time確定一個程序需要多少時間來完成和其它資訊。
who顯示在這電腦已連線之使用者。
rwho -a顯示在這網路上所有的使用者。rwho程序應該已啟動。如沒有啟動的話,執行setup來啟動(你必須是root)。
finger user_name顯示使用者之系統資訊,如 finger root。
uptime顯示這電腦已開機多久的時間了。
ps顯示所有正在執行的程序(process)。
ps axu | more顯示所有正在執行的程序,包含程序之擁有者。
top繼續顯示正在執行的程序,用cpu使用率來排列。
uname -a顯示伺服器之資訊。
free顯示記憶体資訊(kbytes為單位)。
df -h(=disk free) 顯示所有檔案系統的磁碟空間之資訊。
du / -bh | more(=disk usage) 顯示從根目錄有關每子目錄佔用的磁碟空間。
cat /proc/cpuinfo顯示cpu有關資料。
cat /proc/interrupts顯示所有已用到的中斷。
cat /proc/version顯示Linux的版本和其它資訊。
cat /proc/filesystems顯示目前所使用的檔案系統。
cat /etc/printcap顯示列表機的設定。
lsmod(當root) 顯示已載入的核心模組。
set | more顯示使用者之環境變數。
echo $PATH顯示環境變數「PATH」之內容。

網路工具
netconf(當root)設定網路(有功能表)。
ping machine_name檢查是否可以連接另一個電腦(給那電腦的名稱或IP)。要結束就按<Ctrl><c>。
route -n顯示路由表。
ipfwadm -F -p m設定防火牆,IP轉送規則和虛擬IP (masquerading)。
ifconfig(當root) 顯示使用的網路介面(ethernet,ppp,等)。要改變介面之設定請參考ifconfig --help。
ifup interface_name(使用者下/sbin/ifup) 啟動網路介面。例:ifup eth0,ifup ppp0。讓使用者啟動ppp之介面必須在ppp之設定時(執行netconf)已給使用者這個權限。
ifdown interface_name(使用者下/sbin/ifdown) 關閉網路介面。

基本操作
ls列出目前目錄之內容。dir是ls的別名。
cd directory改變目錄。
cp source destination複製檔案。
mcopy source destination複製檔案從/至dos檔案系統(不需要mount)。例: mcopy a:\autoexec.bat  ~/junk。請參考man mtools有關在Linux直接用dos的一些指令,如:mdir, mcd,mren,mmove,mdel,mmd,mrd,mformat… 
mv source destination搬移檔案或更改檔名。
ln -s source destination建立符號連接。
rm files刪除檔案。
mkdir directory建立新的子目錄。
rmdir directory刪除空的子目錄。
rm -r files(遞迴之刪除) 刪除檔案,目錄以及下面的子目錄。
cat filename  | more一頁一頁的顯示檔案之內容。
less filename捲上/下文字檔之內容。要結束就按q。
pico filename編輯文字檔。
lynx html_file文字模式之瀏覽器。
tar -zxvf filename解壓.tar.gz或.tgz檔案。
find / -name "filename"從根目錄尋找filename檔。filename可以包含萬用字*和?。
locate filename比較快的尋找檔案。 
pine文字模式的email程式。另一個email程式是elm。
mc執行Midnight Commander檔案管理程式。像dos下的Norton Commander。
telnet server用telnet通訊協定連接到另一個電腦。你可以用對方的電腦名稱或IP。對方電腦會要求你輸入login name和password。 
rlogin server(=remote login) 遠方之login。連接時會自動使用你在這電腦的login name和password。如失敗,就會要求你輸入login name和password。
rsh server(=remote shell) 遠方使用者介面(shell)。另一個方法與遠方電腦連接。連接時會自動使用你在這電腦的login name和password。如失敗,就會要求你輸入login name和password。 
ftp server用ftp通訊協定連接到另一個電腦。ftp是使用在與遠方電腦複製檔案。
minicomMinicom串列埠通訊程式。像dos下之Telix。
./program_name執行在目前目錄下的程式。
xinit執行沒有視窗管理員的X-windows server。
startx執行有視窗管理員的X-windows server。
startx -- :1執行下一X-windows在顯示器1(顯示器0為初始直)。你可以同時使用幾個圖形終端。用  <Ctrl><Alt><F7>,<Ctrl><Alt><F8>,等來切換。
xterm(X terminal) 執行一個X-windows終端。離開時就下exit。
xboing(X terminal)。很好玩的遊戲。
gimp(X terminal) 影像編輯器,像PhotoShop或Corel Draw。
netscape(X terminal) 執行netscape。
netscape -display host:0.0(X terminal) 執行netscape在這電腦但將輸出傳到遠方電腦名稱為host的顯示器0螢幕0。你可以使用xhost在這電腦給與權限將輸出傳到遠方電腦host。
shutdown -h now(當root) 關機。平常用在遠方關機。一般的關機方法是按 <Ctrl><Alt><Del>。
halt
reboot
(當root) 關機/重新啟動。

基本管理指令
printtool(當root在X-terminal)設地定列表機。這些設定會寫在/etc/printcap。
setup(當root) 設定滑鼠,音效卡,鍵盤,X-windows,系統之服務。
alias ls="ls-Fskb --color"建立ls之別名美化ls之輸出。如你要所有使用者可以使用這功能就放在/etc/bashrc。
adduser user_name(當root) 建立新使用者帳號。例:adduser barbara。不要忘下一步是要設定新使用者之password。新使用者的磁碟空間是放在/home/user_name。
useradd user_name和adduser相同之指令。
userdel user_name9當root) 刪除使用者帳號。使用者之磁碟空間和email是另外處理。
groupadd group_name建立新的group(群組)。
passwd改變自己的password。如你是root,你可以改變任何使用者之password:password user_name。
chmod perm files(=change mode) 改變自己檔案之權限(root可以改變任何檔案)。檔案權限有三種:read能讀 (r),write能寫 (w),execute能執行 (x)給與三種使用者:owner擁有者 (u),members屬擁有者同樣的群組 (g),others其他使用者  (o)。用ls -l來查看檔案的權限。rwxrwxrwx表示所有使用者對這檔案有所有權限。左邊三個字元代表擁有者之權限,中間三個代表與擁有者同群之權限,右邊三個代表其他使用者之權限。沒有權限是用「-」。例:chmod a+r junk會給所有使用者(a=all:user+group+others)對junk檔案讀取之權限。chmod o-x junk會取消其他使用者對junk檔案執行之權限。請參考chmod --help和man chmod。要設定你建立檔案的初始權限你可以用umask(請參考man umask)。
chown new_owner files
chgrp new_group files
改變檔案之擁有者和群組。如你複製一個檔案給另一個人你就用這兩個指來令改擁有者和群組。
ex.
drwxr-xr-x 2 root root 4096  1月  5 21:49 public_html/
bear@ubuntu-bear:/var/www/mytable.ubuntu$ sudo chown -R bear:bear public_html/
su(=super user) 擔任root之身份。系統會要求你輸入root之password。要離開時,就下exit。如在你擔任root的身份的同時也建立root的環境變數就用su -l。
rpm -ivh files(=Red Hat Package Manager[包裝管理員])。安裝(-i)或更新/安裝(-U) rpm包裝。 
glint(X terminal) 圖形模式之rpm包裝管理員。
kernelcfg(當root在 X terminal) 圖形模式啟動或取消核心模組。
setserial /dev/cua0 port 0x03f8 irq 4(當root)設定非標準參數的串列埠。左邊的例子顯示出第一串列埠(dos的com1)標準的參數。如你要每次啟動電腦就用這設定,就將這指令加在 /etc/rc.d/rc.local檔裡。請參考man setserial。 
以下是掛接(mount)的一些例子:
mount -t auto /dev/fd0 /mnt/floppy(當root) 掛上(mount)軟碟機。/mnt/floppy目錄必須存在而是空的。
mount -t auto /dev/cdrom /mnt/cdrom(當root) 掛上(mount) CDROM。
mount /mnt/floppy(當使用者) 掛上(mount)軟碟機。必須設定/etc/fstab使用者才可以下這指令。
mount /mnt/cdrom(當使用者) 掛上(mount)CDROM。必須設定/etc/fstab使用者才可以下這指令。
umount /mnt/floppy裁下(Unmount)軟碟機。 

程序(process)控制
ps(=print status) 顯示目前正在執行的程序和程序之ID (PID)號碼。如你想顯示所有正在執行的程序和誰執行這些程序,就下ps axu。
fg PID將在背景的程序放在前景。
bg PID將在前景的程序放在背景。熱鍵為<Ctrl>z。
kill PID殺掉正在執行的程序。用ps來確定程序的PID。
killall program_name殺掉正在執行的程序。用ps來確定程序的名稱。
xkill(Xwindow terminal) 用滑鼠點選你要殺掉的程序。
lpc(當root) 檢查和控制列表機。
lpq顯示列表機佇列之內容。
lprm job#刪除在列表機佇列裡的工作。
nice program_name執行程序同時設定程序之優先權。
renice PID改變正在執行的程序之優先權。

Linux內建之發展工具和程式語言

emacs(X-terminal) emacs編輯器。 
gcc c_source_filenameGNU C 編譯器。
g++ cpp_source_filenameGNU C++ 編譯器。
perl指令稿(script)語言。指令稿是相似dos之批次檔。
python物件導向直譯器。免費手冊可以在 http://www.python.org/doc/ 瀏覽或在 ftp://ftp.python.org 下載。
tcl指令稿語言。
wish(xterm) Tk之前端(front end)和在X-windows tcl之延伸。平常用在寫前端程式。
g77GNU FORTRAN編譯器。
f2cFORTRAN至c之轉換器。
fort77FORTRAN編譯器。呼叫 f2c和gcc或 g++。
basicChipmunk Basic。
cvs平行版本系統。
diff file1 file2 [>patchfile]比較兩個檔案的內容而列出不同之處。「>patchfile」將diff的結果寫在patchfile裡。
sdiff [-w 80] file1 file2比較兩個檔案的內容。用並排方式顯示。「-w 80」告訴sdiff用80行來顯示兩個檔案的內容。
patch file2patch < patchfile將diff所產生的patchfile使用在file2patch。要一次完成這功能就把diff和patch兩個指令混合在一起:diff file1 file2 | patch file2patch。file2patch可能是file1或file2。
grep string filename在檔案內尋找字串。
tr翻譯工具。列:文字檔案內的字串用另一字串來代替。
gawkGNU awk。常用來處理有定界符號(delimited)的文字檔。
sed處理文字檔之工具。


找3層內的pl檔
$ find ./ -name "*.pl" -maxdepth 3

http://blog.csdn.net/simon_dong618/article/details/1581132
Linux中source命令的用法
source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

找資料夾下sess_* 檔案內含有IKE和特定字串(your_text)的內容並高亮(highlight)
$ grep -l IKE sess_* ; if [ $? -eq 0 ] ; then for i in `grep -l IKE sess_*` ; do grep --color=always  your_text   $i | more ; done  fi
sess_xxx
sess_xxo
1:IKE your_text
1:IKE ssss  your_text33

看xxx資料夾大小
$ du -h --max-depth=1 xxx
看目錄下的資料夾大小,以MiB顯示並排序
http://butlerpc.net/blog/2012/01/linux-disk-usage-du-sorted-by-size/
$ du --block-size=MiB --max-depth=1 | sort -n
什麼是MiB?
https://zh.wikipedia.org/wiki/Mebibyte
「mebibyte」是數字信息中的一個字節數單位。前綴「mebi」等於2^20,1 mebibyte等於1,048,576字節。「mebibyte」記作「MiB」
與 MB(10^6)數值接近

複製檔案並建立檔案
http://stackoverflow.com/questions/947954/how-to-have-the-cp-command-create-any-necessary-folders-for-copying-a-file-to-a
mkdir -p ~/test/app/Controller/ && cp app/Controller/AppController.php "$_"

新增你的慣用指令~/.bashrc
http://blog.yam.com/daniel1222/article/11044777
[root@linux ~]# vi ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

# User specific aliases and functions
PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
PATH="$PATH":/usr/X11R6/bin:/home/dmtsai/bin
LANG=zh_TW.big5
LC_TIME=C
export PATH LC_TIME LANG
umask 022

alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’
alias ll=’ls -l’
alias lm=’ls -al|more’
alias h=’history’

在linux介面如果常使用指令像是"ls -al"之類的指令,我們會把用習慣的指令改成"ll"或"lm"等等,就把常用的指令直接寫入~/.bashrc,每次開機就會自動載入你慣用的指令了。(轉貼於鳥哥的私房菜)

cp如果沒有資料夾就建資料夾
http://stackoverflow.com/questions/947954/how-to-have-the-cp-command-create-any-necessary-folders-for-copying-a-file-to-a
像mkdir -p /var/path/to/your/dir 一樣 如果沒資料夾就直接建資料夾
解法:
$ rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't. bar is created.

複製時忽略某資料夾
http://stackoverflow.com/questions/4585929/how-to-use-cp-command-to-exclude-a-specific-directory
$ rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
ex.
$ rsync -av --progress sourcefolder /destinationfolder --exclude .git

更改linux的時間
查硬體時間
# hwclock
Fri Oct 24 01:00:44 2014  -0.553908 seconds
查系統時間
# date
Fri Oct 24 01:00:50 CST 2014
設定系統時間
# date --set="23 Oct 2014 17:04:00"
Thu Oct 23 17:04:00 CST 2014
重查一次系統時間
# date
Thu Oct 23 17:04:01 CST 2014
但硬體時間還是沒變
# hwclock
Fri Oct 24 01:04:11 2014  -0.937908 seconds
將現在系統時間設給硬體時間
# hwclock --systohc
設定硬體時間完成
# hwclock
Thu Oct 23 17:04:32 2014  -0.094159 seconds
註:
將硬體時間設給系統時間(未測試)
# hwclock --hctosys

使用ntpdate校準Linux時間(date的系統時間)
http://tongcx.no-ip.org:81/node/146
$ sudo ntpdate time.windows.com
31 Aug 17:57:11 ntpdate[29372]: step time server 23.99.222.162 offset -7.983912 sec

ntpdate更新失敗(AWS機器)
# ntpdate time.windows.com
30 Jun 02:22:03 ntpdate[5475]: the NTP socket is in use, exiting
http://superuser.com/questions/639202/updating-time-ntpdate3108-the-ntp-socket-is-in-use-exiting/639206
解法:把ntpd服務關了再執行ntpdate
# service ntpd stop
# ntpdate time.windows.com
30 Jun 02:23:16 ntpdate[5515]: adjust time server x.x.x.x offset -0.019553 sec
# service ntpd start
註:AWS沒辦法用hwclock存取硬體時間

設定時區(AWS)
http://serverfault.com/questions/380561/how-do-i-change-timezone-in-centos-6-2
用date查到的時區是UTC的,想要把它改成UTC+8
# date
Thu Jun 30 02:36:10 UTC 2016
# tzselect  =>測試後無效

# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime => 原本的/etc/localtime可刪除
再用date檢查
# date
Thu Jun 30 10:39:28 CST 2016
沒改 /etc/sysconfig/clock
改完時間後要重啟crond ,cron job 執行的時間才會正確
# service crond restart

更改時區(timezone)

查可用的timezone

# timedatectl list-timezones | grep Asia

設置時區

# timedatectl set-timezone Asia/Taipei

檢查

# date
# ls -l /etc/localtime


以group身份編輯檔案
bear@SGRD:/home/www$ ls -ld svn
drwxr-sr-x 3 http http 4096  1月  7 10:21 svn
bear@SGRD:/home/www$ ls -l svn
-rw-rw-r-- 1 root http      1154  1月  7 15:51 svnlog_test.php
要讓bear可以進svn資料夾並編輯svnlog_test.php:
編輯/etc/group
http:x:33:bear
更變svnlog_test.php檔案權限group可以讀寫(x6x)
最後記得重新登錄,才能編輯


Linux terminal 的Tab 和上下左右鍵沒作用
http://askubuntu.com/questions/163802/backspace-tab-del-and-arrow-keys-not-working-in-terminal-using-ssh
原因:
/etc/passwd
bear:x:1009:1009::/home/bear:/bin/sh
使用了 /bin/sh 當登录使用的Shell(就是对登录命令进行解析的工具) => 要用/bin/bash
但是 /etc/passwd 我又不能編輯怎麼辦呢?
http://askubuntu.com/questions/163802/backspace-tab-del-and-arrow-keys-not-working-in-terminal-using-ssh
$ chsh -s /bin/bash 
=> 不知道為什麼 前兩次 $ chsh -s /bin/bash 都出現錯誤訊息:chsh: user '/bin/bash' does not 
exist ,第三次才成功

使用awk查nginx log看有什麼ip連進來
http://askubuntu.com/questions/231995/how-to-separate-fields-with-space-or-tab-in-awk
查有哪些ip連進來 ( 請注意單引號和中括號的位置 )
# cat gitlab_access.log | awk '{print $1}' | uniq -c
     10 x.x.x.60
      9 x.x.x.174
# cat gitlab_access.log | awk {'print $1'} | uniq -c
     10 x.x.x.60
      9 x.x.x.174
Rellik: (單引號)放外面是正確的
順便列出時間
# awk '{print $1"  "$4"]"}' gitlab_access.log | sort -n | uniq -c | sort -n  => 較精簡,少了cat
      1 x.x.x.174  [09/Nov/2015:06:07:07]
      3 x.x.x.174  [09/Nov/2015:06:07:08]
      3 x.x.x.60  [09/Nov/2015:06:04:18]
      5 x.x.x.174  [09/Nov/2015:06:07:06]
      7 x.x.x.60  [09/Nov/2015:06:04:19]
# cat gitlab_access.log | awk '{print $1"  "$4"]"}' | sort -n | uniq -c | sort -n
      1 x.x.x.174  [09/Nov/2015:06:07:07]
      3 x.x.x.174  [09/Nov/2015:06:07:08]
      3 x.x.x.60  [09/Nov/2015:06:04:18]
      5 x.x.x.174  [09/Nov/2015:06:07:06]
      7 x.x.x.60  [09/Nov/2015:06:04:19]
說明:
第一個sort -n 是對ip排序,第二個sort -n 是對時間排序
要打印空白或其他符號(ex. ] ),用雙引號("")包起來

(ubuntu) 設定固定IP
http://blog.changyy.org/2012/11/linux-static-ip-ubuntu-1204.html
編輯 /etc/network/interfaces
加入下面設定
# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.x.147
netmask 255.255.255.0
network 192.168.x.0
broadcast 192.168.x.255
gateway 192.168.x.1
dns-nameservers 192.168.x.1
重啟網路
$ sudo /etc/init.d/networking restart
最後一行 dns-nameservers 若不加的話,從開機時 /etc/resolv.conf 會被清空。

看哪個資料夾空間佔的大(Izumi)
$ du -sh /* 2>/dev/null

使用mytop
~/.mytop 加入
user=user
pass=pass
delay=1
port=3306
batchmode=0
header=1
color=1
然後
$mytop -h ip

使用strace追蹤進程是哪裡卡住
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/strace.html
根據pid使用strace
$ strace -o output.txt -T -tt -e trace=all -p 28979

如果是切root卡住,也可以使用strace
https://blog.csdn.net/Bob__Yu/article/details/94583305
#strace -T su -


https://www.commandlinefu.com/commands/view/8097/easily-strace-all-your-apache-processes
ps aux 找出pid後搭配xargs 執行strace
# ps aux | grep php | grep calculate | grep work
root      92301  0.7  0.1 287708 33308 ?        S    18:11   0:00 php artisan queue:work ga2-calculate --queue=ga2-calculate --delay=0 --memory=128 --sleep=3 --tries=0 --env=production
# ps aux | grep php | grep calculate | grep work | awk '{print " -o " $2 ".txt -T -tt -e trace=all -p " $2}' | xargs strace
Process 92301 attached
然後檢查 92301.txt即可
輸出檔案精確按時間命名
https://stackoverflow.com/questions/12366995/how-to-derive-current-date-and-time-and-append-at-the-end-of-each-line-that-cont
# ps aux | grep php | grep calculate | grep work | awk '{print " -o " strftime("%Y-%m-%d_%H")"-"$2 ".txt -T -tt -e trace=all -p " $2}' | xargs strace
文件名將會是:2018-11-17_11-92301.txt

bash prompt生成器
http://bashrcgenerator.com/
在 .bashrc 中加入這行後重新加載
export PS1="\d \t\n[\u@\h \W]\\$ \[$(tput sgr0)\]"
prompt就會加入時間,可以自定義你要的bash prompt格式
Thu Feb 14 15:09:07
[username@localhost project]$

用戶與root的$PATH不一樣
[bear@host www]$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
[root@host ~]# echo $PATH
/usr/local/redis/bin/:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
https://unix.stackexchange.com/questions/104727/add-a-path-in-path-globally-for-every-user
解法:
[bear@host www]$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
[bear@host www]$ . /etc/profile
[bear@host www]$ echo $PATH
/usr/local/redis/bin/:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
但還是沒有 /usr/local/bin
解法:
$ vim ~/.bashrc
PATH=$PATH:/usr/local/bin
export PATH
$ . ~/.bashrc
$ echo $PATH
/usr/local/redis/bin/:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/home/bear/.local/bin:/home/bear/bin:/usr/local/bin

SSH 連上後卡住很慢才登入成功
Using username "bear".
(卡在這)
解法:
# vim /etc/ssh/sshd_config
UseDNS no
UsePAM no
# service sshd reload

顯示文件範圍
當大檔案如nginx access log有很多行,只想看第100000到120000行
https://serverfault.com/questions/133692/how-to-display-certain-lines-from-a-text-file-in-linux
# sed -n '100000,120000p; 120001q' front_access.log > ~/wwwlogs/front_access_100000_120000.log
ps. 加 ; 120001q 是為了更快

正則統計文件匹配了幾行
https://unix.stackexchange.com/questions/6979/count-total-number-of-occurrences-using-grep
# grep -o '8.8.8.8.*POST.*signin' front_access_100000_120000.log | wc -l
2033

tail時只顯示grep匹配的內容
https://stackoverflow.com/questions/17779252/ssh-tail-output-lines-only-with-keyword
# tail -f front_access.log | grep "POST.*signin"
test.com request_time= "0.146"  remote_addr= "x.x.x.x" http_x_forwarded_for= "x.x.x.x" - [29/Jun/2019:18:19:50 +0800] "POST /signin HTTP/1.1" 200 body_bytes_send= "120" bytes_sent= "785" "https://test.com/signin" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36"

ssh登入關閉google-authenticator驗證

1. 修改 /etc/ssh/sshd_config

# vim /etc/ssh/sshd_config
ChallengeResponseAuthentication 從yes改no
ChallengeResponseAuthentication no

2. 編輯 /etc/pam.d/sshd

# vim /etc/pam.d/sshd
註解掉這行
#auth required pam_google_authenticator.so

我只做這步,沒重啟動 SSH daemon,只要做第二步(修改 /etc/pam.d/sshd )即可

查機器外網IP

# curl icanhazip.com
223.136.97.188
# curl ifconfig.tw
223.136.97.188










2013年7月13日 星期六

桌機灌ubuntu-desktop 13.04

安裝過程
1. 重新開機按delete進bios
2. 將預設開機片選CDROM
3. 因為桌機顯卡和ubuntu沒有衝到,所以安裝過程很順利,在安裝之前右上角就能選擇連線網路
,需創立一個新的連線,輸入帳號密碼(預設的是區網連線)

裝好後,發現系統安裝好許多軟體(Firefox, LibreOffice, 新酷音,Ubuntu軟體中心 ... etc)
但是電腦實在太老舊了,就算灌了ubuntu仍然是跑很慢
所以打算裝chrome(個人覺得chrome比firefox順)
上網抓的chrome deb檔無法順利安裝,所以就去ubuntu軟體中心安裝chromium
然後想上bbs,發現網路上找的chrome套件都與安裝的chromium不相容
使用ctrl+alt+t打開終端機
所以就安裝了pcmanx
$ sudo apt-get install pcmanx-gtk  (不確定)
執行方法
$ pcmanx &  #這樣打開pcmanx軟體後console還能繼續下指令
安裝tasksel,讓apache、mysql、php一次裝到好(ubuntu預設有裝python、perl)
$ sudo apt-get install tasksel
$ sudo tasksel install lamp-server
值得注意的ubuntu的apache不是httpd
開啟要用
$ sudo /etc/init.d/apache2 start

之後還安裝(用sudo apt-get )
vim
screen
lynx
sublime (和windows一樣直接去官網下載解壓縮後就能用了,還沒研究怎麼把捷徑放到左邊的快捷列)


2013年7月12日 星期五

linux screen 使用心得

screen很好用,但是screen技巧太薄弱,就讓Rellik老師教我的東西在這邊記下

Rellik: 不會耶 我的 screenrc 有特別設定的關係
Rellik: 可以開好多個分割窗,然後底下有顯示數字
Rellik: 所以我會知道我到底開了多少個
Rellik: 在你家目錄下新增 .screenrc 這檔案 @_@

defc1 off
caption always "%-w%<%{=B GK}%n %t%{= KW}%+w"
hardstatus alwayslastline "%{=b BW} {%l}%018=%{=b WK} %n %t %-029=%{YK} %Y %M %d(%D) %{RW} %C %A"
defencoding utf-8
defutf8 on
shelltitle shell
bind b encoding big5 utf8
bind u encoding utf8 utf8
bind w height -w 24
bind m height -w
termcapinfo screen 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
termcapinfo xterm-256color 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defscrollback 20000
2

老天尊: 你的screen設定檔 要改下面的名字怎麼改..
老天尊: 0 shell 要改 機器名稱(DB server)這樣
Rellik: ctrl+a 然後 shift-a
Rellik: 就可以自己 key 名字進去
Rellik: 開太多窗不想用 ctrl-n ctrl-p 切換視窗的話也可以用 ctrl-a "
老天尊: 酷耶 這個要裝你設定檔才有?
老天尊: ctrl-a " 這個
Rellik: screen 內建
老天尊: 我都 ctrl-a +數字
Rellik: 也可以
Rellik: 但是超過 9 以上就要..
Rellik: 用我剛說的方式或是 ctrl-n , ctrl-p

使用ctrl+a d離開打開的screen(會存在機器上)
然後直接exit或關掉putty
下次再連的時候使用
$ screen -rUD
喚醒上次的工作狀態

$ mount
前面有ip的是掛載網路硬碟

$ sudo mtr -n domain
類似tracert

windows用 tracert,linux用traceroute
Rellik: 知道怎麼判讀 mtr 嗎?
Rellik: mtr 進去左邊 Loss% 表示掉封包
Rellik: snt 是 sent
Rellik: 送了多少封包過去
Rellik: 如果你看最後一個站台是 950 但是前面幾個站台已經收了 1000 個封包那..表示掉了 50 個
Rellik: loss 5%
Rellik: 後面 last 是他最新送出去的封包是多少毫秒
Rellik: avg 是平均值
Rellik: 最後一欄 StDev 是標準差
Rellik: 標準差越大的...表示那個站台越不穩
Rellik: 我的機器...很糟
Rellik: 標準差 2x ..

Rellik的.screenrc跑版->
因為我的VM上灌centos中文版,所以
Window -> Translation -> Treat CJK ambiguous characters as wide 打勾要取消 ( 上面Remote character set: 選UTF8 )
開screen後才不會跑版


老天尊: screen 裡面line of scrollback 怎麼感覺跟沒設一樣...
往上拉只能看到一點點東西
Rellik: ctrl+a- esc
Rellik: 會進入暫停模式
Rellik: 然後才能用 page up 和  page down 找
Rellik: 要再離開暫停模式是用ctrl-a-q
Rellik: esc 也可以
Rellik: 他會出個訊息是 copy mode aborted


指定bash
在ubuntu 14.04的docker中跑ubuntu14.04的容器,使用screen會使用錯誤(/bin/sh)的SHELL程式,且使用chsh -s /bin/bash 無效
解法:
# screen -U -s /bin/bash

screen -U後頁籤出現完整路徑
解法:
Rellik: 要在機器上的 .bashrc 加上 unset PROMPT_COMMAND
結果:

為screen命名

https://stackoverflow.com/a/3309696  How can I assign a name for a screen? [closed]

重新命名現有的screen會話

ctrl + a => :sessionname YOUR_SESSION_NAME  (然後enter)
查看現有的screen
$ screen -ls

喚醒screen

$ screen -rUD 16113.bear










2013年7月10日 星期三

Sublime Text 2.0.1 x64 升級 Sublime Text 2.0.2 x64

http://www.sublimetext.com/forum/viewtopic.php?f=3&t=4720
照這篇說法

將新下載的2.0.2 portable zip檔解壓縮出來後將檔案複製取代到2.0.1資料夾檔案中

重開sublime 就更新成功了,原本開的暫存文件、套件(emmet) 都還會在

記得重開電腦後把資料夾名稱改成2.0.2 以免日後混淆

sublime 左方javascript能否延展的問題:
使用eclipse和sublime在行號附近能夠將左("{")右("}")括號打開和收縮的按鈕,sublime必須縮排是tab才能開關(兩個空白不行)