給未來的裕翔
http://ipid.shat.net/
這個網站不但可以知道自己的public ip
同時也可以知道自己的private ip
Monday, October 18, 2010
Sunday, October 17, 2010
Thursday, September 23, 2010
SCJP考前筆記
給未來的裕翔
先推一下恆逸老師寫的書^^
書名: Java物件導向程式設計與SCJP認證明解
作者: 戴玉佩
- private int i = 0, 這行如果是成員變數宣告的話ok, 區域變數宣告就會失敗, private不能用在區域變數上
- 090不是八進位的int型別數字, 乍看之下, 有0開頭, 數字預設也的確是int, 但是八進位的數字只能是0~7^^
Wednesday, September 22, 2010
從level 3進入圖形桌面
給未來的裕翔
當我在level 5執行sudo init 3後
會進入level 3的登入畫面
這時我可以sudo init 5進入圖形桌面
不過要新登入就是了
書上說也可以startx -- -depth 16
不過每次這樣進入桌面都會有程式crash, 怪怪的
所以我偏好書上講的另一種方式
startx -- -dpi 100
這樣就可以進入圖形桌面且不需要重新登入^^
打開一個terminal
輸入runlevel, 可以發現自己還是處於level 3喔
Tuesday, September 21, 2010
以他人之名sudo
給未來的裕翔
當我是root身份
我想為一位使用者新增web資料夾在他加目錄裡
當然owner是他囉
白痴作法就是先mkdir再chown
比較乾脆一點的是
sudo -u user mkdir web
帥吧^^
httpd和smbd的新增使用者比較
給未來的裕翔
httpd新增要認證的使用者時
使用者是不需要存在在/etc/passwd裡面的
可是smbd的需要
httpd第一次要新增使用者時
要加-c
產生該認證檔案
而smbd則是要加-a
意思是新增該使用者
認證檔案不在也會自動生成
設定讓新使用者一登入就必須換密碼
給未來的裕翔
如果想讓新使用者
在用預設密碼登入的同時更改成自己的密碼
chage -d 0 user
-d是last day
mas page裡面說只要設定為0就會強制新使用者登入時改密碼
後記;
另一個方法是
以passwd給使用者密碼後
再一次passwd -e user
Monday, September 20, 2010
新增使用者的comment
給未來的裕翔
如果現在我希望新增一個使用者
新增的同時寫入他的comment
useradd -c comment ......
如我我已經有一個使用者
我希望修改他的comment
usermod -c comment ......
設定好logrotate後, 強制執行一次
給未來的裕翔
設定好/etc/logrotate.d裡面的檔案後
想看是否會生效
可以先來一個rotate -f /etc/logrotate.d/target-log
-f是force意思吧, 沒真的去查
自訂一個ftp.log但不要寫到/var/log/messages裡
給未來的裕翔
最近在學習openSUSE裡面的syslog-ng
有個考古如我標題要求
本來我是新增一個flags(final)在log裡
log { source(src); filter(f_ftp); destination(ftpall); flags(final); };
後來看到有人直接在filter裡面加入'不要ftp'
filter f_messages { not facility(news, mail, ftp) and not filter(f_iptables); };
感覺這更厲害^^
寫下來崇拜一下~
Sunday, September 19, 2010
ssh server禁止密碼驗證
給未來的裕翔
如果想要讓ssh server只接受passphrase
而不接受一般密碼驗證的話
要修改/etc/ssh/sshd_config的設定
UsePAM no
這樣就可以了, 預設是yes
Saturday, September 18, 2010
Thursday, September 16, 2010
Wednesday, September 15, 2010
如何讓google的contact生日自動提醒?
給未來的裕翔
真是太爽了^^
首先到google的calendar裡
左下角的Add -> Browse Interesting Calendars
-> More -> Contancts' birthdays and events
帥吧^^
Monday, September 13, 2010
Friday, September 10, 2010
java的多型
給未來的裕翔
java有個重點是多型
這可是我當初自修完全看不懂的呢^^
汽車是車
所以我可以宣告一個車的參考指向汽車物件
同理, 經理也是員工
Employee e = new Manager();
這就是把經理找來當Employee用
那如果現在Employee有getInfo()方法
Manager裡面有覆寫getInfo()方法
試問, 我把經理當員工用
e.getInfo()是呼叫誰的getInfo() ?
經理的^^
老師的超棒例子!
"把所有員工找來報告, 經理報告的內容會和清潔工一樣嗎?"
那如果有個attribute是經理獨有, Employee沒有
ex: department
那我是不能存取它的department的
不過不能存取不代表他消失
老師的超棒例子
在我們面前是大師的他
回家變兒子的老子
此時的他依然擁有java知識
不過沒要教他兒子罷了
--------------------------------------------------
多型的好處, 異質集合
我可以宣告一個Employee陣列
裡面存放Manager, Engineer這些也算是員工的相異子類別
--------------------------------------------------
如果父類別有個方法要在子類別裡被覆寫
那麼它的存取控管必須大於等於父類別
也就是說, 如果在父類別裡是public的成員方法
在子類別裡它不能是private
因為在編譯器檢查的時候
是以父類別方法來檢查, 實際執行卻是執行子類別的方法
萬一上例在子類別宣告成private
那就會是"檢查通過, 但實際不能用" ^^
--------------------------------------------------
介於public和private中間還有兩個: default和protected
protected的方法可以被同package和子類別存取
default的方法可以被同package存取
什麼時候會用到protected呢
老師的超棒實務例子
"當我在規劃需要哪些方法時 先寫一個空的放在那"
"此時我不希望它被存取 因為是空的"
"之後被分配的人去把它實作 再把變protected改成public就可以被他人使用了"
"還有很多機會會用到啦 不過現在的你大概只能聽懂這個"
太棒了 被強者嗆就是爽^^
--------------------------------------------------
a instanceof b回傳boolean
可以想成判斷是否"a is b"
如果現在用Employee e參考指向Manager
e.getInfo()的話, 是Manager自己的getInfo()
可是如果想要使用Manager自己新增的playGolf()呢?
要先轉型回子類別Manager m = (Manager) e;
--------------------------------------------------
比較一下, 對陣來說, 它有個length成員變數
對字串來說, 它有個length()成員方法
--------------------------------------------------
子類別可以自動變父類別
父類別需要casting才可以變子類別
如果現在A是父類別, B和C是各自繼承A的兄弟類別
A a = new B();
B b = (B) a;
這樣ok
A a = new A();
B b = (B) a;
編譯ok, 執行失敗
那現在要怎樣才可以把B轉型成C呢?
B b = new B();
A a = b;
C c = (C) a;
這樣編譯會過喔^^
當然, 執行會錯啦~
--------------------------------------------------
Object o = new Object[n];
雖然看似tricky
但是這是合法的喔^^
因為陣列也是一種物件
如果現在Object o = new int[1]
裡面的element會不初始化成0
怎麼取值? 轉型!
if ( o isinstanceof int [] )
int[] ia = (int
Thursday, September 9, 2010
wordpress安裝備忘錄
為了使用wordpress
要先有mysql-server
裝完後service mysqld start
chkconfig mysqld on
接著進入mysql, 首先為mysql的root建立密碼
mysqladmin -r root password 'my-password進入mysql產生資料庫並授權
mysql -u root -p
create database wordpress;
grant all privileges on wordpress.* to bob@localhost identified by 'another-password';
show databased;
驗證完後就從mysql離開, quit
修改/etc/wordpress/wp-config.php裡面的
database-name
user-name
database-password
之後把/usr/share/wordpress整個移到/var/www/html之下
不過此時的/var/www/html/wordpress/wp-config.php連結失效
重新製作, 連到/etc/wordpress/wp-config.php
不知為啥
把wordpress整個複製到/var/www/html
resotrecon -R /var/www/html/wordpress
想要以瀏覽器開啟
http://localhost/wordpress/wp-admin/install.php
總是失敗
http://localhost/index.html可以
http://localhost/wordpress/index.html就不行
後來
把它整個移到~/public_html之下就可以了
ps: 如果wordpress的資料庫密碼忘了或錯了, 以root進入後,
前面講的grant blabla重打一次即可
照理說
之後wordpress備份
應該就是家目錄和wordpress資料庫就可以了
httpd.conf語法檢查
如果要檢查httpd.conf的語法
有三種方法
service httpd configtest: 書上說其實就是呼叫apachectl configtest
apachectl configtest: 正常
httpd -t: 書上說這個提供的資訊最少
結論: 我都用apachectl configtest好了
httpd的allow和deny
對httpd.conf來說
order allow,deny
可以想成, 後者deny為預設, 或是高權重
同時被定義或未被定義的clients會以後者, 也就是deny處理
反之
order deny,allow
都講或都沒講的clients都以allow處理
httpd與selinux
就算httpd有開啟
就算iptables不會擋網頁服務
就算/etc/httpd/conf/httpd.conf的UserDir
有設定成public_html
還是無法讓每位使用者提供自己的服務
因為selinux檔掉了
必須
sudo setsebool -P httpd_enable_homedirs 1
才可以
謹記!
ftp client端太久沒用會被踢開
ftp client端太久沒用會被踢開
ftp裡面沒有tab補齊檔名的功能
防火牆如果設定不開放21, 連線中的ftp不會被影響
即使是連線中, selinux的allow_ftpd_anon_write可以馬上生效
把vsftpd套件移除, 上傳或供下載的檔案都還在
裝好的vsftpd開啟就可以供下載檔案了
如果不能上傳單純因為權限, 改完權限client馬上就可以上傳了, 不需要重登
selinux的效力依舊是最大
Saturday, September 4, 2010
java物件繼承
給未來的裕翔
Autoboxing/Autounboxing沒事別用
因為有效能問題
雖然用java就表示效能並非首要考量
但是java已經夠不快了
別再用一些有的沒的讓它更慢
當然, 也許有一天它會適合我(在某種情況下)
--------------------------------------------------
java是限制單一繼承的
如此可避免行為混淆(怕遇到一堆有同名method的父類別)
--------------------------------------------------
對method而言, 有限制最寬鬆的public
同package和子類別和其他都可以使用
接著是protected
同package和子類別都可以使用
再來是default
同package才能使用
最後是private
只有本身該類別可以使用
protected老師說留到後面講
所以我先記default的筆記
default並不是真的寫這個關鍵字出來喔^^
真的在method前寫default的話編譯反而會錯
至於class, 只有public和default兩種
那為什麼需要default呢?
當我們在設計一個系統的時候
要先進行子系統切割
以汽車來講, 一萬多個零件
"爽斃了" by 老師
所以要進行子系統切割: 引擎系統, 機電系統, 底盤系統......
(其實我忘記老師到底說了哪些系統)
以引擎系統(package)而言
我不是真的去操作它
而是透過油門(package interface)
(其實就只是一個public class)
至於引擎內部(一堆default class)怎樣運作
我可以不用知道^^(耶~!)
哪天也許引擎內部(一堆default class)稍作修改
我依舊只需要踩油門(package interface)就能加速
暸改嗎? 所以package的封裝是藉由class的default來達成
--------------------------------------------------
一個類別可以包含
1. attribute
2. method
3. constructor
4. nested class
--------------------------------------------------
從父類別繼承的method可以override
signature要一樣
return type可以不一樣, 不過有限制
限制是: override後的return type必須是原來method的return type的子類別
不過這是5.0以後才有的啦
那如果signature不一樣, 也是可以的呦^^
這樣變成method overload了
compiler是不會發出警告或錯誤的
不過在5.0以後, 可以在該method上方加一行
@Override
這樣compiler就會幫我檢查, 這是java裡面的annotation之ㄧ
--------------------------------------------------
如果現在有兩個方法
public int mm() {...}
public String mm () {...}
這樣編譯會錯
但不是overload的問題
而是method redefine的錯誤
--------------------------------------------------
現在有個A, 它有個m方法
B繼承A
C繼承B
對C來說, 如果使用super.m()
它是呼叫B的m(), 實際執行A的m()
如果B有override過A的m()
那C使用super.m()時
它是呼叫B的m(), 實際執行B的m()
那此時如果我想使用A的m()呢?
super.super? 錯!!!
老師說有方法可以, 不過現在沒要提^^
如果要使用父類別的constructor
super(...)
所以比較一下
使用父類別的方法: super.m()
使用父類別的constructor: super(...)
--------------------------------------------------
constructor裡面可以呼叫另一個constructor
如果它又呼叫回來?
recursive? 聰明的編譯器會檢查來避免^^
--------------------------------------------------
當我沒建立costructor時
編譯器會為我準備一個
當我繼承某類別, 編譯器會為我子類別的constructor裡最前面那行加上
super()
注意, 參數列是空的喔
萬一, 我的父類別有自訂constructor
(那編譯器不會為我準備空的constructor)
那編譯器為我子類別加上的super()就會造成編譯器失敗
因為找無^^
順帶一提: 老師說沒事別用繼承, 也是效能問題
--------------------------------------------------
javap class-name
可以拿來反組譯class
--------------------------------------------------
Object是所有類別的根源
裡面有toString(), equals(), hashCode()這些方法
這是提供來讓我們override的
equals()視不同情況改寫
預設是
public boolean equals( Object o )
{
return this == o;
}
當我new了兩個物件, 它們就不會是identical
但某些內容可以equal
可是如果我不改寫equals()的話
它依舊只比較是否identical^^
所以如果兩個字串使用s1 == s2
一定是false的啦^^
應該要用s1.equals(s2)
(String類別有override過equals()方法)
hashCode()有個規則
如果a.equals(b)如果是true的話
a.hashCode() == b.hashCode()必須為true
至於實作, 也是依情況而定^^
--------------------------------------------------
Integer是int的包裝類別
如果現在wAmount是Integer
int r = wAmount + 1在java 5.0之前會錯
會錯是因為物件不能做算術運算
5.0之後是ok的, 因為有autoboxing
那如果現在要把String換成int
可參考下面
String sAmount = "10000"
int amount = Integer.parseInt(sAmount);
如果sAmount是"0x123A"或"12.3"都會錯
不過"12.3"可以用Double.parseDouble(sAmount)來轉^^
Friday, September 3, 2010
java陣列
給未來的裕翔
要宣告一個陣列
int[] a
或
int a[]
皆可, 不過老師建議用上面那個
因為以method來看
如果現在有個method要回傳整數陣列
public int[] doSomething() {...}
那個中括號很明顯就不能跟int拆開
所以保持一致比較好
另外
如果現在這樣宣告, int a[], b
那個a[]是參考型別, 因為陣列是一個特殊物件
(element可以說是它的attribute)
而b是基本型別
接著
int[] a = new int [-5], 編譯ok, 執行不ok
int[] a = new int [0], 編譯ok, 執行ok
int[] a = new int [3.5], 編譯就不ok了^^
如果現在有以下宣告
int size = 5
int[] ia = new int [size]
在c編譯不會過喔, size必須是constant才可以
理由是c的stack是固定大小的
陣列大小必須在編譯時期就知道
而java有heap memory, 所以剛那兩行宣告是會過的
陣列大小可為0, 那陣列上限呢?
跟JVM預設的heap mem有關, 64MB
可改大小, 不過還是有其上限
就是int的上限, 21億多
那是因為陣列的index是整數
另外, int[] x如果被初始化
它的值是null
從這裡也可以發現, int[] x比起int x[]更容易判斷它是參考型別
在main方法裡
如果
int size
int[] a = new int[size]
會錯, 原因跟陣列無關, 而是區域變數使用前沒給值
但如果上面那兩行放在class裡面就ok
因為建立物件的同時size會被給0
(中場閒聊: SCJP很少考單一觀念)
至於陣列的初始化
int[] ia = { 1, 3, 5 } 這ok
int[] ia;
ia = { 1, 3, 5 } 這不ok
int[] ia;
ia = new int[] { 1, 3, 5 } 這就ok
再來, 陣列物件有個attribute叫length
它是final, 無法修改
如果要複製陣列
可以用System.arraycopy()
需要五個參數, 分別是
source, sourceIndex, target, targetIndex, count
只處理一維, 事實上java也只有一維
要複製元素的話盡量使用這個方法, 不要自己寫for
因為這方法使用原生方法, 利用OS來達成
所以會比自己寫for快很多
再來是方法的overloading
如果一個類別裡面同時有
public m( int... a )和public m( int[] a )
會錯, 因為int...其實就是陣列
把其中一個換成public m(int a)就可以過編譯
但是, 如果我現在是
public m( int... a )
public m( int a )
雖然可以編譯過
由於int... a也可以接收一個變數的呼叫
那到時怎知哪個會被呼叫
答案是public m( int a )
因為它最符合
基於它(...)給的幫助不大, 又會造成混淆
老師對它的評價: 爛死了!!!
^^
(順便提一下, main的String[]換成String...也是ok的)
(若只有String則不ok)
現在談一下命令列
如果我java MyApp a b c
args就是a, b, c三個字串
如果現在只有java MyApps
那args還會建立嗎?
會! 個數為0的陣列
這很重要嗎?
當然, 要成為master, 至少就要知道的比別人多^^
所以上例的args就算沒element, 它也不會是null
java封裝
給未來的裕翔
市面上有很多java可以拖拉介面的軟體(除了eclipse)
那它們彼此間可以自定控制項, 並且在別的java IDE使用
因為那有規範, JavaBeans
getXxx和setXxx也是它的規範內容
不過getXxx有個例外
當回傳只有true或false的話, 要改成isXxx
另外, 如果getXxx和setXxx只有最陽春的功能
那attribute是否可設為public
不行! 因為要考慮到之後可能會改
setXxx會修改的機率很大, 那getXxx呢?
也是有機會的! 例如: 回傳的幣值
所以attribute最好都由相對應的method來存取
以Employee類別裡面的salary這變數來說, getSalary和setSalary合稱它的property
我們稱: Employee類別有一個salary property
property裡面的get和set不用成對出現
那attribute和property呢?
舉例來說, 我得知Person類別裡面有個getAge()方法
我們稱: Person類別有一個age property
那age這個attibute存在嗎? 不一定要存在喔^^
以此例來說, age這變數是不應該存在的!
"變動資料不應該設計在資料表內"
ex: 一個人又不是年年25歲
所以, 以此例來說, 該紀錄的是生日
而getAge()是利用生日和今天日期來算出年齡的
結論: 老師好強阿...... 可以一直舉例教學
nsswitch.conf的host查詢順序
給未來的裕翔
由於我在練習架NIS server(雖然失敗)
中間有動到/etc/nsswitch.conf這個檔案
hosts: files nis dns
由於我的nis沒架成功
導致在nis查詢hosts那邊卡很久
可以考慮把dns一到第二個或第一個
openSUSE的SuSEfirewall2_setup
給未來的裕翔
由於不知道怎麼修改openSUSE裡面的防火牆
想說先關掉好了
但是它也沒有iptables這個service
最像的兩個是
SuSEfirewall2_init和SuSEfirewall2_setup
起先關init那個會失敗, 於是關setup那個
關完後, 什麼服務都失效了!!!
真讓我驚訝, 難道說那個不是防火牆?
沒辦法了, 只好恢復它, 手動去該host輸入rcSuSEfirewall2 stop
無知就是悲哀阿......
openSUSE裡面預設的/etc/sudoers不是很好
給未來的裕翔
在openSUSE裡面, 預設是誰都可以使用sudo的
而密碼是root的密碼
萬一root和normal user不同
首先, 誰都可以使用就不是很安全了
接著, 萬一root和normal user真實世界是不同人
每次root改密碼不就要知會normal user?
萬一normal user不只一位, 甚至很多位?
所以我自己會偏向把/etc/sudoers裡面的
Defaults targetpw
ALL ALL=(ALL) ALL註解掉
ps: 赫然發現, blogger也可以用pre語法耶^^
Thursday, September 2, 2010
在KDE裡面不小心把System tray不見了!?
給未來的裕翔
我剛不小心把它移除了
想說登出登入也許就好了^^
沒有!!! 只好上網查
可是!!! 我是用無線網路阿~
我又不會自己設定
每次都是用System tray的圖示來簡單操作的^^
現在System tray不見了, 我怎能透過上面的小圖示上網呢!!!
沒辦法 摸索吧~
在Panel上按右鍵 -> Panel Options -> Add Widgets -> Running -> System Tray
成功是成功了, 不過出現在關機圖示右側, 不很習慣
所以我打算...... 習慣它^^
從wordpress轉到blogger
給未來的裕翔
基於我現在租屋的網路環境是NAT後方的private IP
加上電費每度四元
本來有考慮網路上的免費空間 000webhost
不過註冊後一直沒審核完畢!?
後來打算忍痛使用付費空間
馬上打消念頭^^ 付費耶!
牽一條public IP? 似乎更貴~ 房東也不知道會不會答應
就決定是blogger了!!!
不過由於wordpress之前的設定
只要我架站位置不是140.114.229.129
開啟網站就會少一些東西
因為一些resource的位址是會用到140.114.229.129的
但我就已經是private IP啦!
這時發揮所學^^
ifconfig eth0 140.114.229.129
開啟網站, 果然奏效啦!
使用wordpress的tools, 把它export
把一個xml檔存到桌面後
到http://wordpress2blogger.appspot.com/
convert好之後, 一樣下載一個xml到桌面
接著到blogger匯入它
搞定!!!
差點就要使用"努力法"了
ps: 這是我在blogger首po^^
Monday, August 23, 2010
openSUSE初體驗^^
給未來的裕翔
現在這篇是在openSUSE裡面打的^^
先講一下和Fedora的差異
第一次用KDE, 介面還蠻漂亮的, 不過不是很習慣
首先, 為了上網, 想去/etc/sysconfig/network-scripts/裡面修改ifcfg-eth0
結果這裡就不一樣了
位置是在/etc/sysconfig/network/ifcfg-eth0
裡面的參數也多許多
突然多了BROADCAST和NETWORK要輸入
因為我是C級網段, 所以IP直接最後一個數字分別改成255和0即可
而ROUTEER和DNS要另外在別的檔案設定
也許是因為openSUSE沒有NetworkManager吧
新增一個/etc/sysconfig/network/routes
然後DNS直接加到/etc/resolv.conf裡面
修改這三個檔案後, 重新啟動網路, 沒有service這個指令讓我用!!!
這樣講不對, 雖然which找不到, 但這只能表示它不在我的PATH裡面
(對於找不到的指令可以, ex: cnf service, 這樣就會告訴我指令位置)
找不到的會跟我說該怎麼裝
結果裝法居不是yum!!! 而是一個叫zypper的指令......
知道service位置後(也是可以/etc/init.d/service啦 不過字數稍嫌多)
sudo /sbin/network restart
此時又一件神奇事, 是要輸入root密碼耶! 不是使用者自己的!!!
假設我瞬間習慣, 網路到此應該就是通了~
接著是中文問題, 查google後
openSUSE -> Computer -> YaST -> System -> Language
在Secondary Languages裡面選Traditional Chinese
這樣就會裝東西裝一陣子
登出登入後, Ctrl + Space就可以叫出輸入法了
是SCIM喔, 不是iBus, 雖然我不知道差在哪
但都有新酷音可以選就是了
現在這篇是在openSUSE裡面打的^^
先講一下和Fedora的差異
第一次用KDE, 介面還蠻漂亮的, 不過不是很習慣
首先, 為了上網, 想去/etc/sysconfig/network-scripts/裡面修改ifcfg-eth0
結果這裡就不一樣了
位置是在/etc/sysconfig/network/ifcfg-eth0
裡面的參數也多許多
突然多了BROADCAST和NETWORK要輸入
因為我是C級網段, 所以IP直接最後一個數字分別改成255和0即可
而ROUTEER和DNS要另外在別的檔案設定
也許是因為openSUSE沒有NetworkManager吧
新增一個/etc/sysconfig/network/routes
default 140.114.28.254 0.0.0.0 eth0
然後DNS直接加到/etc/resolv.conf裡面
修改這三個檔案後, 重新啟動網路, 沒有service這個指令讓我用!!!
這樣講不對, 雖然which找不到, 但這只能表示它不在我的PATH裡面
(對於找不到的指令可以, ex: cnf service, 這樣就會告訴我指令位置)
找不到的會跟我說該怎麼裝
結果裝法居不是yum!!! 而是一個叫zypper的指令......
知道service位置後(也是可以/etc/init.d/service啦 不過字數稍嫌多)
sudo /sbin/network restart
此時又一件神奇事, 是要輸入root密碼耶! 不是使用者自己的!!!
假設我瞬間習慣, 網路到此應該就是通了~
接著是中文問題, 查google後
openSUSE -> Computer -> YaST -> System -> Language
在Secondary Languages裡面選Traditional Chinese
這樣就會裝東西裝一陣子
登出登入後, Ctrl + Space就可以叫出輸入法了
是SCIM喔, 不是iBus, 雖然我不知道差在哪
但都有新酷音可以選就是了
Saturday, August 21, 2010
Thursday, August 19, 2010
Wednesday, August 18, 2010
find找檔案後搭配grep找內容
給未來的裕翔
如果現在我想要知道某個目錄以下(含子目錄)
的所有包含字串aaa的檔案
find target-dir -f file -exec grep -Hn aaa {} \;
-H是把檔名列出來
-n是把行數列出來
這樣就可以知道aaa在哪個檔案的哪個行數
如果現在我想要知道某個目錄以下(含子目錄)
的所有包含字串aaa的檔案
find target-dir -f file -exec grep -Hn aaa {} \;
-H是把檔名列出來
-n是把行數列出來
這樣就可以知道aaa在哪個檔案的哪個行數
執行android程式前詢問device選擇
給未來的裕翔
如果我在Eclipse左側對專案按右鍵
選Run As -> Android Application
它似乎會以我剛練習建立的模擬器來跑
如果要設定成會詢問我的話
在專案按右鍵 -> Run As -> Run Configurations -> Target -> Manual
如果我在Eclipse左側對專案按右鍵
選Run As -> Android Application
它似乎會以我剛練習建立的模擬器來跑
如果要設定成會詢問我的話
在專案按右鍵 -> Run As -> Run Configurations -> Target -> Manual
如何讓linux的eclipse抓到android手機
給未來的裕翔
原來根本不需要裝驅動阿~
以root身份新增一個檔案
/etc/udev/rules.d/51-android.rules
內容為
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
或
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
是很確定要用哪個, 或是兩個都行
那個0bb4要換成廠商代號
範例裡0bb4剛好就是HTC, 所以不需要換
參考網頁:
http://developer.android.com/guide/developing/device.html
原來根本不需要裝驅動阿~
以root身份新增一個檔案
/etc/udev/rules.d/51-android.rules
內容為
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
或
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
是很確定要用哪個, 或是兩個都行
那個0bb4要換成廠商代號
範例裡0bb4剛好就是HTC, 所以不需要換
參考網頁:
http://developer.android.com/guide/developing/device.html
Monday, August 16, 2010
java的adapter
給未來的裕翔
java的interface就是先定義一堆function
之後extend它的話
必須先把所有的abstract method都實作出來才能實體化
而adapter就是比較方便的interface
也有一堆先定義好的method
不過只需要實作我要的method即可
問題是, 那interface為何要存在?
直接都用adapter不就好了?
說得也是^^
雖然我現在還不知道
不過我猜, adapter只是先實作interface而已?
就是一堆empty method, 而之後要用哪個method
再繼承adapter實作我要的method
未來的裕翔, 是這樣嗎^^?
java的interface就是先定義一堆function
之後extend它的話
必須先把所有的abstract method都實作出來才能實體化
而adapter就是比較方便的interface
也有一堆先定義好的method
不過只需要實作我要的method即可
問題是, 那interface為何要存在?
直接都用adapter不就好了?
說得也是^^
雖然我現在還不知道
不過我猜, adapter只是先實作interface而已?
就是一堆empty method, 而之後要用哪個method
再繼承adapter實作我要的method
未來的裕翔, 是這樣嗎^^?
把手機調成USB debugging
給未來的裕翔
買了一隻HTC wildfire練習android
由於我的分類幾乎都是套件名稱
所以像是手機的設定, 實在不知如何歸類
由於會使用eclipse開發
暫定所有手機相關操作筆記都歸類到"eclipse-platform"
menu -> Settings -> Applications -> Development -> USB debugging
把它check即可
買了一隻HTC wildfire練習android
由於我的分類幾乎都是套件名稱
所以像是手機的設定, 實在不知如何歸類
由於會使用eclipse開發
暫定所有手機相關操作筆記都歸類到"eclipse-platform"
menu -> Settings -> Applications -> Development -> USB debugging
把它check即可
Saturday, August 14, 2010
kvm-intel.ko無法載入?
給未來的裕翔
剛開啟virt-manager
突然發現一個錯誤訊息
說kvm有些module無法載入
赫然察覺, 原來我之前都自動濾掉這個警告訊息了!
不知道之前的慢速跟失敗跟這有沒關係
以下紀錄如何去BIOS開啟virtualization
哪一家BIOS我忘記看了, 也懶的重開......
Security -> System Security
把Virtualization Technology (VTx)
和Virtualization Technology Directed I/O (VTd)
改成Enanble
那我怎麼知道是這兩個?
不, 我不知道^^
剛開啟virt-manager
突然發現一個錯誤訊息
說kvm有些module無法載入
赫然察覺, 原來我之前都自動濾掉這個警告訊息了!
不知道之前的慢速跟失敗跟這有沒關係
以下紀錄如何去BIOS開啟virtualization
哪一家BIOS我忘記看了, 也懶的重開......
Security -> System Security
把Virtualization Technology (VTx)
和Virtualization Technology Directed I/O (VTd)
改成Enanble
那我怎麼知道是這兩個?
不, 我不知道^^
Friday, August 13, 2010
postfix架MTA要設定bool
給未來的裕翔
如果使用postfix架設MTA的話
要把allow_postfix_local_write_mail_spool設為1
不然會造成/var/mail/user.lock
然後就收不到信了
報告完畢
如果使用postfix架設MTA的話
要把allow_postfix_local_write_mail_spool設為1
不然會造成/var/mail/user.lock
然後就收不到信了
報告完畢
Thursday, August 12, 2010
安裝作業系統時選"取代現有linux作業系統"
給未來的裕翔
實在是有夠他x的
重灌前我記得有一堆logical volume的
結果重灌後, 只剩root, home, swap
而且size還不對, 好像把當初沒用掉的硬碟空間都用盡去了
他x的
跟我想像的完全不一樣!
還好是練習機
但還是很他x的
實在是有夠他x的
重灌前我記得有一堆logical volume的
結果重灌後, 只剩root, home, swap
而且size還不對, 好像把當初沒用掉的硬碟空間都用盡去了
他x的
跟我想像的完全不一樣!
還好是練習機
但還是很他x的
MBR的bootloader被洗掉怎辦?
給未來的裕翔
先作以下步驟
dd if=/dev/zero of=/dev/sda bs=256 count=1
好, MBR的前一半被洗掉了^^
注意, 那個256應該是可以換掉, 但別把partition table也蓋掉了
(複習, MBR是硬碟的第一個sector, 含512 bytes)
(boot loader的first stage佔446 bytes)
(partition table佔64 bytes)
重開機後, 會發現一下就出現錯誤訊息了
有史以來最快錯誤訊息~
使用DVD光碟進入rescue mode後
chroot /mnt/sysimage
grub-install /dev/sda
重開機就搞定啦^^
想備份partition table的話
sfdisk -d /dev/sda > backup-file
不過日後怎麼使用我不知道耶
想備份整個MBR的話
dd if=/dev/sda of=mbr-backup bs=512 count=1
同樣的, 日後怎麼使用我不知道耶^^
先作以下步驟
dd if=/dev/zero of=/dev/sda bs=256 count=1
好, MBR的前一半被洗掉了^^
注意, 那個256應該是可以換掉, 但別把partition table也蓋掉了
(複習, MBR是硬碟的第一個sector, 含512 bytes)
(boot loader的first stage佔446 bytes)
(partition table佔64 bytes)
重開機後, 會發現一下就出現錯誤訊息了
有史以來最快錯誤訊息~
使用DVD光碟進入rescue mode後
chroot /mnt/sysimage
grub-install /dev/sda
重開機就搞定啦^^
想備份partition table的話
sfdisk -d /dev/sda > backup-file
不過日後怎麼使用我不知道耶
想備份整個MBR的話
dd if=/dev/sda of=mbr-backup bs=512 count=1
同樣的, 日後怎麼使用我不知道耶^^
mount壞掉導致無法正常開機
給未來的裕翔
如果/bin/mount壞掉了
你就完了!
不過放心, 有我在^^
拿出DVD安裝光碟, 進入rescue mode
CD的沒有這功能喔~
憑小小的大腦勾選幾個選項後進入shell
書上說重裝rpm, 不過我不知道怎麼從光碟抽出來耶
也不像教室環境那樣有人架好NFS讓我使用rpm
就在我稍稍緊張之時!
我想到從當下的mount取代我原來壞掉的mount^^ !!!
要注意的是, rescue mode的mount不在/bin裡面
用which mount查看後, 在/usr/bin/裡
cp /usr/bin/mount /mnt/sysimage/bin
然後重開機就可以^^
如果/bin/mount壞掉了
你就完了!
不過放心, 有我在^^
拿出DVD安裝光碟, 進入rescue mode
CD的沒有這功能喔~
憑小小的大腦勾選幾個選項後進入shell
書上說重裝rpm, 不過我不知道怎麼從光碟抽出來耶
也不像教室環境那樣有人架好NFS讓我使用rpm
就在我稍稍緊張之時!
我想到從當下的mount取代我原來壞掉的mount^^ !!!
要注意的是, rescue mode的mount不在/bin裡面
用which mount查看後, 在/usr/bin/裡
cp /usr/bin/mount /mnt/sysimage/bin
然後重開機就可以^^
Wednesday, August 11, 2010
觀察某台機器對我機器的連線
給未來的裕翔
/proc/net/nf_conntrack裡面紀錄一些連線的資訊
似乎是隨時更新, 不確定是不是一直append
如果我要觀察140.114.28.18x對我的連線
每一秒更新最新狀態
watch -n1 'grep 140.114.28.18x /proc/net/nf_conntrack'
/proc/net/nf_conntrack裡面紀錄一些連線的資訊
似乎是隨時更新, 不確定是不是一直append
如果我要觀察140.114.28.18x對我的連線
每一秒更新最新狀態
watch -n1 'grep 140.114.28.18x /proc/net/nf_conntrack'
dovecot的mail_location?
給未來的裕翔
dovecot架好後, 開放imaps和pop3s
然後在iptables開啟相對應的port之後(可查/etc/services)
selinux不需要設定
tcp_wrapper不需要設定
本來可以連成功的, 一般使用者
可是! 不知怎搞的
吃個飯回來就連不到了
錯誤訊息如下
mail_location not set and autodetection failed: Mail storage autodetection failed with ......
去查一下後
把/etc/dovecot.conf裡面新增一行
mail_location = mbox:~/mail:INBOX=/var/mail/%u
不用擔心記不起來, 因為這是dovecot.conf裡面的example
直接用即可
這樣就可以了^^
另外, 如果要自製憑證
make -C /etc/pki/tls/certs
填完資料後, 憑證會產生在/etc/pki/tls/certs
權限是只有root可以讀
不過書上說沒關係(有講理由但我不懂)
接著修改dovecot.conf如, 搞定~
96 ssl_cert_file = /etc/pki/tls/certs/dovecot.pem 97 ssl_key_file = /etc/pki/tls/certs/dovecot.pem
dovecot架好後, 開放imaps和pop3s
然後在iptables開啟相對應的port之後(可查/etc/services)
selinux不需要設定
tcp_wrapper不需要設定
本來可以連成功的, 一般使用者
可是! 不知怎搞的
吃個飯回來就連不到了
錯誤訊息如下
mail_location not set and autodetection failed: Mail storage autodetection failed with ......
去查一下後
把/etc/dovecot.conf裡面新增一行
mail_location = mbox:~/mail:INBOX=/var/mail/%u
不用擔心記不起來, 因為這是dovecot.conf裡面的example
直接用即可
這樣就可以了^^
另外, 如果要自製憑證
make -C /etc/pki/tls/certs
填完資料後, 憑證會產生在/etc/pki/tls/certs
權限是只有root可以讀
不過書上說沒關係(有講理由但我不懂)
接著修改dovecot.conf如, 搞定~
ssl_cert_file = /etc/pki/tls/certs/dovecot.pem
ssl_key_file = /etc/pki/tls/certs/dovecot.pem
96 ssl_cert_file = /etc/pki/tls/certs/dovecot.pem 97 ssl_key_file = /etc/pki/tls/certs/dovecot.pem
最近架samba筆記
給未來的裕翔
如果要架一個分享給大家的資料夾
但只開放某個group去新增或是移除檔案
/etc/hosts.allow不需要修改
iptables開啟, 137, 138, 139, 445
把要分享出去的資料夾context設為public_content_rw_t
並且把allow_smbd_anon_write設為1
然後特別注意smb.conf裡面的
read only = yes
write list = @allow-group
這樣設定就是大家都只能讀, 除了某個被我允許的group可以增減檔案
還有create mask = 0664
這設定是在預設產生檔案的mask, 跟umask不一樣喔
直接標明檔案產生的權限
那至於使用者可否讀寫檔案, 就直接跟檔案權限有關系
((
光這樣設定, 在client端使用smbclient -U lulumi //smb-server/shared-dir
會出現錯誤訊息
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
把selinux關掉後就正常, 那就是有個神秘的boolean或是context需要改囉!
這兩個任一個都可以解決問題
client端要注意一下
能不能下載檔案, 跟檔案本身權限(r)有關
能不能上傳檔案, 跟資料夾本身權限(w)有關
其他要注意的有~ gid和sticky bit最好開啟
新增使用者samba密碼的話, 用smbpasswd -a user
-a是add
使用者只需要存在server端即可, client端要登入時要-U指明即可
那些使用者也不需要login shell, 給予/sbin/nologin即可
如果要架一個分享給大家的資料夾
但只開放某個group去新增或是移除檔案
/etc/hosts.allow不需要修改
iptables開啟, 137, 138, 139, 445
把要分享出去的資料夾context設為public_content_rw_t
並且把allow_smbd_anon_write設為1
然後特別注意smb.conf裡面的
read only = yes
write list = @allow-group
這樣設定就是大家都只能讀, 除了某個被我允許的group可以增減檔案
還有create mask = 0664
這設定是在預設產生檔案的mask, 跟umask不一樣喔
直接標明檔案產生的權限
那至於使用者可否讀寫檔案, 就直接跟檔案權限有關系
((
光這樣設定, 在client端使用smbclient -U lulumi //smb-server/shared-dir
會出現錯誤訊息
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
把selinux關掉後就正常, 那就是有個神秘的boolean或是context需要改囉!
sudo setsebool samba_export_all_ro 1
sudo setsebool samba_export_all_rw 1
這兩個任一個都可以解決問題
client端要注意一下
能不能下載檔案, 跟檔案本身權限(r)有關
能不能上傳檔案, 跟資料夾本身權限(w)有關
其他要注意的有~ gid和sticky bit最好開啟
新增使用者samba密碼的話, 用smbpasswd -a user
-a是add
使用者只需要存在server端即可, client端要登入時要-U指明即可
那些使用者也不需要login shell, 給予/sbin/nologin即可
Tuesday, August 10, 2010
查看一個selinux boolean的存取限制
給未來的裕翔
如果要看一個selinux boolean的功能
man -k selinux | grep your-service-keyword
那如果要看它的存取限制呢
也就是說, 現在, 我想知道
當某個boolean設立之後
某種context的process能對file有何存取能力?
舉例來說, 當allow_smbd_anon_write設成on後
那些具有smbd_t的process, 能對檔案作什麼動作?
sesearch --allow -s smbd_t -c file -b allow_smbd_anon_write
--allow 找allow的rules
-s source
-c class
-b bool
如果要看一個selinux boolean的功能
man -k selinux | grep your-service-keyword
那如果要看它的存取限制呢
也就是說, 現在, 我想知道
當某個boolean設立之後
某種context的process能對file有何存取能力?
舉例來說, 當allow_smbd_anon_write設成on後
那些具有smbd_t的process, 能對檔案作什麼動作?
sesearch --allow -s smbd_t -c file -b allow_smbd_anon_write
--allow 找allow的rules
-s source
-c class
-b bool
samba_share_t v.s. public_content_rw_t
給未來的裕翔
書上說
如果我要開放一個samba服務
分享的資料夾看是要context改成samba_share_t
或是改成public_content_rw_t並且allow_smbd_anon_write設為on
那怎不乾脆設為samba_share_t就好呢?
因為就只能分享給samba
如果有其他服務可能會存取這個資料夾
那就會是public_content_rw_t會比較適當
附註: 同樣是允許寫入, 架nfs時好像沒有改context和boolean耶
書上說
如果我要開放一個samba服務
分享的資料夾看是要context改成samba_share_t
或是改成public_content_rw_t並且allow_smbd_anon_write設為on
那怎不乾脆設為samba_share_t就好呢?
因為就只能分享給samba
如果有其他服務可能會存取這個資料夾
那就會是public_content_rw_t會比較適當
附註: 同樣是允許寫入, 架nfs時好像沒有改context和boolean耶
錯誤訊息: clnt_create: RPC: Authentication error
給未來的裕翔
如果當使用showmount -e localhost時看到這訊息
記得在/etc/hosts.allow裡面加rpcbind:ALL
搞定^^
不過加完後變成新的錯誤訊息
clnt_create: RPC: Program not registered
搞不定^^"
後記: 重啟nfs就可以了
不過發生一個小問題, client端可以正常掛載
但是真要編輯掛載過來的檔案, 一開始呈現當掉狀態...
過一會(不到五分鐘), 才看似正常
如果當使用showmount -e localhost時看到這訊息
記得在/etc/hosts.allow裡面加rpcbind:ALL
搞定^^
不過加完後變成新的錯誤訊息
clnt_create: RPC: Program not registered
搞不定^^"
後記: 重啟nfs就可以了
不過發生一個小問題, client端可以正常掛載
但是真要編輯掛載過來的檔案, 一開始呈現當掉狀態...
過一會(不到五分鐘), 才看似正常
ftp架設完整筆記
給未來的裕翔
vsftpd架設大概是RHCE裡牽扯到最多雜物的吧
如果現在想要架設一個ftp server
可以讓anonymous上傳檔案到特定資料夾
但不能讓anonymous下載
甚至不讓anonymous看到裡面有什麼
那我要做的設定selinux(context and bool), tcp_wrappers, iptables, permission
先講permision的部份
首先在/var/ftp新增上傳資料夾, ex: upload
然後改變它的mode為730, group為ftp
這樣ftp就可以進入該資料(x)夾並寫入檔案(w)
不過看不到自己上傳啥, 或是別人上傳啥
但好像還是有機會可以瞎猜檔名嘗試下載? 沒真的去試
所以還需要修改檔案上傳後的權限
在iptables方面, 開tcp的port 21
在tcp_wrappers方面, allow vsftpd
vsftpd架設大概是RHCE裡牽扯到最多雜物的吧
如果現在想要架設一個ftp server
可以讓anonymous上傳檔案到特定資料夾
但不能讓anonymous下載
甚至不讓anonymous看到裡面有什麼
那我要做的設定selinux(context and bool), tcp_wrappers, iptables, permission
先講permision的部份
首先在/var/ftp新增上傳資料夾, ex: upload
然後改變它的mode為730, group為ftp
這樣ftp就可以進入該資料(x)夾並寫入檔案(w)
不過看不到自己上傳啥, 或是別人上傳啥
但好像還是有機會可以瞎猜檔名嘗試下載? 沒真的去試
所以還需要修改檔案上傳後的權限
在iptables方面, 開tcp的port 21
在tcp_wrappers方面, allow vsftpd
Sunday, August 8, 2010
最近架nfs server的筆記
給未來的裕翔
最近重新架了nfs server
發現一件事
hosts.allow不需要設定耶!?
不過iptables還是要tcp的111(rpcbind)和2049(nfs)
selinux似乎也不需要改什麼
然後, nfs的預設就有root squash
後記: 也許是因為我多了service nfslock start
最近重新架了nfs server
發現一件事
hosts.allow不需要設定耶!?
不過iptables還是要tcp的111(rpcbind)和2049(nfs)
selinux似乎也不需要改什麼
然後, nfs的預設就有root squash
後記: 也許是因為我多了service nfslock start
java的mouse event的clicked和released的差別?
給未來的裕翔
距離當初問博班java問題也差不多兩週年了
"把那看懂你就會了"
我得到的不是答案是真理
我遇到的不是貴人是垃圾
回正題
單純按滑鼠後放開, 那叫Clicked
按滑鼠後拖曳再放開, 那叫Released
距離當初問博班java問題也差不多兩週年了
"把那看懂你就會了"
我得到的不是答案是真理
我遇到的不是貴人是垃圾
回正題
單純按滑鼠後放開, 那叫Clicked
按滑鼠後拖曳再放開, 那叫Released
nfs一直Stale NFS file handle
給未來的裕翔
當我在client端掛載nfs後
在server重新整啟nfs
這時client只要對那nfs掛載點作任何事情
都會產生"Stale NFS file handle"錯誤訊息
這時我在client端可以sudo umount -f /your/nfs/mount/point
當我在client端掛載nfs後
在server重新整啟nfs
這時client只要對那nfs掛載點作任何事情
都會產生"Stale NFS file handle"錯誤訊息
這時我在client端可以sudo umount -f /your/nfs/mount/point
Saturday, August 7, 2010
vi裡讀進man的結果
給未來的裕翔
剛看到一個範例
以vi開啟某個檔案
想要讀取man ls的資料
假設我只要含有ls的那幾行
可以在vi底下打
:r !man ls | grep ls
酷耶, 不過讀進一堆^H
不知那是啥
也不知道如何替換掉
剛看到一個範例
以vi開啟某個檔案
想要讀取man ls的資料
假設我只要含有ls的那幾行
可以在vi底下打
:r !man ls | grep ls
酷耶, 不過讀進一堆^H
不知那是啥
也不知道如何替換掉
以使用者身份登入lftp
給未來的裕翔
lftp是一個連到ftp server的工具
所以server開啟vsftpd即可
不用擅自猜測可能有xinetd控管的lftp
以anonymous身份使用的話
直接lftp ftp-server即可
如果想以popoya身份登入
lftp ftp-server -u popoya
雖然vsftpd.conf預設允許這樣做(local_enable=YES)
但是selinux不允許
必須setsebool -P ftp_home_dir on才行
基於安全, 建議不開放使用者登入
(因為密碼是明碼傳送)
所以vsftpd.conf的local_enable要設為NO
剛設為on的selinux也要記得改為off
提醒: 要成功架ftp server的話
/etc/sysconfig/iptables的tcp要開放21
/etc/ssyconfig/iptables-config的IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
/etc/hosts.allow要vsftpd:ALL
lftp是一個連到ftp server的工具
所以server開啟vsftpd即可
不用擅自猜測可能有xinetd控管的lftp
以anonymous身份使用的話
直接lftp ftp-server即可
如果想以popoya身份登入
lftp ftp-server -u popoya
雖然vsftpd.conf預設允許這樣做(local_enable=YES)
但是selinux不允許
必須setsebool -P ftp_home_dir on才行
基於安全, 建議不開放使用者登入
(因為密碼是明碼傳送)
所以vsftpd.conf的local_enable要設為NO
剛設為on的selinux也要記得改為off
提醒: 要成功架ftp server的話
/etc/sysconfig/iptables的tcp要開放21
/etc/ssyconfig/iptables-config的IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
/etc/hosts.allow要vsftpd:ALL
對某台dns server進行norecurse查詢
給未來的裕翔
如果我要查一個zone, ex: aaa.bbb.com
向某台dns server查詢, ex: my.dns.server
dig +nocurse aaa.bbb.com @my.dns.server
那個+nocurse的意思可以想成
不准my.dns.server去問別人
不知道就是不知道^^
不知道就會fail
假設它預設不會知道, 但卻沒fail?
那可能是cache有答案
cache的答案可用rndc flush清除
如果我要查一個zone, ex: aaa.bbb.com
向某台dns server查詢, ex: my.dns.server
dig +nocurse aaa.bbb.com @my.dns.server
那個+nocurse的意思可以想成
不准my.dns.server去問別人
不知道就是不知道^^
不知道就會fail
假設它預設不會知道, 但卻沒fail?
那可能是cache有答案
cache的答案可用rndc flush清除
測試master DNS server是否允許zone-transfer
給未來的裕翔
雖然我沒要架slave DNS server
以下指令我也沒真的去測試
不過先把看到的記下來
之後有問題就可以直接搜尋筆記了
假設有一台DNS server的ip是111.222.222.111
它負責lulumi.com網域
那我要測試它是否有對我這台機器開放zone transfer
dig -t axfr lulumi.com @111.222.222.111
-t是type
axfr是一個mechanism的名稱, 不是四個參數
或是使用指令host
host -l lulumi.com
dig也可不加那個@111.222.222.111
有加的話應該是問"111.222.222.111有否提供lulumi.com的zone transfer?"
沒加的話應該是問"是否有誰提供lulumi.com的zone transfer?"
host要加@111.222.222.111的話, 我還不確定語法上要怎麼加
沒看到範例
雖然我沒要架slave DNS server
以下指令我也沒真的去測試
不過先把看到的記下來
之後有問題就可以直接搜尋筆記了
假設有一台DNS server的ip是111.222.222.111
它負責lulumi.com網域
那我要測試它是否有對我這台機器開放zone transfer
dig -t axfr lulumi.com @111.222.222.111
-t是type
axfr是一個mechanism的名稱, 不是四個參數
或是使用指令host
host -l lulumi.com
dig也可不加那個@111.222.222.111
有加的話應該是問"111.222.222.111有否提供lulumi.com的zone transfer?"
沒加的話應該是問"是否有誰提供lulumi.com的zone transfer?"
host要加@111.222.222.111的話, 我還不確定語法上要怎麼加
沒看到範例
喔喔喔! dig的recurse和trace!!!
給未來的裕翔
雖然之前解釋過recursive和iterative查詢
不過有些觀念還不是很清楚
當我想看查詢的過程, 要加+trace
可是我man dig時, 它說recurse這bit是預設set的
不過當使用+trace的話, recurse的bit就會被disable
嗯嗯! 怎會這樣? 當我想看它遞迴查詢的過程, 居然會disable那個recurse的bit!!!
難道, +trace顯示出來的不是recurse?
想了又想, 以下是我的設想:
我是client, 我有架一台dns server, 然後有設定forwarders
當我平常dig時, 我跟dns server說"幫我查"
於是dns server去跟它的forwarders說"幫我client作recursive查詢"
然後forwarders回傳dns server一個結果, dns server也回傳我一個結果
ok, 很合理
而當我使用+trace時, 它給我查詢的過程
我一樣對dns server說"親愛的 幫我查"
而這時dns server心花怒放^^
對forwarders說"幫我一個小忙, 請問哪邊可以查到這答案"
forwarders回我的dns server一個地址
於是dns server再去那個地址問"幫我一個小忙, 請問哪邊可以查到這答案"
這樣一路問下去, dns server終於幫我搞定我要問的了
對dns server而言, 它的行為是iterative
所以我在想, 當我使用+trace時, recurse的bit被disable
就是因為對我的dns server而言, 他是一個個iterative去查的
所以平常講的recursive和iterative, 都是指dns server和forwarders之間的查詢方式!?
簡單說來, recursive查詢就是我請對方幫我搞定
iterative查詢就是我請對方告訴我一個方向
以上, 個人猜測^^"
ref: http://dns-learning.twnic.net.tw/dns/03opDNS.html
雖然之前解釋過recursive和iterative查詢
不過有些觀念還不是很清楚
當我想看查詢的過程, 要加+trace
可是我man dig時, 它說recurse這bit是預設set的
不過當使用+trace的話, recurse的bit就會被disable
嗯嗯! 怎會這樣? 當我想看它遞迴查詢的過程, 居然會disable那個recurse的bit!!!
難道, +trace顯示出來的不是recurse?
想了又想, 以下是我的設想:
我是client, 我有架一台dns server, 然後有設定forwarders
當我平常dig時, 我跟dns server說"幫我查"
於是dns server去跟它的forwarders說"幫我client作recursive查詢"
然後forwarders回傳dns server一個結果, dns server也回傳我一個結果
ok, 很合理
而當我使用+trace時, 它給我查詢的過程
我一樣對dns server說"親愛的 幫我查"
而這時dns server心花怒放^^
對forwarders說"幫我一個小忙, 請問哪邊可以查到這答案"
forwarders回我的dns server一個地址
於是dns server再去那個地址問"幫我一個小忙, 請問哪邊可以查到這答案"
這樣一路問下去, dns server終於幫我搞定我要問的了
對dns server而言, 它的行為是iterative
所以我在想, 當我使用+trace時, recurse的bit被disable
就是因為對我的dns server而言, 他是一個個iterative去查的
所以平常講的recursive和iterative, 都是指dns server和forwarders之間的查詢方式!?
簡單說來, recursive查詢就是我請對方幫我搞定
iterative查詢就是我請對方告訴我一個方向
以上, 個人猜測^^"
ref: http://dns-learning.twnic.net.tw/dns/03opDNS.html
selinux的restorecon根據
給未來的裕翔
當以restorecon對某個檔案或目錄進行恢復context時
它是以根據的
可用semanage fcontext -l來看那些根據, ex:
今天如果我把/var/www/html的index.html複製到別的資料夾去, ex: /se-test
如果直接cp, 的context會變成:
unconfined_u:object_r:default_t:s0
如果用cp -a, 它的context會跟原本一樣:
unconfined_u:object_r:httpd_sys_content_t:s0
而那個/se-test是自己隨便建立的, context是
unconfined_u:object_r:default_t:s0
所以, 當我對裡面的檔案進行restorecon
index.html也只會變成unconfined_u:object_r:default_t:s0
不會變成unconfined_u:object_r:httpd_sys_content_t:s0
除了我手動chcon -t httpd_sys_content_t index.html
有辦法讓它(/se-test)預設就是httpd_sys_content_t嗎?
可以呦~^^
新增一個restorecon的根據
semanage fcontext -a -t httpd_sys_content_t '/se-test(/.*)?'
-a是add
-t是type
'/se-test(/.*)?'是什麼呢! 是什麼呢? 有誰知道是什麼嗎?
總之, restorecon的根據建立完成^^
之後對/se-test或裡面檔案進行restorecon就會變成
httpd_sys_content_t
當以restorecon對某個檔案或目錄進行恢復context時
它是以根據的
可用semanage fcontext -l來看那些根據, ex:
/var/www/nut-cgi-bin/upsstats\.cgi regular file system_u:object_r:httpd_nutups_cgi_script_exec_t:s0
/var/www/perl(/.*)? all files system_u:object_r:httpd_sys_script_exec_t:s0
/var/www/svn(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
今天如果我把/var/www/html的index.html複製到別的資料夾去, ex: /se-test
如果直接cp, 的context會變成:
unconfined_u:object_r:default_t:s0
如果用cp -a, 它的context會跟原本一樣:
unconfined_u:object_r:httpd_sys_content_t:s0
而那個/se-test是自己隨便建立的, context是
unconfined_u:object_r:default_t:s0
所以, 當我對裡面的檔案進行restorecon
index.html也只會變成unconfined_u:object_r:default_t:s0
不會變成unconfined_u:object_r:httpd_sys_content_t:s0
除了我手動chcon -t httpd_sys_content_t index.html
有辦法讓它(/se-test)預設就是httpd_sys_content_t嗎?
可以呦~^^
新增一個restorecon的根據
semanage fcontext -a -t httpd_sys_content_t '/se-test(/.*)?'
-a是add
-t是type
'/se-test(/.*)?'是什麼呢! 是什麼呢? 有誰知道是什麼嗎?
總之, restorecon的根據建立完成^^
之後對/se-test或裡面檔案進行restorecon就會變成
httpd_sys_content_t
一些關於htaccess的筆記
給未來的裕翔
如果要用htaccess的話
先作兩個動作
在首頁資料夾底下新增.htaccess
裡面有四個設定要記一下
打岔一下, authName也可以, Require也可以, 大小寫似乎都可以?
接著去設定
基本設定這樣就可以了
接下來就是新增帳密問題
帳號不一定要存在http server上, 就算存在密碼也可以隨便設
htpasswd -c /your/.htpasswd-yyy/location amy
htpasswd /your/.htpasswd-yyy/location boby
每建一個使用者就同時設定密碼
只有第一次需要-c, 第二次也-c的話, 第一次設定的就不見了
設定完後不需要重啟httpd
使用瀏覽器測試時, 就可以看到它要求輸入帳密
一旦輸入後, 之後無論在瀏覽器怎樣重新整理都不需要再輸入了
如果新增帳密要測試的話
建議重啟瀏覽器
有點小成就感^^
如果要用htaccess的話
先作兩個動作
在首頁資料夾底下新增.htaccess
裡面有四個設定要記一下
AuthName "xxxxxx" # xxxxxx隨便打, 記得有雙引號就好
AuthType Basic
AuthUserFile /your/.htpasswd-yyy/location
require valid-user
打岔一下, authName也可以, Require也可以, 大小寫似乎都可以?
接著去設定
AllowOverride AuthConfig
基本設定這樣就可以了
接下來就是新增帳密問題
帳號不一定要存在http server上, 就算存在密碼也可以隨便設
htpasswd -c /your/.htpasswd-yyy/location amy
htpasswd /your/.htpasswd-yyy/location boby
每建一個使用者就同時設定密碼
只有第一次需要-c, 第二次也-c的話, 第一次設定的就不見了
設定完後不需要重啟httpd
使用瀏覽器測試時, 就可以看到它要求輸入帳密
一旦輸入後, 之後無論在瀏覽器怎樣重新整理都不需要再輸入了
如果新增帳密要測試的話
建議重啟瀏覽器
有點小成就感^^
Friday, August 6, 2010
squid的allow和deny有順序性
給未來的裕翔
在squid server端
如果我在/etc/squid/squid.conf裡面允許140.114.28.0/24使用
卻不准它去瀏覽.yahoo.com的話
應該要這樣寫
如果先允許allow_group再拒絕deny_dst
那當我client使用該squid server時
一旦比對到allow_group就放行了
不會再比對下去
所以順序很重要!
另外, 擋成功的話, client會看到網頁左上角有烏賊的圖示
在squid server端
如果我在/etc/squid/squid.conf裡面允許140.114.28.0/24使用
卻不准它去瀏覽.yahoo.com的話
應該要這樣寫
acl deny_dst dstdomain .yahoo.com
http_access deny deny_dst
acl allow_group src 140.114.28.0/24
http_access allow allow_group
如果先允許allow_group再拒絕deny_dst
那當我client使用該squid server時
一旦比對到allow_group就放行了
不會再比對下去
所以順序很重要!
另外, 擋成功的話, client會看到網頁左上角有烏賊的圖示
Thursday, August 5, 2010
請問: sudo vim是看誰的.vimrc?
給未來的裕翔
請問~~~(威哥式問法)
當我使用sudo vim filename時
它看的.vimrc是誰的?
root? sudoer?
答: sudoer^^
請問~~~(威哥式問法)
當我使用sudo vim filename時
它看的.vimrc是誰的?
root? sudoer?
答: sudoer^^
named.conf的listen-on port 53
給未來的裕翔
這次憑印象建立重建DNS server
失敗~^^
不過就一個DNS server, 每次都能失敗其實也該頒給我獎狀...
好在有筆記^^
我就不信每次都會遇到新問題~
原來是我named.conf裡面的listen-on port 53忘記加DNS server本身的ip
加了以後就可以了
以前對於這點很納悶, 127.0.0.1不就是本身的ip嗎?
現在我在猜
那ip代表interface嗎? 是的話就解釋的通了
127.0.0.1代表lo
而DNS server的真實ip代表eth0
就當是這樣吧^^
這次憑印象建立重建DNS server
失敗~^^
不過就一個DNS server, 每次都能失敗其實也該頒給我獎狀...
好在有筆記^^
我就不信每次都會遇到新問題~
原來是我named.conf裡面的listen-on port 53忘記加DNS server本身的ip
加了以後就可以了
以前對於這點很納悶, 127.0.0.1不就是本身的ip嗎?
現在我在猜
那ip代表interface嗎? 是的話就解釋的通了
127.0.0.1代表lo
而DNS server的真實ip代表eth0
就當是這樣吧^^
Wednesday, August 4, 2010
cp來源和目標同位置的話?
給未來的裕翔
沒想到cp有個小技巧
當我對/etc/sysconfig/iptables作備份時
如果備份成/etc/sysconfig/iptables.bak
我都是cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
不然了不起一點就是先cd /etc/sysconfig
cp iptables iptables.bak
剛發現
其實我可以直接
cp /etc/sysconfig/iptables{,.bak}
這跟touch file{1,2,3}的道理是一樣的
會變成touch file1 file2 file3, 它們數字在指令裡是以逗號隔開
同理/etc/sysconfig/iptables{,.bak}
因為逗號前面沒東西, 所以展開是/etc/sysconfig/iptables
而逗號後面是.bak, 展開變成/etc/sysconfig/iptables.bak
如同touch file1 file2 file3
我的cp指令變成
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
帥!
沒想到cp有個小技巧
當我對/etc/sysconfig/iptables作備份時
如果備份成/etc/sysconfig/iptables.bak
我都是cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
不然了不起一點就是先cd /etc/sysconfig
cp iptables iptables.bak
剛發現
其實我可以直接
cp /etc/sysconfig/iptables{,.bak}
這跟touch file{1,2,3}的道理是一樣的
會變成touch file1 file2 file3, 它們數字在指令裡是以逗號隔開
同理/etc/sysconfig/iptables{,.bak}
因為逗號前面沒東西, 所以展開是/etc/sysconfig/iptables
而逗號後面是.bak, 展開變成/etc/sysconfig/iptables.bak
如同touch file1 file2 file3
我的cp指令變成
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
帥!
hosts.allow的spawn
給未來的裕翔
hosts.allow和hosts.deny本來是一道防線
有類似的設定sshd : 140.114.28.
如果在限制連線的同時希望有所動作
ex: 連進來的都紀錄到log
我們可以寫成
sshd : 140.114.28. : spawn $(date) %c %d >> /your/log/location
這樣可以紀錄日期, client, daemon
或是直接藉由logger工具
sshd : 140.114.28. : spawn logger %c %d
因為logger會自動紀錄日期, 所以不再另外標
其他的%, 可man hosts.allow查閱
hosts.allow和hosts.deny本來是一道防線
有類似的設定sshd : 140.114.28.
如果在限制連線的同時希望有所動作
ex: 連進來的都紀錄到log
我們可以寫成
sshd : 140.114.28. : spawn $(date) %c %d >> /your/log/location
這樣可以紀錄日期, client, daemon
或是直接藉由logger工具
sshd : 140.114.28. : spawn logger %c %d
因為logger會自動紀錄日期, 所以不再另外標
其他的%, 可man hosts.allow查閱
ftp如果permission denied?
給未來的裕翔
如果哪天使用ftp下載東西時
遇到permission denied的話
也許可以先檢查一下自己的CWD是不是有權限寫入......
這是我用tftp遇到的問題(雖然沒有下成功)
不過還是歸類到vsftpd好了
如果哪天使用ftp下載東西時
遇到permission denied的話
也許可以先檢查一下自己的CWD是不是有權限寫入......
這是我用tftp遇到的問題(雖然沒有下成功)
不過還是歸類到vsftpd好了
enable那些被xinetd控管的程式
給未來的裕翔
假設我要修改tftp的disable為no
我必須sudo vim /etc/xinetd.d/tftp
有個更方便的方法
sudo chkconfig tftp on
突然想起鳥哥好像有講過^^"
假設我要修改tftp的disable為no
我必須sudo vim /etc/xinetd.d/tftp
有個更方便的方法
sudo chkconfig tftp on
突然想起鳥哥好像有講過^^"
iptables-save
給未來的裕翔
iptables-save > /etc/sysconfig/iptables和service iptables save
都是把當下的規則存到/etc/sysconfig/iptables
很明顯的, service iptables save比較簡短^^
打個岔
iptables -F的當下馬上生效
因為我馬上無法操作
還有iptables -F清的是RULE
我新增的chain不會被清掉
iptables-save > /etc/sysconfig/iptables和service iptables save
都是把當下的規則存到/etc/sysconfig/iptables
很明顯的, service iptables save比較簡短^^
打個岔
iptables -F的當下馬上生效
因為我馬上無法操作
還有iptables -F清的是RULE
我新增的chain不會被清掉
遠端修改iptables注意事項
給未來的裕翔
遠端修改iptables時
最好不要輕易sudo service iptables restart
我把iptables清空後, INPUT的policy改為DROP
重新啟動後就突然斷線了
是沒有顯示啦, PS1依然顯示我在server
不過操作就不能動了
我在猜, 是因為ssh那條規則被我移除掉了?
還是那個ESTABLISHED,RELATED?
再來就是, 我直接跑去server上操作
結果ssh原來的client和ping外面主機都沒結果
不知道依舊是那ESTABLISHED,RELATED?
還是icmp的規則尚未增加?
先記下來供以後釐清
(沒有以後了!!!)
遠端修改iptables時
最好不要輕易sudo service iptables restart
我把iptables清空後, INPUT的policy改為DROP
重新啟動後就突然斷線了
是沒有顯示啦, PS1依然顯示我在server
不過操作就不能動了
我在猜, 是因為ssh那條規則被我移除掉了?
還是那個ESTABLISHED,RELATED?
再來就是, 我直接跑去server上操作
結果ssh原來的client和ping外面主機都沒結果
不知道依舊是那ESTABLISHED,RELATED?
還是icmp的規則尚未增加?
先記下來供以後釐清
(沒有以後了!!!)
ps查process的context資訊
給未來的裕翔
除了file有context, 程序也是有的
當被問如和看ntpd的context時
很得意的key出以下指令^^
ps Z `pidof ntpd`
後來發現ps可以直接對process名稱進行處理
ps Z -C ntpd
這兩個印出的資訊會一樣
再來就是, 參考答案給ps -ZC ntpd
由於-Z在ps help裡面是沒有的
因此我偏向使用上面第二個
ps Z -C ntpd
除了file有context, 程序也是有的
當被問如和看ntpd的context時
很得意的key出以下指令^^
ps Z `pidof ntpd`
後來發現ps可以直接對process名稱進行處理
ps Z -C ntpd
這兩個印出的資訊會一樣
再來就是, 參考答案給ps -ZC ntpd
由於-Z在ps help裡面是沒有的
因此我偏向使用上面第二個
ps Z -C ntpd
md5sum, sha1sum, gpg
給未來的裕翔
簡介一下md5sum, sha1sum, 和gpg
md5sum和sha1sum是對檔案算hash, 然後驗證用
gpg才是對檔案加密用的
用法:
md5sum file
sha1sum file
如果想要比較兩個檔案的hash, 直接放在一起即可
md5sum file1 file2
sha1sum比照辦理^^
至於加密
gpg -c file
輸入加密密碼後會在current working directory(CWD)產生一個file.gpg
要解密的話
如果直接輸出到螢幕
gpg -d file.gpg
要另存新檔的話
gpg -o file2 -d file.gpg
簡介一下md5sum, sha1sum, 和gpg
md5sum和sha1sum是對檔案算hash, 然後驗證用
gpg才是對檔案加密用的
用法:
md5sum file
sha1sum file
如果想要比較兩個檔案的hash, 直接放在一起即可
md5sum file1 file2
sha1sum比照辦理^^
至於加密
gpg -c file
輸入加密密碼後會在current working directory(CWD)產生一個file.gpg
要解密的話
如果直接輸出到螢幕
gpg -d file.gpg
要另存新檔的話
gpg -o file2 -d file.gpg
ssh-agent的功能
給未來的裕翔
關於ssh-agent的功能
其實我不是很清楚......
直接打ssh-agent, 這樣算執行一次
eval $(ssh-agent), 這樣也算執行一次
此時用pidof ssh-agent
可以看到兩個pid
總之, 如果我要用ssh-add先取得我的密碼的話
ssh-agent就要先執行
直接打ssh-agent再ssh-add不行
非得eval $(ssh-agent)才可以
關於ssh-agent的功能
其實我不是很清楚......
直接打ssh-agent, 這樣算執行一次
eval $(ssh-agent), 這樣也算執行一次
此時用pidof ssh-agent
可以看到兩個pid
總之, 如果我要用ssh-add先取得我的密碼的話
ssh-agent就要先執行
直接打ssh-agent再ssh-add不行
非得eval $(ssh-agent)才可以
Tuesday, August 3, 2010
head指定不列出的行數
給未來的裕翔
head是拿來列出檔案開始的幾行的
預設十行
可用head -n 20改成列出20行
如果今天我想, 從頭列出到倒數第三行?
那就是最後兩行不列出
head -n -2
報告完畢
head是拿來列出檔案開始的幾行的
預設十行
可用head -n 20改成列出20行
如果今天我想, 從頭列出到倒數第三行?
那就是最後兩行不列出
head -n -2
報告完畢
首次嘗試rsync
給未來的裕翔
一直以來都懶的備份
一開始藉口是"等以後學linux再好好備份"
接下來藉口是"等我熟悉指令再好好備份"
終於, 沒藉口啦^^"
剛練習用一下rsync發現還不錯耶, 也常在網路上看到相關介紹
不過似乎都是連port 22?
以--port=###也無法改port的樣子
假設天命註定就port 22吧
我想把server端使用者lulumi的Desktop裡面所有檔案同步過來
rsync lulumi@rsync-server:Desktop/* .
注意那個 . 一開始沒看到真是搞死我
這樣只會複製檔案, 略過資料夾, 想連資料夾一起同步的話
rsync -r lulumi@rsync-server:Desktop/* .
至於server端的設定, 不需要特地設iptables也不需要修改/etc/hosts.allow
應該是ssh有通就可
缺點是要打密碼, 不過既然是用ssh通道, 應該可以改成無密碼的passphrase?
沒試過, 再說~
一直以來都懶的備份
一開始藉口是"等以後學linux再好好備份"
接下來藉口是"等我熟悉指令再好好備份"
終於, 沒藉口啦^^"
剛練習用一下rsync發現還不錯耶, 也常在網路上看到相關介紹
不過似乎都是連port 22?
以--port=###也無法改port的樣子
假設天命註定就port 22吧
我想把server端使用者lulumi的Desktop裡面所有檔案同步過來
rsync lulumi@rsync-server:Desktop/* .
注意那個 . 一開始沒看到真是搞死我
這樣只會複製檔案, 略過資料夾, 想連資料夾一起同步的話
rsync -r lulumi@rsync-server:Desktop/* .
至於server端的設定, 不需要特地設iptables也不需要修改/etc/hosts.allow
應該是ssh有通就可
缺點是要打密碼, 不過既然是用ssh通道, 應該可以改成無密碼的passphrase?
沒試過, 再說~
find的rm確認
給未來的裕翔
如果使用find
要針對找到的檔案進行刪除
刪除前要先經使用者確認
find xxxxxx -exec rm -i {} \;
有個更快的喔! 那個確認動作交給find來問
find xxxxxx -ok rm {} \;
如果使用find
要針對找到的檔案進行刪除
刪除前要先經使用者確認
find xxxxxx -exec rm -i {} \;
有個更快的喔! 那個確認動作交給find來問
find xxxxxx -ok rm {} \;
find的and和or
給未來的裕翔
這篇不是解答而是疑問
預設來講
find的每個expression是以and連接
需要or的話
可以-or或是-o
(補充, 需要not的話,可以-not或是 !)
今天我遇到一個問題
找出/底下owner非root, bin的檔案
find / -not -user root -not -user bin -ls 2> /dev/null
一開始我想錯了, 打成
find / -not -user root -or -not -user bin -ls 2> /dev/null
事後想想, 雖然想錯, 不過這指令應該print出更多結果才對阿!?
居然沒有, 而且結果似乎是錯的? 跟我想的完全不一樣!
有請未來的裕翔開導我^^
這篇不是解答而是疑問
預設來講
find的每個expression是以and連接
需要or的話
可以-or或是-o
(補充, 需要not的話,可以-not或是 !)
今天我遇到一個問題
找出/底下owner非root, bin的檔案
find / -not -user root -not -user bin -ls 2> /dev/null
一開始我想錯了, 打成
find / -not -user root -or -not -user bin -ls 2> /dev/null
事後想想, 雖然想錯, 不過這指令應該print出更多結果才對阿!?
居然沒有, 而且結果似乎是錯的? 跟我想的完全不一樣!
有請未來的裕翔開導我^^
crontab可以接受stdin耶!
給未來的裕翔
一般來說
可以 crontab -e 來編輯一個重複發生的事情
不過這樣就必須進入互動模式了
剛發現可以用pipe
echo 'command' | crontab
不過這只限第一次
如果要新增第二份工作
也用pipe的話
第一份工作會被覆蓋
一般來說
可以 crontab -e 來編輯一個重複發生的事情
不過這樣就必須進入互動模式了
剛發現可以用pipe
echo 'command' | crontab
不過這只限第一次
如果要新增第二份工作
也用pipe的話
第一份工作會被覆蓋
利用ps和tail找出最大咖程式
給未來的裕翔
如果要列出所有process
ps aux
output有它的format
如果我想要自訂format, ex: pid, process name, %cpu
ps axo pid,comm,pcpu
ps axo pid,comm,%cpu 也可, 不過會多按一個鍵^^
可以發現跟ps aux比起來
少一個u, 多一個o
o是option的意思, 指定後面format用
至於那個u, 我也不知道為什麼不見了, 不過加了會錯
這樣就以顯示我要的format, 接著是排序問題, 利用--sort選項
如果要以pcpu排序
ps axo pid,comm,pcpu --sort=pcpu
預設是increasing
ps axo pid,comm,pcpu --sort=pcpu
如果要decreasing
ps axo pid,comm,pcpu --sort=-pcpu
所以如果想知道最大咖的程式
ps axo pid,comm,pcpu --sort=pcpu | tail -n1
那 ps axo pid,comm,pcpu --sort=-pcpu | head -n1 可以嗎?
不行
因為這就是output:
PID COMMAND %CPU
這是header阿!
如果要列出所有process
ps aux
output有它的format
如果我想要自訂format, ex: pid, process name, %cpu
ps axo pid,comm,pcpu
ps axo pid,comm,%cpu 也可, 不過會多按一個鍵^^
可以發現跟ps aux比起來
少一個u, 多一個o
o是option的意思, 指定後面format用
至於那個u, 我也不知道為什麼不見了, 不過加了會錯
這樣就以顯示我要的format, 接著是排序問題, 利用--sort選項
如果要以pcpu排序
ps axo pid,comm,pcpu --sort=pcpu
預設是increasing
ps axo pid,comm,pcpu --sort=pcpu
如果要decreasing
ps axo pid,comm,pcpu --sort=-pcpu
所以如果想知道最大咖的程式
ps axo pid,comm,pcpu --sort=pcpu | tail -n1
那 ps axo pid,comm,pcpu --sort=-pcpu | head -n1 可以嗎?
不行
因為這就是output:
PID COMMAND %CPU
這是header阿!
Monday, August 2, 2010
java的警告: The serializable class RadioButtonFrame does not declare a static final serialVersionUID field of type long
給未來的裕翔
最近java練習到GUI部份後
都會出現這個警告
The serializable class RadioButtonFrame does not declare a static final serialVersionUID field of type long
想當初在eclipse時, 直接點一下它就幫我搞定了^^
現在用vim寫我還真不知道怎麼處理
一開始當然是人工忽略該警告
不過最近決定這樣不行, 要了解一下!
於是google到這篇
http://xray2005.javaeye.com/blog/196639
但我不知道他在說啥...
總之, 解決方案是在警告所在位置, 增加以下
最近java練習到GUI部份後
都會出現這個警告
The serializable class RadioButtonFrame does not declare a static final serialVersionUID field of type long
想當初在eclipse時, 直接點一下它就幫我搞定了^^
現在用vim寫我還真不知道怎麼處理
一開始當然是人工忽略該警告
不過最近決定這樣不行, 要了解一下!
於是google到這篇
http://xray2005.javaeye.com/blog/196639
但我不知道他在說啥...
總之, 解決方案是在警告所在位置, 增加以下
private static final long serialVersionUID = 1L;
搞定!
vim的.是重複行為 重複哪個行為?
給未來的裕翔
如果我現在想要修改/etc/logrotate.conf
ex: 把weekly換成daily
/etc/logrotate.conf裡面有兩個weekly
所以改完一個後, 要按Esc再按n
這時候會跳到第二個weekly
按.
就自動重複上一個改字的行為
把它變成daily
原本我還以為, 會重複那個n呢!
如果我現在想要修改/etc/logrotate.conf
ex: 把weekly換成daily
/etc/logrotate.conf裡面有兩個weekly
所以改完一個後, 要按Esc再按n
這時候會跳到第二個weekly
按.
就自動重複上一個改字的行為
把它變成daily
原本我還以為, 會重複那個n呢!
/etc/sudoers某行解釋
給未來的裕翔
在/etc/sudoers裡面
有一行是
root ALL=(ALL) ALL
它意思是允許root使用者
在任意的機器上
使用任意指令
以任意使用者身份
另外, sudo每次輸密碼的效力可以維持五分鐘
五分鐘內沒動作的話
重新sudo就要重輸密碼
在/etc/sudoers裡面
有一行是
root ALL=(ALL) ALL
它意思是允許root使用者
在任意的機器上
使用任意指令
以任意使用者身份
另外, sudo每次輸密碼的效力可以維持五分鐘
五分鐘內沒動作的話
重新sudo就要重輸密碼
cut的field幾行都可以
給未來的裕翔
如果想以cut抓取/etc/passwd的某幾行
ex: 1, 4, 7行
cut -d: -f1,3,7 /etc/passwd
這幾行中間還會自動以 : 隔開喔~
如果想以cut抓取/etc/passwd的某幾行
ex: 1, 4, 7行
cut -d: -f1,3,7 /etc/passwd
這幾行中間還會自動以 : 隔開喔~
aspell如果no list?
給未來的裕翔
如果使用aspell檢查錯字時
aspell list < file
顯示
Error: No word lists can be found for the language "en_US".
那就裝一下別的套件吧
sudo yum -y install aspell-en
搞定
如果使用aspell檢查錯字時
aspell list < file
顯示
Error: No word lists can be found for the language "en_US".
那就裝一下別的套件吧
sudo yum -y install aspell-en
搞定
tee的功能
給未來的裕翔
在pipe處理中
通常都是把上一個STDOUT當成STDIN處理後再把它STDOUT
看是要匯入檔案
或是再傳給下一個指令
可否同時達成?
xxx | tee filename | yyy
上面的意思是xxx把自己的STDOUT傳給tee後
tee產生兩個STDOUT(我也不知道這說法對不對...)
一個匯入檔案filename
一個當yyy的STDIN
報告完畢
在pipe處理中
通常都是把上一個STDOUT當成STDIN處理後再把它STDOUT
看是要匯入檔案
或是再傳給下一個指令
可否同時達成?
xxx | tee filename | yyy
上面的意思是xxx把自己的STDOUT傳給tee後
tee產生兩個STDOUT(我也不知道這說法對不對...)
一個匯入檔案filename
一個當yyy的STDIN
報告完畢
歷史命令混搭風
給未來的裕翔
當我執行某個動作
ex: cp xxxxxxxxxxxxxxxxxx
之後只要!cp
它就會去執行我最近以cp開頭的動作
至於$()則是跟` `一樣, 裡面的動作先執行
剛發現
可以 $(!cp) 耶!
混搭風阿!
不過不能 `!cp`
`` 裡面沒有替換動作的
當我執行某個動作
ex: cp xxxxxxxxxxxxxxxxxx
之後只要!cp
它就會去執行我最近以cp開頭的動作
至於$()則是跟` `一樣, 裡面的動作先執行
剛發現
可以 $(!cp) 耶!
混搭風阿!
不過不能 `!cp`
`` 裡面沒有替換動作的
Sunday, August 1, 2010
Saturday, July 31, 2010
android環境設定筆記
給未來的裕翔
其實我也有點忘光光了
不過至少在全忘掉之前多少寫一點
這就是累積阿!
首先下載android-sdk_r06-linux_86.tgz
解壓縮進入android-sdk-linux_86資料夾
然後tools/android update sdk來安裝sdk
安裝在android-sdk-linux_86資料夾裡
它建議以後升級或幹嘛的都利用它的manager
不要自己下載覆蓋貼上
再來是Eclipse要安裝adt
開啟Eclipse後, Help -> Install New Software
新增以下網址
https://dl-ssl.google.com/android/eclipse/
然後安裝它所提供的東西
重啟Eclipse之後, Window -> Preferences -> Android
把位置指定剛才的android-sdk-linux_86資料夾
然後Apply -> OK
( 赫然發現, 在Eclipse裡面, Window -> Android SDK and ADK Manager )
( 也可以叫出類似update manager的東西耶! 還是說是一樣的? 本來就有這功能? 還是哪時跑進去的? )
到此, 環境算是設定好了, 應該吧
其實我也有點忘光光了
不過至少在全忘掉之前多少寫一點
這就是累積阿!
首先下載android-sdk_r06-linux_86.tgz
解壓縮進入android-sdk-linux_86資料夾
然後tools/android update sdk來安裝sdk
安裝在android-sdk-linux_86資料夾裡
它建議以後升級或幹嘛的都利用它的manager
不要自己下載覆蓋貼上
再來是Eclipse要安裝adt
開啟Eclipse後, Help -> Install New Software
新增以下網址
https://dl-ssl.google.com/android/eclipse/
然後安裝它所提供的東西
重啟Eclipse之後, Window -> Preferences -> Android
把位置指定剛才的android-sdk-linux_86資料夾
然後Apply -> OK
( 赫然發現, 在Eclipse裡面, Window -> Android SDK and ADK Manager )
( 也可以叫出類似update manager的東西耶! 還是說是一樣的? 本來就有這功能? 還是哪時跑進去的? )
到此, 環境算是設定好了, 應該吧
Eclipse安裝ADT遇到問題
給未來的裕翔
我這次要提供的不是解法
而是禱告感謝神蹟
幾天前無法裝ADT
我真的不知道遇到什麼問題
幾天後, 就可以動了!!!!!! 該死!!!
到底是我重開Eclipse所以可以動?
還是我重開機?
還是因為我玩小遊戲贏了?
我做了一堆有的沒的
但Eclipse一直開在那沒管它
重開機後卻可以動, 這叫我怎麼知道哪步是關鍵步驟!
我這次要提供的不是解法
而是禱告感謝神蹟
幾天前無法裝ADT
我真的不知道遇到什麼問題
幾天後, 就可以動了!!!!!! 該死!!!
到底是我重開Eclipse所以可以動?
還是我重開機?
還是因為我玩小遊戲贏了?
我做了一堆有的沒的
但Eclipse一直開在那沒管它
重開機後卻可以動, 這叫我怎麼知道哪步是關鍵步驟!
快速得知process id
給未來的裕翔
平常如果想查某process的pid的話, ex: pidgin
都是ps aux | grep pidgin
剛又進不了^^
在知道process是pidgin的情況下
我可以pidof pidgin
就直接回傳數字了
帥吧^^
平常如果想查某process的pid的話, ex: pidgin
都是ps aux | grep pidgin
剛又進不了^^
在知道process是pidgin的情況下
我可以pidof pidgin
就直接回傳數字了
帥吧^^
藍牙耳機充電後再啟用的最方便方式
給未來的裕翔
如果現在藍牙手機沒電了
充完電後
把藍牙耳機調到"被找模式" ^^ <- 這是錯的, 開啟耳機就可以了
然後在Gnome的右上角上找藍牙符號
由於藍牙耳機還在選單上
選Connect, 有時不會馬上生效, 要稍等再按~
接著選Open Sound Preferences
在裡面的Output
選這隻藍牙耳機, 這樣應該就可以繼續聽了
不需要重開瀏覽器或有的沒的
另外, 如果重開機了
原本建立的連線還會在
耳機不需要先關掉再重新進入"被找模式" ^^
而是直接在Gnome右上角的藍芽符號
從該設備點選Connect即可
再另外, 如果切換到level 3再切換回level 5
直接可以聽喔^^
什麼都不需要做~
後記: 如果充完電後重開卻一直無法建立連線
可以考慮重開進入"被找模式^^ "
然後去藍芽圖示裡的設定點一下該裝置的連線
藍芽圖示就會說它偵測到一個裝置要求連線之類的
搞定~
再後記:
有時開機就可以Connect
有時要進入被找模式再Connect
是不是跟我直接關機或是直接充電有關?
充電算不算關機?
還是關掉時間長短?
先紀錄一下
--------------------------------------------------
我關機一個晚上, 隔天要進入"被找模式"才可以比較快連線
--------------------------------------------------
昨天晚上充電, 剛直接開啟好像就接通了
--------------------------------------------------
吃飯去先關掉, 回來開機就自動接上了
如果現在藍牙手機沒電了
充完電後
把藍牙耳機調到"被找模式" ^^ <- 這是錯的, 開啟耳機就可以了
然後在Gnome的右上角上找藍牙符號
由於藍牙耳機還在選單上
選Connect, 有時不會馬上生效, 要稍等再按~
接著選Open Sound Preferences
在裡面的Output
選這隻藍牙耳機, 這樣應該就可以繼續聽了
不需要重開瀏覽器或有的沒的
另外, 如果重開機了
原本建立的連線還會在
耳機不需要先關掉再重新進入"被找模式" ^^
而是直接在Gnome右上角的藍芽符號
從該設備點選Connect即可
再另外, 如果切換到level 3再切換回level 5
直接可以聽喔^^
什麼都不需要做~
後記: 如果充完電後重開卻一直無法建立連線
可以考慮重開進入"被找模式^^ "
然後去藍芽圖示裡的設定點一下該裝置的連線
藍芽圖示就會說它偵測到一個裝置要求連線之類的
搞定~
再後記:
有時開機就可以Connect
有時要進入被找模式再Connect
是不是跟我直接關機或是直接充電有關?
充電算不算關機?
還是關掉時間長短?
先紀錄一下
--------------------------------------------------
我關機一個晚上, 隔天要進入"被找模式"才可以比較快連線
--------------------------------------------------
昨天晚上充電, 剛直接開啟好像就接通了
--------------------------------------------------
吃飯去先關掉, 回來開機就自動接上了
Friday, July 30, 2010
A台有的套件, B台也要
給未來的裕翔
這是一個我很喜歡的實作題
首先, 在A台電腦把所有安裝的套件名稱存檔
rpm -qa -queryformat "%{NAME}" > a-installed.txt
把a-installed.txt複製到B台電腦後
比較優雅的作法是, 把B台也有的套件從名單濾掉
先不管指令的回傳值, 上面那個script的意思是
對a-installed.txt的每個套件名稱
測試B本機有沒有, 以rpm -q來測試, 沒有就當false(先不管回傳值)
兩個指令中間是以||區隔
&&檢查到有false就停
||是檢查到有true就停
對那些不存在B本機的套件, 回傳false, 因此就會執行第二道指令
把它們的名稱echo到b-not-installed.txt裡面
那如果B本機本來有存在數個a-installed.txt裡面的套件呢?
在一開始的rpm -q會回傳true, 然後就沒事了~
這樣產生的b-not-installed.txt就是A有B沒有的
接著, yum似乎不能接受stdin來的input
所以可以利用xargs
cat b-not-installed.txt | xargs sudo yum -y install
或
sudo yum -y install `cat b-not-installed.txt`
似乎後者較好^^
當然啦, 這是比較優雅的作法, 因為少了上面那個bash script
也是無所謂阿, 已經裝過的會自動略過嘛!
這是一個我很喜歡的實作題
首先, 在A台電腦把所有安裝的套件名稱存檔
rpm -qa -queryformat "%{NAME}" > a-installed.txt
把a-installed.txt複製到B台電腦後
比較優雅的作法是, 把B台也有的套件從名單濾掉
for package in `cat a-installed.txt`
do
rpm -q $package &> /dev/null || echo $package >> b-not-installed.txt
done
先不管指令的回傳值, 上面那個script的意思是
對a-installed.txt的每個套件名稱
測試B本機有沒有, 以rpm -q來測試, 沒有就當false(先不管回傳值)
兩個指令中間是以||區隔
&&檢查到有false就停
||是檢查到有true就停
對那些不存在B本機的套件, 回傳false, 因此就會執行第二道指令
把它們的名稱echo到b-not-installed.txt裡面
那如果B本機本來有存在數個a-installed.txt裡面的套件呢?
在一開始的rpm -q會回傳true, 然後就沒事了~
這樣產生的b-not-installed.txt就是A有B沒有的
接著, yum似乎不能接受stdin來的input
所以可以利用xargs
cat b-not-installed.txt | xargs sudo yum -y install
或
sudo yum -y install `cat b-not-installed.txt`
似乎後者較好^^
當然啦, 這是比較優雅的作法, 因為少了上面那個bash script
也是無所謂阿, 已經裝過的會自動略過嘛!
rpm的queryformat
給未來的裕翔
原來rpm這麼多選項可以用阿!
如果想知道我裝哪些套件
用rpm的話, rpm -qa就好
不過這是有版本編號和architecture的
如果只想要套件名稱就好呢?
rpm -qa --queryformat "%{NAME}\n"
帥吧!
原來rpm這麼多選項可以用阿!
如果想知道我裝哪些套件
用rpm的話, rpm -qa就好
不過這是有版本編號和architecture的
如果只想要套件名稱就好呢?
rpm -qa --queryformat "%{NAME}\n"
帥吧!
列出套件安裝順序
給未來的裕翔
原來可以列出套件順序阿!
rpm -qa --last
這樣就會列出從最新到最舊的順序
很久以前裝的套件更新後, 就是當下最新
但是因為套件很多
如果想要順序顛倒, 新的在最下面的話
rpm -qa --last | tac
原來可以列出套件順序阿!
rpm -qa --last
這樣就會列出從最新到最舊的順序
很久以前裝的套件更新後, 就是當下最新
但是因為套件很多
如果想要順序顛倒, 新的在最下面的話
rpm -qa --last | tac
yum和rpm查詢安裝軟體的速度
給未來的裕翔
如果想知道裝了哪些含有gnome字眼的套件
rpm -qa | grep gnome
或
rpm -qa '*gnome*'
都可以, 速度差不多
如果要用yum的話
yum list installed | grep gnome
或
yum list installed '*gnome*'
也是都可以
不過後者快多了!
如果想知道裝了哪些含有gnome字眼的套件
rpm -qa | grep gnome
或
rpm -qa '*gnome*'
都可以, 速度差不多
如果要用yum的話
yum list installed | grep gnome
或
yum list installed '*gnome*'
也是都可以
不過後者快多了!
需要xargs的理由
給未來的裕翔
為什麼需要xargs?
我小小的大腦認為
因為不是每個指令都可以對stdin作處理的
ex: 指令a | 指令b | 指令c
指令a的output就是指令b的stdin
指令b的output就是指令c的stdin
重複一次
不是每個指令都可以對stdin作處理的
所以需要xargs
ex: 如果我想用whatis針對前面指令丟出來的幾個東西作查詢
因為whatis的用法只處理後面接的對象, ex: whatis blabla
無法ex: 指令d | whatis
所以就必須利用
指令d | xargs whatis
以上: 我小小的大腦的結論
為什麼需要xargs?
我小小的大腦認為
因為不是每個指令都可以對stdin作處理的
ex: 指令a | 指令b | 指令c
指令a的output就是指令b的stdin
指令b的output就是指令c的stdin
重複一次
不是每個指令都可以對stdin作處理的
所以需要xargs
ex: 如果我想用whatis針對前面指令丟出來的幾個東西作查詢
因為whatis的用法只處理後面接的對象, ex: whatis blabla
無法ex: 指令d | whatis
所以就必須利用
指令d | xargs whatis
以上: 我小小的大腦的結論
sed的delimiter
給未來的裕翔
剛看到一個指令
rpm -ql rpm | sed -n '/bin/s:.*/::p'
一開始看到::就傻眼了
而且還有那個s:
經我小小的大腦思考後
我判斷那個::和:都是delimiter
而完整的意思就是
先以rpm -ql rpm把套件rpm所含有的檔案列出來
再以sed作處理, -n的意思是, sed只列出作處理的那幾行
不加-n的話, 從stdin進來的都會列出來
再來就是重頭戲'/bin/s:.*/::p'
上色加空白以表示方便的看法
' / bin / s : .*/ : : p'
紅色的斜線是第一階段的delimiter, 區隔範圍和動作
/bin/的意思是鎖定stdin含有bin的行
後接的s:.*/::p是說, 任意連續字元 .* 以斜線 / 當右側結束字元(貪婪原則)
全部替換為無
然後print出來
真是帥呆了!
剛看到一個指令
rpm -ql rpm | sed -n '/bin/s:.*/::p'
一開始看到::就傻眼了
而且還有那個s:
經我小小的大腦思考後
我判斷那個::和:都是delimiter
而完整的意思就是
先以rpm -ql rpm把套件rpm所含有的檔案列出來
再以sed作處理, -n的意思是, sed只列出作處理的那幾行
不加-n的話, 從stdin進來的都會列出來
再來就是重頭戲'/bin/s:.*/::p'
上色加空白以表示方便的看法
' / bin / s : .*/ : : p'
紅色的斜線是第一階段的delimiter, 區隔範圍和動作
/bin/的意思是鎖定stdin含有bin的行
後接的s:.*/::p是說, 任意連續字元 .* 以斜線 / 當右側結束字元(貪婪原則)
全部替換為無
然後print出來
真是帥呆了!
查某package各版本的log changec和會執行的script
給未來的裕翔
以套件mlocate為例
想看它每個小版本之間的差異的話
rpm -q --changelog mlocate
想知道它在安裝或移除時會額外作啥
rpm -q --scripts mlocate
以套件mlocate為例
想看它每個小版本之間的差異的話
rpm -q --changelog mlocate
想知道它在安裝或移除時會額外作啥
rpm -q --scripts mlocate
Thursday, July 29, 2010
grep的正規表示式
給未來的裕翔
如果要在grep裡面用正規表示, ex:
grep '^\[.*\]' file 單引號可以
grep "^\[.*\]" file 雙引號可以
grep ^\[.*\] file 不加不可以
如果要在grep裡面用正規表示, ex:
grep '^\[.*\]' file 單引號可以
grep "^\[.*\]" file 雙引號可以
grep ^\[.*\] file 不加不可以
Tuesday, July 27, 2010
pts和virtual console
給未來的裕翔
渾渾噩噩過了24載
對於pts和virtual console的差別, 不想再無所謂了^^
pts是pseudo terminal slave, 也就是在桌面環境開啟的terminal
而virtual console就是Ctrl + Alt + F1~F6的那個東西
至於名稱來源我就不知道啦~
渾渾噩噩過了24載
對於pts和virtual console的差別, 不想再無所謂了^^
pts是pseudo terminal slave, 也就是在桌面環境開啟的terminal
而virtual console就是Ctrl + Alt + F1~F6的那個東西
至於名稱來源我就不知道啦~
為boot menu上鎖
給未來的裕翔
當忘記root密碼的時候, 可以藉由single user mode去建新密碼
帥呆了^^
對於那些不懂linux有這功能的人來說
只要電腦能被別的linux玩家直接接觸, 有鎖等於沒鎖阿!
這讓我超得意也超緊張, 雖然我會改密碼, 但我不會防止人家改我密碼
剛發現, boot menu可以上鎖耶!!!
先以grub-md5-crypt產生一組亂碼
假設叫做 35984ut98h9fx
在/boot/grub/grub.conf新增一行
password --md5 35984ut98h9fx
這樣之後如果人家要edit自己的boot menu
就必須先輸入密碼(但依然可以使用rescue mode破解)
沒要修改的話, 就沒影響(表示我可以遠端開機)
另外發現一件事!
即使我輸同樣的密碼, 不同時間產生的亂碼會不一樣耶!
我在某電腦以normal user產生一組亂碼
再以root身份把它貼到/boot/grub/grub.conf
也可以耶!!!
當忘記root密碼的時候, 可以藉由single user mode去建新密碼
帥呆了^^
對於那些不懂linux有這功能的人來說
只要電腦能被別的linux玩家直接接觸, 有鎖等於沒鎖阿!
這讓我超得意也超緊張, 雖然我會改密碼, 但我不會防止人家改我密碼
剛發現, boot menu可以上鎖耶!!!
先以grub-md5-crypt產生一組亂碼
假設叫做 35984ut98h9fx
在/boot/grub/grub.conf新增一行
password --md5 35984ut98h9fx
這樣之後如果人家要edit自己的boot menu
就必須先輸入密碼(但依然可以使用rescue mode破解)
沒要修改的話, 就沒影響(表示我可以遠端開機)
另外發現一件事!
即使我輸同樣的密碼, 不同時間產生的亂碼會不一樣耶!
我在某電腦以normal user產生一組亂碼
再以root身份把它貼到/boot/grub/grub.conf
也可以耶!!!
Monday, July 26, 2010
暫時更改hostname
給未來的裕翔
/proc裡面紀錄著電腦的一些資訊
像是記憶體: /proc/meminfo
或是cpu: /proc/cpuinfo
平常我們設定hostname
是到/etc/sysconfig/network修改, 然後重開機才生效
開機時會把hostname的值紀錄在/proc/sys/kernel/hostname
之後如果輸入指令hostname
它會去讀/proc/sys/kernel/hostname
所以我們可以暫時修改該檔案來達到"不重開機改hostname"的目的
不過記得要改回來阿
不然我也不知道會發生什麼事
/proc裡面紀錄著電腦的一些資訊
像是記憶體: /proc/meminfo
或是cpu: /proc/cpuinfo
平常我們設定hostname
是到/etc/sysconfig/network修改, 然後重開機才生效
開機時會把hostname的值紀錄在/proc/sys/kernel/hostname
之後如果輸入指令hostname
它會去讀/proc/sys/kernel/hostname
所以我們可以暫時修改該檔案來達到"不重開機改hostname"的目的
不過記得要改回來阿
不然我也不知道會發生什麼事
查看cpu數量
給未來的裕翔
如果想要查看cpu數量
可以/ecc /proc/cpuinfo
不過這樣顯示的資訊落落長
可以安裝套件x86info
然後輸入指令x86info
可以看到濃縮的cpu資訊
(至少展示長度是濃縮的)
如果想要查看cpu數量
可以/ecc /proc/cpuinfo
不過這樣顯示的資訊落落長
可以安裝套件x86info
然後輸入指令x86info
可以看到濃縮的cpu資訊
(至少展示長度是濃縮的)
bash的`
給未來的裕翔
剛發現, 在同一行可以用兩次以上的``耶!
ex: mkinitrd --with=raid1 initramfs-raid1-`uname -r`.img `uname -r`
這樣可以製作還有raid1.ko的RAN disk file
剛發現, 在同一行可以用兩次以上的``耶!
ex: mkinitrd --with=raid1 initramfs-raid1-`uname -r`.img `uname -r`
這樣可以製作還有raid1.ko的RAN disk file
阿琪與遠端桌面
給未來的阿琪
如果你說的連線是只有桌面環境的
從linux連到windows的話
先安裝套件tsclient
(linux裡面的套件你就想成是windows裡面的軟體吧)
先切換成root
su -
再以yum下載
yum -y install tsclient
yum安裝過程會跟你確認是否下載
加那個-y就可以自動幫你回答yes
那如果要自動回答no呢? 你來鬧的阿^^?
裝好之後
Applications -> Internet -> Terminal Server Client
-> Add Connection -> Windows Terminal Service
Host填IP就可以了
Username和Password看你要現在填(之後可以直接進入工作畫面)
或是不填(之後連線會先進入登入畫面)
Domain就不用鳥它了, 其它我也沒用過, 有心得再跟我分享吧^^
至於windows連linux桌面, 不會耶, 也不想研究, 哈哈
不過我知道可以, 要裝一個軟體, 名稱我忘了, 不過不想google耶, 哈哈
幫不上忙, 歹勢^^
如果你說的連線是只有桌面環境的
從linux連到windows的話
先安裝套件tsclient
(linux裡面的套件你就想成是windows裡面的軟體吧)
先切換成root
su -
再以yum下載
yum -y install tsclient
yum安裝過程會跟你確認是否下載
加那個-y就可以自動幫你回答yes
那如果要自動回答no呢? 你來鬧的阿^^?
裝好之後
Applications -> Internet -> Terminal Server Client
-> Add Connection -> Windows Terminal Service
Host填IP就可以了
Username和Password看你要現在填(之後可以直接進入工作畫面)
或是不填(之後連線會先進入登入畫面)
Domain就不用鳥它了, 其它我也沒用過, 有心得再跟我分享吧^^
至於windows連linux桌面, 不會耶, 也不想研究, 哈哈
不過我知道可以, 要裝一個軟體, 名稱我忘了, 不過不想google耶, 哈哈
幫不上忙, 歹勢^^
阿琪與gnome terminal
給現在的阿琪
雖然在linux的桌面環境裡
可以叫出模擬的terminal
然後輸入指令叫出視窗程式, ex: pidgin &
不過這樣會有幾個缺點
有些pidgin的訊息可能會輸出到剛才輸指令的terminal
當然, 沒繼續使用terminal的話沒差
還有一個缺點就是, 萬一不小心關掉terminal
因為pidgin是那個teminal的子程式
就一起關掉啦~
雖然在linux的桌面環境裡
可以叫出模擬的terminal
然後輸入指令叫出視窗程式, ex: pidgin &
不過這樣會有幾個缺點
有些pidgin的訊息可能會輸出到剛才輸指令的terminal
當然, 沒繼續使用terminal的話沒差
還有一個缺點就是, 萬一不小心關掉terminal
因為pidgin是那個teminal的子程式
就一起關掉啦~
在fedora如何使用中文輸入法
給現在的証琪^^
System -> Preferences -> Input Method -> Input Method Preferences
-> Input Method -> Select an input method -> Chinese -> Chewing -> Add
System -> Preferences -> Input Method -> Input Method Preferences
-> Input Method -> Select an input method -> Chinese -> Chewing -> Add
Thursday, July 22, 2010
Wednesday, July 21, 2010
java編譯多個檔案
給未來的裕翔
如果現在有兩個檔案
design.java和designTest.java
書上說, 編譯時要javac design.java designTest.java
然後java designTest來執行
我也都照做, 後來又多了extends
我的疑問是, 被extends的那個也需要放進來一起編譯嗎?
還是我依舊編譯那兩個, 它會自己去找?
似乎會自己去找?
那我如果一開始就只編譯那個designTest.java
它也會自己去找會用到的東西嗎?
實驗結果: 會耶! 會自己去找!
所以以後只編譯那個designTest.java就可以了
如果現在有兩個檔案
design.java和designTest.java
書上說, 編譯時要javac design.java designTest.java
然後java designTest來執行
我也都照做, 後來又多了extends
我的疑問是, 被extends的那個也需要放進來一起編譯嗎?
還是我依舊編譯那兩個, 它會自己去找?
似乎會自己去找?
那我如果一開始就只編譯那個designTest.java
它也會自己去找會用到的東西嗎?
實驗結果: 會耶! 會自己去找!
所以以後只編譯那個designTest.java就可以了
Tuesday, July 20, 2010
vlc player的snapshot
給未來的裕翔
totem似乎沒有snapshot的功能
而vlc player有
Video -> Snapshot
影像會存到
/home/xxxxx/.local/share/vlc
totem似乎沒有snapshot的功能
而vlc player有
Video -> Snapshot
影像會存到
/home/xxxxx/.local/share/vlc
Monday, July 19, 2010
把檔案非註解部份秀出來
給未來的裕翔
以/etc/ntp.conf為例
它裡面的的註解是#
所以先把它cat出來
再利用grep把每列開頭不為#的抓出來
完整命令如下
cat /etc/ntp.conf | grep ^[^#]
以/etc/ntp.conf為例
它裡面的的註解是#
所以先把它cat出來
再利用grep把每列開頭不為#的抓出來
完整命令如下
cat /etc/ntp.conf | grep ^[^#]
如何架設NTP Server
給未來的裕翔
首先
把ntpd服務關掉: service ntpd stop
不然無法先以ntpdate校正時間
架server前
要先以ntpdate粗略校正: ntpdate -b more-accurate-time-server
不然如果時間差太多, 之後本機架好NTP Server似乎就會瀟灑的罷工
接著修改/etc/ntp.conf
server more-accurate-time-server-1
server more-accurate-time-server-2
server more-accurate-time-server-3
server 127.127.1.0 # 我看到的兩範例都有這行, 我也不甚了
fudge 127.127.1.0 stratum 10 # 我看到的兩範例都有這行, 我也不甚了
driftfile /var/lib/ntp/drift
# 想限制可以使用此NTP Server的來源就如下設定
# restrict $$$.$$$.$$$.$$$
之後把ntpd服務打開: service ntpd start
同時設定成每此開機都會啟動: chkconfig ntpd on
搞定~
首先
把ntpd服務關掉: service ntpd stop
不然無法先以ntpdate校正時間
架server前
要先以ntpdate粗略校正: ntpdate -b more-accurate-time-server
不然如果時間差太多, 之後本機架好NTP Server似乎就會瀟灑的罷工
接著修改/etc/ntp.conf
server more-accurate-time-server-1
server more-accurate-time-server-2
server more-accurate-time-server-3
server 127.127.1.0 # 我看到的兩範例都有這行, 我也不甚了
fudge 127.127.1.0 stratum 10 # 我看到的兩範例都有這行, 我也不甚了
driftfile /var/lib/ntp/drift
# 想限制可以使用此NTP Server的來源就如下設定
# restrict $$$.$$$.$$$.$$$
之後把ntpd服務打開: service ntpd start
同時設定成每此開機都會啟動: chkconfig ntpd on
搞定~
編譯C++需要安裝的套件
給未來的裕翔
為了編譯 OpenCV 2(因為yum只能下載到1.1)
我需要裝C++編譯器, 不然會一直configure錯誤
看到網頁說gcc也可以編譯C++檔案
親自嘗試後, 如果不是我太笨就是他騙人……
後來想起之前在windows上編譯C++是利用MinGW的g++指令
於是利用所學^^
yum provides g++
失敗~他建議我改成
yum provides /g++
果然找到一個!
gcc-c++
耶!搞好久~~~
結語: 都快忘了重點是編譯OpenCV……
為了編譯 OpenCV 2(因為yum只能下載到1.1)
我需要裝C++編譯器, 不然會一直configure錯誤
看到網頁說gcc也可以編譯C++檔案
親自嘗試後, 如果不是我太笨就是他騙人……
後來想起之前在windows上編譯C++是利用MinGW的g++指令
於是利用所學^^
yum provides g++
失敗~他建議我改成
yum provides /g++
果然找到一個!
gcc-c++
耶!搞好久~~~
結語: 都快忘了重點是編譯OpenCV……
Qt起手包
給未來的裕翔
本來是不想用Qt的
因為之前看過Qt和Gtk的歷史鬥爭文
Qt飾演反派^^
不過既然朋友A和朋友B都希望我學Qt
那就來吧!
首先, 安裝qt-devel套件: yum install -y qt-devel
之後
在要編譯的程式碼的資料夾裡
依序輸入
qmake -project
qmake
make
就產生與資料夾同名的執行擋了^^
真爽~
本來是不想用Qt的
因為之前看過Qt和Gtk的歷史鬥爭文
Qt飾演反派^^
不過既然朋友A和朋友B都希望我學Qt
那就來吧!
首先, 安裝qt-devel套件: yum install -y qt-devel
之後
在要編譯的程式碼的資料夾裡
依序輸入
qmake -project
qmake
make
就產生與資料夾同名的執行擋了^^
真爽~
對partition製作ext3 file system和label
給未來的裕翔
利用fdisk切割好一個partitinon後
本來我是用
mkfs -t ext3 /dev/sda#
tune2fs -L label-name
來達到這兩個目的
剛發現可以一行搞定的簡單指令
mkfs.ext3 -L label-name /dev/sda#
有沒有label成功可用blkid來驗證
又進步了~耶
利用fdisk切割好一個partitinon後
本來我是用
mkfs -t ext3 /dev/sda#
tune2fs -L label-name
來達到這兩個目的
剛發現可以一行搞定的簡單指令
mkfs.ext3 -L label-name /dev/sda#
有沒有label成功可用blkid來驗證
又進步了~耶
快速製作大量使用者
給未來的裕翔
寫一個script
for name in name1 name2 name3 # …
do
useradd $name
echo password | passwd $name –stdin
done
如果使用者實在太大量了
可以把所有使用者另外存一個name-file
name1
name2
name3
blablabla
把原來的script修正為
for name in `cat name-file`
do
useradd $name
echo password | passwd $name –stdin
done
搞定~
寫一個script
for name in name1 name2 name3 # …
do
useradd $name
echo password | passwd $name –stdin
done
如果使用者實在太大量了
可以把所有使用者另外存一個name-file
name1
name2
name3
blablabla
把原來的script修正為
for name in `cat name-file`
do
useradd $name
echo password | passwd $name –stdin
done
搞定~
從光碟製作映像檔+掛載
給未來的裕翔
這是從網路上看到的
(我很需要……)
已經成功做出映像檔
不過還不確定做出來的映像檔可否使用
在此先把指令記錄下來
dd if=/dev/cdrom of=/my-iso-file-destination
搞定!
幾天後的今天
我嘗試掛載幾天前的那天所製作的映像檔
mount -t iso9660 -o loop /where-my-iso-is/file-name.iso /where-I-want-to-mount
可以用耶^^
下次來測試最新防拷電影DVD看看, 以嚴肅嚴謹的科學探討精神~
這是從網路上看到的
(我很需要……)
已經成功做出映像檔
不過還不確定做出來的映像檔可否使用
在此先把指令記錄下來
dd if=/dev/cdrom of=/my-iso-file-destination
搞定!
幾天後的今天
我嘗試掛載幾天前的那天所製作的映像檔
mount -t iso9660 -o loop /where-my-iso-is/file-name.iso /where-I-want-to-mount
可以用耶^^
下次來測試最新防拷電影DVD看看, 以嚴肅嚴謹的科學探討精神~
查詢自動掛載的NTFS硬碟的uuid
給未來的裕翔
我是Fedora 12的LXDE桌面
每當要使用win下的NTFS分割區時
它才會自動掛載在/media下
但我想要開機就自動掛載
可是我看/etc/fstab下的自動掛載大部分都藉由uuid來指定
所以我想知道我使用的NTFS硬碟uuid是多少
網路上查了一下
把步驟記錄下來供我日後使用^^
首先, 使用df -h, 自己觀察一下NTFS使用的是硬碟的哪一個partition
我自己是/dev/sda5
接著, 輸入ll /dev/disk/by-uuid
就可以看到每個partition對應到哪個uuid了
赫然發現
原來我的NTFS在/media下面掛載的名稱就是用uuid!
我還以為是亂數咧~
這時又突然想到
其實我直接用/dev/sda5掛載到我想要的資料夾不就可以了嗎……
不過在此之前我要先知道要用什麼type掛載NTFS
使用mount指令看一下
答案是fuseblk
Good!
ps: 這次嘗試同時驗證了, 一個partition可以同時掛載到多個資料夾上
我是Fedora 12的LXDE桌面
每當要使用win下的NTFS分割區時
它才會自動掛載在/media下
但我想要開機就自動掛載
可是我看/etc/fstab下的自動掛載大部分都藉由uuid來指定
所以我想知道我使用的NTFS硬碟uuid是多少
網路上查了一下
把步驟記錄下來供我日後使用^^
首先, 使用df -h, 自己觀察一下NTFS使用的是硬碟的哪一個partition
我自己是/dev/sda5
接著, 輸入ll /dev/disk/by-uuid
就可以看到每個partition對應到哪個uuid了
赫然發現
原來我的NTFS在/media下面掛載的名稱就是用uuid!
我還以為是亂數咧~
這時又突然想到
其實我直接用/dev/sda5掛載到我想要的資料夾不就可以了嗎……
不過在此之前我要先知道要用什麼type掛載NTFS
使用mount指令看一下
答案是fuseblk
Good!
ps: 這次嘗試同時驗證了, 一個partition可以同時掛載到多個資料夾上
在Linux安裝Matlab所需的library
給未來的裕翔
其實我真的不想裝Matlab
礙於研究需要
加上學校有提供幾乎沒toolbox的正版
來第二次嘗試一下吧(第一次是我幾乎不會Linux的情況下裝的)
不過這次重點不是如何安裝
而是描述我安裝過程所遇到的一個問題
安裝時顯示缺少libXp.so
過去的我
應該就直接嘗試yum -y install libXp.so吧
結果會失敗
但是 現在的我進步了!
首先
yum whatprovides libXp.so 失敗
依照建議, 再來:
yum whatprovides /libXp.so 失敗
依照建議, 再來:
yum whatprovides */libXp.so 找到套件了^^
yum -y install libXp-devel 成功!
爽阿~
後記: 裝完後還是不能用, 把selinux關掉就可以用了
後記2: 本來想先掛載NTFS硬碟, 再把Matlab安裝在裡面,
結果變成, Matlab安裝在掛載資料夾, 但是NTFS卸載了……奇怪~
其實我真的不想裝Matlab
礙於研究需要
加上學校有提供幾乎沒toolbox的正版
來第二次嘗試一下吧(第一次是我幾乎不會Linux的情況下裝的)
不過這次重點不是如何安裝
而是描述我安裝過程所遇到的一個問題
安裝時顯示缺少libXp.so
過去的我
應該就直接嘗試yum -y install libXp.so吧
結果會失敗
但是 現在的我進步了!
首先
yum whatprovides libXp.so 失敗
依照建議, 再來:
yum whatprovides /libXp.so 失敗
依照建議, 再來:
yum whatprovides */libXp.so 找到套件了^^
yum -y install libXp-devel 成功!
爽阿~
後記: 裝完後還是不能用, 把selinux關掉就可以用了
後記2: 本來想先掛載NTFS硬碟, 再把Matlab安裝在裡面,
結果變成, Matlab安裝在掛載資料夾, 但是NTFS卸載了……奇怪~
traceroute的進化版: mtr
給未來的裕翔
當我使用traceroute tw.yahoo.com時
照理講會顯示所有經過的路徑
可是因為某些原因
有些會顯示星星
此時, 如果改成mtr tw.yahoo.com
都秀出來了!
而且速度超快!
當我使用traceroute tw.yahoo.com時
照理講會顯示所有經過的路徑
可是因為某些原因
有些會顯示星星
此時, 如果改成mtr tw.yahoo.com
都秀出來了!
而且速度超快!
parted怪怪
給未來的裕翔
parted的優點印象中是
可以切割的數量可達幾十個
fdisk好像只能十幾個(也夠了)
另一個我比較重視的優點是
切割完後不需要執行partprobe
來讓系統認識新切割的partition
可用cat /proc/partitions來檢視
不過呢, 不知是我電腦怎
就是無法展現這項優點, 總是說我的什麼在忙碌中
我也不了
因此對我而言, 其實fdisk和parted差不多
就在剛剛
我發現parted致命的缺點^^
不能在切partition的同時製作ext4檔案系統, 甚至ext3也不行
似乎必須另外搭配mkfs之類的來製作檔案系統
嘖嘖~
parted的優點印象中是
可以切割的數量可達幾十個
fdisk好像只能十幾個(也夠了)
另一個我比較重視的優點是
切割完後不需要執行partprobe
來讓系統認識新切割的partition
可用cat /proc/partitions來檢視
不過呢, 不知是我電腦怎
就是無法展現這項優點, 總是說我的什麼在忙碌中
我也不了
因此對我而言, 其實fdisk和parted差不多
就在剛剛
我發現parted致命的缺點^^
不能在切partition的同時製作ext4檔案系統, 甚至ext3也不行
似乎必須另外搭配mkfs之類的來製作檔案系統
嘖嘖~
quota用完可能會讓使用者無法登入圖形介面
給未來的裕翔
如果root對home做quota限制
當使用者達到quota硬性上限時
之後會讓使用者無法登入圖介面
因為每當使用者登入圖形介面時
會在其home下面產生一些暫時檔
quota滿了就產生不了
產生不了就無法登入
by 我的Linux老師
如果root對home做quota限制
當使用者達到quota硬性上限時
之後會讓使用者無法登入圖介面
因為每當使用者登入圖形介面時
會在其home下面產生一些暫時檔
quota滿了就產生不了
產生不了就無法登入
by 我的Linux老師
WaveLab安裝
給未來的裕翔
在Linux裝完Matlab之後
去MCALab下載WAVELAB850.ZIP
然後解壓縮
把資料夾Wavelab850放到
where-I-install-Matlab/toolbox/之下
變成where-I-install-Matlab/toolbox/Wavelab850
把Wavelab850裡面的WavePath.m複製到(用剪下貼上之後會有錯誤)
where-I-install-Matlab/toolbox/local裡
並改名為startup.m
這樣開Matlab就會自動啟動WaveLab了
接著測試mex有沒compile成功
雖然沒成功也沒關係
但能成功幹嘛不成功?
在Matlab裡面輸入which FWT_PO
如果秀出where-I-install-Matlab/toolbox/Wavelab850/Orthogonal/FWT_PO.mexglx
就是成功!
當然 一開始是會秀出m檔而非mexglx檔的
因為我安裝WaveLab失敗多次
中間做了什麼關鍵步驟我也不是很確定
不過的確有某一次開啟matlab時
它問我要不要compile mex檔
回答yes以後就會編譯出mexglx檔
如果一直沒遇到matlab如此提問
可以嘗試以root開啟matlab試試看
/usr/local/bin/matlab matlab &
改天有機會重裝WaveLab我再仔細研究看哪些是關鍵步驟
現在學業研究進度落後, 暫不考慮
在Linux裝完Matlab之後
去MCALab下載WAVELAB850.ZIP
然後解壓縮
把資料夾Wavelab850放到
where-I-install-Matlab/toolbox/之下
變成where-I-install-Matlab/toolbox/Wavelab850
把Wavelab850裡面的WavePath.m複製到(用剪下貼上之後會有錯誤)
where-I-install-Matlab/toolbox/local裡
並改名為startup.m
這樣開Matlab就會自動啟動WaveLab了
接著測試mex有沒compile成功
雖然沒成功也沒關係
但能成功幹嘛不成功?
在Matlab裡面輸入which FWT_PO
如果秀出where-I-install-Matlab/toolbox/Wavelab850/Orthogonal/FWT_PO.mexglx
就是成功!
當然 一開始是會秀出m檔而非mexglx檔的
因為我安裝WaveLab失敗多次
中間做了什麼關鍵步驟我也不是很確定
不過的確有某一次開啟matlab時
它問我要不要compile mex檔
回答yes以後就會編譯出mexglx檔
如果一直沒遇到matlab如此提問
可以嘗試以root開啟matlab試試看
/usr/local/bin/matlab matlab &
改天有機會重裝WaveLab我再仔細研究看哪些是關鍵步驟
現在學業研究進度落後, 暫不考慮
桌面水波特效按法
給未來的裕翔
之前裝了一堆有的沒的compiz相關套件後
有開啟水波特效
不過這是之前做的
詳細步驟全忘了
要講的是
當初不知道為什麼啟動水波特效後沒有任何動靜
就沒去管它
後來發現偶爾會不小心出現水波特效
原來是要用按的
剛上網查了一下按法
Ctrl + Win + 滑鼠任意移動
爽阿^^
之前裝了一堆有的沒的compiz相關套件後
有開啟水波特效
不過這是之前做的
詳細步驟全忘了
要講的是
當初不知道為什麼啟動水波特效後沒有任何動靜
就沒去管它
後來發現偶爾會不小心出現水波特效
原來是要用按的
剛上網查了一下按法
Ctrl + Win + 滑鼠任意移動
爽阿^^
快捷鍵(有些要開compiz)
在此紀錄我還不熟練但很喜歡的桌面快捷鍵:
Ctrl + Alt + d: 其它壓住不放, 按一下d把所有視窗放大, 再一次縮小所有視窗
(如果目標是縮小所有視窗, 滑鼠移到最右上, 點桌面任一點也可達到同功能)
Ctrl + l(L小寫): 在console裡等同於是clear指令, 但更方便
(在firefox裡就是跳到網址列)
Ctrl + q: 可以關掉大部分程式, 不過關不掉console
Ctrl + d: 可以關掉console^^
Alt + 滑鼠滾輪上下: 調整游標所在位置下的第一個視窗的透明度
Alt + Tab: 在目前桌面的所有工作中切換
Ctrl + Alt + Tab: 在所有桌面的所有工作中切換
Ctrl + Alt + 鍵盤下: 樸素式切換桌面
Ctrl + Alt + 鍵盤左右: 炫麗式切換桌面
Ctrl + Shift + Alt + 鍵盤左右: 把正在工作的視窗移到左或右桌面
Ctrl + Win + 滑鼠隨意操作: 水波
Shift + F9: 到處是水波, 像下雨時的地面一樣, 再按一次才會停
Win + 滑鼠左鍵拖曳: 左鍵放開就會把剛框選的區域便圖檔放桌面
Win + 滑鼠右鍵拖曳: 右鍵放開就會局部放大, Esc離開
Ctrl + Alt + d: 其它壓住不放, 按一下d把所有視窗放大, 再一次縮小所有視窗
(如果目標是縮小所有視窗, 滑鼠移到最右上, 點桌面任一點也可達到同功能)
Ctrl + l(L小寫): 在console裡等同於是clear指令, 但更方便
(在firefox裡就是跳到網址列)
Ctrl + q: 可以關掉大部分程式, 不過關不掉console
Ctrl + d: 可以關掉console^^
Alt + 滑鼠滾輪上下: 調整游標所在位置下的第一個視窗的透明度
Alt + Tab: 在目前桌面的所有工作中切換
Ctrl + Alt + Tab: 在所有桌面的所有工作中切換
Ctrl + Alt + 鍵盤下: 樸素式切換桌面
Ctrl + Alt + 鍵盤左右: 炫麗式切換桌面
Ctrl + Shift + Alt + 鍵盤左右: 把正在工作的視窗移到左或右桌面
Ctrl + Win + 滑鼠隨意操作: 水波
Shift + F9: 到處是水波, 像下雨時的地面一樣, 再按一次才會停
Win + 滑鼠左鍵拖曳: 左鍵放開就會把剛框選的區域便圖檔放桌面
Win + 滑鼠右鍵拖曳: 右鍵放開就會局部放大, Esc離開
MCALab安裝
給未來的裕翔
當初裝Matlab就是為了裝WaveLab
而裝WaveLab就是為了裝MCALab
終於讓我走到這一步了 嗚嗚~
這次我直接仿照WaveLab的安裝方式
把解壓縮的資料夾放到where-I-install-Matlab/toobox/下
把裡面的MCAPath.m複製到where-I-install-Matlab/toobox/local/裡
就在我想用root開gedit編輯where-I-install-Matlab/toobox/local/starup.m的同時
錯誤! 說什麼我在唯讀的硬碟上!
明明就不是阿~!
後來我使用echo MCAPath >> startup.m卻可以
怪咧~
而開啟Matlab後也有warning, 說什麼無法寫入
即便我重新以sudo開啟Matlab也是一樣
後來
我把MCALabWithUtilities和Wavelab850的user和group換成root.root
chwon -R root.root MCALabWithUtilities
chwon -R root.root Wavelab850
重開Matlab, 成功!
為什麼成功還是想不透~
當初裝Matlab就是為了裝WaveLab
而裝WaveLab就是為了裝MCALab
終於讓我走到這一步了 嗚嗚~
這次我直接仿照WaveLab的安裝方式
把解壓縮的資料夾放到where-I-install-Matlab/toobox/下
把裡面的MCAPath.m複製到where-I-install-Matlab/toobox/local/裡
就在我想用root開gedit編輯where-I-install-Matlab/toobox/local/starup.m的同時
錯誤! 說什麼我在唯讀的硬碟上!
明明就不是阿~!
後來我使用echo MCAPath >> startup.m卻可以
怪咧~
而開啟Matlab後也有warning, 說什麼無法寫入
即便我重新以sudo開啟Matlab也是一樣
後來
我把MCALabWithUtilities和Wavelab850的user和group換成root.root
chwon -R root.root MCALabWithUtilities
chwon -R root.root Wavelab850
重開Matlab, 成功!
為什麼成功還是想不透~
MCALab安裝
給未來的裕翔
當初裝Matlab就是為了裝WaveLab
而裝WaveLab就是為了裝MCALab
終於讓我走到這一步了 嗚嗚~
這次我直接仿照WaveLab的安裝方式
把解壓縮的資料夾放到where-I-install-Matlab/toobox/下
把裡面的MCAPath.m複製到where-I-install-Matlab/toobox/local/裡
就在我想用root開gedit編輯where-I-install-Matlab/toobox/local/starup.m的同時
錯誤! 說什麼我在唯讀的硬碟上!
明明就不是阿~!
後來我使用echo MCAPath >> startup.m卻可以
怪咧~
而開啟Matlab後也有warning, 說什麼無法寫入
即便我重新以sudo開啟Matlab也是一樣
後來
我把MCALabWithUtilities和Wavelab850的user和group換成root.root
chwon -R root.root MCALabWithUtilities
chwon -R root.root Wavelab850
重開Matlab, 成功!
為什麼成功還是想不透~
當初裝Matlab就是為了裝WaveLab
而裝WaveLab就是為了裝MCALab
終於讓我走到這一步了 嗚嗚~
這次我直接仿照WaveLab的安裝方式
把解壓縮的資料夾放到where-I-install-Matlab/toobox/下
把裡面的MCAPath.m複製到where-I-install-Matlab/toobox/local/裡
就在我想用root開gedit編輯where-I-install-Matlab/toobox/local/starup.m的同時
錯誤! 說什麼我在唯讀的硬碟上!
明明就不是阿~!
後來我使用echo MCAPath >> startup.m卻可以
怪咧~
而開啟Matlab後也有warning, 說什麼無法寫入
即便我重新以sudo開啟Matlab也是一樣
後來
我把MCALabWithUtilities和Wavelab850的user和group換成root.root
chwon -R root.root MCALabWithUtilities
chwon -R root.root Wavelab850
重開Matlab, 成功!
為什麼成功還是想不透~
MCLab使用
給未來的裕翔
好奇:
當我把WaveLab和MCALab工具放在where-I-install-Matlab/toolbox裡
是不是不管資料夾第幾層的m檔都可以直接在Matlab呼叫?
答案是: 是!
不過呢~
version libmx.INTERNAL not defined in file libmx.so with link time reference
幾乎不管執行哪個指令都會出現類似上面的error
google結果是, 建議可以看是否缺少所需的library
於是對有問題的mexglx檔使用ldd
ldd xxx.mexglx
發現有三個dynamic lib我沒有
libmx.so
libmat.so
libmex.so
這時老招重套
yum whatprovides libmx
yum whatprovides */libmx
yum whatprovides *bin/libmx
都不行
甚至出現新警告
說什麼database deform
再次google
建議先執行yum clean all
再yum whatprovides libmx
就可以了!!!!!!
不過呢
ldd xxx.mexglx依舊失敗
於是自製連結檔
cd /usr/lib
ln -s libmx-1.0.so.0 libmx.so
此時ldd xxx.mexglx抓到libmx.so了^^
但剩下的libmat.so和libmex.so無論怎麼yum whatprovides就是找不到
突然靈光一閃
locate libmex.so
locate libmat.so
原來matlab自己有提供阿, 連libmx.so都有… 嗚嗚……
繞一大圈……
突然腦中想起剛剛google眾多建議中
有一位建議修改LD_LIBRARY_PATH
於是我正在參考網路文章
筆記先紀錄到此
真是慢長的戰鬥阿……
好奇:
當我把WaveLab和MCALab工具放在where-I-install-Matlab/toolbox裡
是不是不管資料夾第幾層的m檔都可以直接在Matlab呼叫?
答案是: 是!
不過呢~
version libmx.INTERNAL not defined in file libmx.so with link time reference
幾乎不管執行哪個指令都會出現類似上面的error
google結果是, 建議可以看是否缺少所需的library
於是對有問題的mexglx檔使用ldd
ldd xxx.mexglx
發現有三個dynamic lib我沒有
libmx.so
libmat.so
libmex.so
這時老招重套
yum whatprovides libmx
yum whatprovides */libmx
yum whatprovides *bin/libmx
都不行
甚至出現新警告
說什麼database deform
再次google
建議先執行yum clean all
再yum whatprovides libmx
就可以了!!!!!!
不過呢
ldd xxx.mexglx依舊失敗
於是自製連結檔
cd /usr/lib
ln -s libmx-1.0.so.0 libmx.so
此時ldd xxx.mexglx抓到libmx.so了^^
但剩下的libmat.so和libmex.so無論怎麼yum whatprovides就是找不到
突然靈光一閃
locate libmex.so
locate libmat.so
原來matlab自己有提供阿, 連libmx.so都有… 嗚嗚……
繞一大圈……
突然腦中想起剛剛google眾多建議中
有一位建議修改LD_LIBRARY_PATH
於是我正在參考網路文章
筆記先紀錄到此
真是慢長的戰鬥阿……
MCALab的mexglx
給未來的裕翔
昨天嘗試修改LD_LIBRARY_PATH之後
開matlab整個視窗亂掉了
原本以為是因為我亂修改LD_LIBRARY_PATH
可是剛剛登出登入後
以root身份開第一次matlab還是會這樣
重開一次matlab就沒事了
所以應該不是LD_LIBRARY_PATH直接影響
昨天新心得:
即使我以locate找出libmx.so libmex.so libmat.so所在
把所在路徑加入到LD_LIBRARY_PATH
echo “LD_LIBRARY_PATH=/path-I-want:$LD_LIBRARY_PATH”
依然無效!
因為我忘記export LD_LIBRARY_PATH
export好之後, ldd xxx.mexglx都找到了
但是
matlab裡面執行依然失敗~
mrdwt.mexglx: symbol mxCreateDoubleMatrix, version libmx.INTERNAL not defined in file libmx.so with link time reference.
剛剛使出下策
把locate libmx.so所在資料夾整個複製到 /usr/lib底下
修改/etc/ld.so.conf.d/matlab.conf
matlab依然失敗~
直接把libmx.so複製到/usr/lib
matlab依然失敗~
甚至當我ldd xxx.mexglx時
not found的library變更多了
之前一度都找到了說
現在可能原因那麼多
我也不知道是哪個造成的
真想放棄……
現在朝向把mexglx檔移掉
讓matlab執行m檔
結果還是依然失敗
直接顯示找不到mexglx檔
快不知道還能怎麼辦了
又不是我把所有方法都試過
就可以跟理直氣壯跟教授說: “該試的都試了 我無可奈何”
我哪那麼有種~
昨天嘗試修改LD_LIBRARY_PATH之後
開matlab整個視窗亂掉了
原本以為是因為我亂修改LD_LIBRARY_PATH
可是剛剛登出登入後
以root身份開第一次matlab還是會這樣
重開一次matlab就沒事了
所以應該不是LD_LIBRARY_PATH直接影響
昨天新心得:
即使我以locate找出libmx.so libmex.so libmat.so所在
把所在路徑加入到LD_LIBRARY_PATH
echo “LD_LIBRARY_PATH=/path-I-want:$LD_LIBRARY_PATH”
依然無效!
因為我忘記export LD_LIBRARY_PATH
export好之後, ldd xxx.mexglx都找到了
但是
matlab裡面執行依然失敗~
mrdwt.mexglx: symbol mxCreateDoubleMatrix, version libmx.INTERNAL not defined in file libmx.so with link time reference.
剛剛使出下策
把locate libmx.so所在資料夾整個複製到 /usr/lib底下
修改/etc/ld.so.conf.d/matlab.conf
matlab依然失敗~
直接把libmx.so複製到/usr/lib
matlab依然失敗~
甚至當我ldd xxx.mexglx時
not found的library變更多了
之前一度都找到了說
現在可能原因那麼多
我也不知道是哪個造成的
真想放棄……
現在朝向把mexglx檔移掉
讓matlab執行m檔
結果還是依然失敗
直接顯示找不到mexglx檔
快不知道還能怎麼辦了
又不是我把所有方法都試過
就可以跟理直氣壯跟教授說: “該試的都試了 我無可奈何”
我哪那麼有種~
MCALab的mex錯誤嘗試
給未來的裕翔
我一直不確定
mrdwt.mexglx: symbol mxCreateDoubleMatrix, version libmx.INTERNAL not defined in file libmx.so with link time reference
這錯誤訊息的原因為何
一直以為是libmx.so抓不到
現在要來驗證一下
是否真的沒抓到
為了達到所謂的沒抓到
我很乾脆的把所有我因嘗試而複製的和原本的libmx.so砍掉
重開matlab
看之後在matlab輸入MCALab指令所產生的錯誤訊息會不會不一樣
結果
光是重開matlab就失敗了, 爽!
以下為重開matlab的錯誤訊息
where-I-install-matlab/bin/glnx86/MATLAB: error while loading shared libraries: libmx.so: cannot open shared object file: No such file or directory
表示之前都有抓到
之前失敗幾乎可以篤定是我matlab太新和MCALab的所提供的 mexglx不合
確定一件事情真讓人爽快^^
美中不足的是我還是沒解決問題
後記:
我真該為libmx.so備份的……
debug到賭氣刪檔真的很不應該~
看來要重灌matlab了……
我一直不確定
mrdwt.mexglx: symbol mxCreateDoubleMatrix, version libmx.INTERNAL not defined in file libmx.so with link time reference
這錯誤訊息的原因為何
一直以為是libmx.so抓不到
現在要來驗證一下
是否真的沒抓到
為了達到所謂的沒抓到
我很乾脆的把所有我因嘗試而複製的和原本的libmx.so砍掉
重開matlab
看之後在matlab輸入MCALab指令所產生的錯誤訊息會不會不一樣
結果
光是重開matlab就失敗了, 爽!
以下為重開matlab的錯誤訊息
where-I-install-matlab/bin/glnx86/MATLAB: error while loading shared libraries: libmx.so: cannot open shared object file: No such file or directory
表示之前都有抓到
之前失敗幾乎可以篤定是我matlab太新和MCALab的所提供的 mexglx不合
確定一件事情真讓人爽快^^
美中不足的是我還是沒解決問題
後記:
我真該為libmx.so備份的……
debug到賭氣刪檔真的很不應該~
看來要重灌matlab了……
nmap
給未來的裕翔
想要測試某主機listen哪些service
nmap ###.###.###.###
想要測試某網段哪些主機會回應ping
nmap -sP ###.###.###.*
選項sP就是scan ping
想要測試某主機listen哪些service
nmap ###.###.###.###
想要測試某網段哪些主機會回應ping
nmap -sP ###.###.###.*
選項sP就是scan ping
pidgin清螢幕
給未來的裕翔
剛用pidgin跟水哥聊天的同時
赫然發現
Ctrl + l(L小寫)
可以清對話內容耶!
雖然沒什麼幫助
ps 被清掉的對話內容, 依舊會紀錄到log裡, 如果此功能有開的話~
剛用pidgin跟水哥聊天的同時
赫然發現
Ctrl + l(L小寫)
可以清對話內容耶!
雖然沒什麼幫助
ps 被清掉的對話內容, 依舊會紀錄到log裡, 如果此功能有開的話~
Matlab的libmx.so被砍掉怎辦?
給未來的裕翔
昨天一時衝動把這砍了
雖然驗證了一些事情
但其實我不需要完全砍掉的…
問題一: touch一個同名檔可以嗎?
不行!錯誤訊息如下:
error while loading shared libraries: /win-data/matlab-linux/bin/glnx86/../../bin/glnx86/libmx.so: file too short
問題二: 也許是matlab有檢查格式, 把libmat.so複製一份成libmx.so可以嗎?
不行!錯誤訊息如下:
symbol lookup error: /where-I-install-matlab/bin/glnx86/../../bin/glnx86/../../bin/glnx86/../../bin/glnx86/../../bin/glnx86/libmwmathcore.so: undefined symbol: mxReallocEx
所以, Matlab的libmx.so被砍掉怎辦?
不知道^^
昨天一時衝動把這砍了
雖然驗證了一些事情
但其實我不需要完全砍掉的…
問題一: touch一個同名檔可以嗎?
不行!錯誤訊息如下:
error while loading shared libraries: /win-data/matlab-linux/bin/glnx86/../../bin/glnx86/libmx.so: file too short
問題二: 也許是matlab有檢查格式, 把libmat.so複製一份成libmx.so可以嗎?
不行!錯誤訊息如下:
symbol lookup error: /where-I-install-matlab/bin/glnx86/../../bin/glnx86/../../bin/glnx86/../../bin/glnx86/../../bin/glnx86/libmwmathcore.so: undefined symbol: mxReallocEx
所以, Matlab的libmx.so被砍掉怎辦?
不知道^^
/usr滿了似乎不影響重裝Matlab
給未來的裕翔
因為libmx.so被我砍了
苦無良策, 於是重裝matlab
不過昨天yum其他東西時
好像因為/usr滿了而失敗
(似乎還有空間, 我猜是inode用完, 可是inode又不容易用完~)
本來很擔心matlab也會裝失敗的
結果平安無事^^
改天再來研究怎麼處理/usr滿了的問題
因為libmx.so被我砍了
苦無良策, 於是重裝matlab
不過昨天yum其他東西時
好像因為/usr滿了而失敗
(似乎還有空間, 我猜是inode用完, 可是inode又不容易用完~)
本來很擔心matlab也會裝失敗的
結果平安無事^^
改天再來研究怎麼處理/usr滿了的問題
總是mex而不是m
給未來的裕翔
關於處理mex無法執行的問題
最後我決定逃避^^
在xxx.mexglx所在資料夾裡新建一個資料夾
把xxx.mexglx移過去
結果matlab顯示找不到
可是同名的m file明明也在當下的資料夾
重開matlab後
又發生mex無法執行的訊息, 而不是找不到
馬上把資料夾移到matlab路徑之外的地方, 像是家目錄
matlab又發生找不到的訊息
重開matlab後
產生新錯誤訊息了!可以確定找到同名的m file了
我個人結論:
關於matlab執行mex和m file的順序
我不知道怎麼改
不過預設是mex優先於m file
也許是MCALab的MCAPath的關係(或是maltab特性)
就是, 即使我在MCALab產生新資料夾
在重開matlab後也會被新增到path變數
而matlab執行function的順序似乎是先以mex找所有path
找不到再以m找所有path, 這可以解釋為什麼總是找到mex而非m file
把mex移到家目錄後, 開啟matlab執行function
會顯示找不到, 可是, 此時再把mex移回原來在matlab的位置後
依舊找不到
關於這點, 我覺得是因為在matlab開啟後
對所有在它path裡的function有做一個類似snapshot的東西
一開始沒有, 那就是沒有, 即使之後添加也當沒有
一開始有, 要用到就到所在位置執行, 突然找不到就秀錯誤訊息
以上
高興歸高興
已經確定就算成功執行m檔
還是有新的錯誤息……
關於處理mex無法執行的問題
最後我決定逃避^^
在xxx.mexglx所在資料夾裡新建一個資料夾
把xxx.mexglx移過去
結果matlab顯示找不到
可是同名的m file明明也在當下的資料夾
重開matlab後
又發生mex無法執行的訊息, 而不是找不到
馬上把資料夾移到matlab路徑之外的地方, 像是家目錄
matlab又發生找不到的訊息
重開matlab後
產生新錯誤訊息了!可以確定找到同名的m file了
我個人結論:
關於matlab執行mex和m file的順序
我不知道怎麼改
不過預設是mex優先於m file
也許是MCALab的MCAPath的關係(或是maltab特性)
就是, 即使我在MCALab產生新資料夾
在重開matlab後也會被新增到path變數
而matlab執行function的順序似乎是先以mex找所有path
找不到再以m找所有path, 這可以解釋為什麼總是找到mex而非m file
把mex移到家目錄後, 開啟matlab執行function
會顯示找不到, 可是, 此時再把mex移回原來在matlab的位置後
依舊找不到
關於這點, 我覺得是因為在matlab開啟後
對所有在它path裡的function有做一個類似snapshot的東西
一開始沒有, 那就是沒有, 即使之後添加也當沒有
一開始有, 要用到就到所在位置執行, 突然找不到就秀錯誤訊息
以上
高興歸高興
已經確定就算成功執行m檔
還是有新的錯誤息……
vim快速取代
給未來的裕翔
剛拿到一份列表:
name1,email
name2,email2
名稱,電子郵件列表
name3,email3
name4,email4
名稱,電子郵件列表
……
應要求把它換成
email1,email2,email3,……
首先以gvim開啟
在command模式
輸入 :%s/名.*\n/
接著 :%s/.*,/,/
接著 :%s/\n/
最後手動把第一行一開始的逗號去掉
大功告成!
好有成就感^^
剛拿到一份列表:
name1,email
name2,email2
名稱,電子郵件列表
name3,email3
name4,email4
名稱,電子郵件列表
……
應要求把它換成
email1,email2,email3,……
首先以gvim開啟
在command模式
輸入 :%s/名.*\n/
接著 :%s/.*,/,/
接著 :%s/\n/
最後手動把第一行一開始的逗號去掉
大功告成!
好有成就感^^
log server架設成功!
給未來的裕翔
雖然這沒什麼了不起
不過也夠我爽一陣子了^^
趁印象清晰時趕快寫筆記
本來 以為syslog和rsyslog的教學可以互通的
居然不行!
至少在log server不行!
很多syslog的教學說要在log server的
/etc/sysconfig/syslog裡面增加一個選項, -r
在此鄭重強調
對應到rsyslog的/etc/sysconfig/rsyslog裡, 什麼也不需要更動
只需要在/etc/rsyslog.conf裡面
把
#$ModLoad imudp.so
#$UDPServerRun 514
註解註解掉, 就可以當log server了^^
當然, 必須先重新啟動一下
service rsyslog restart
而在client端
也是修改/etc/rsyslog.conf
把log要存的位置
從檔案改成@log-server即可
client改完應該也要重新啟動吧
這我倒是沒注意
總之, 爽阿^^
ps: 設好之後, 馬上以logger “log server test”來測試一下
應該會在/var/log/messages裡出現吧
雖然這沒什麼了不起
不過也夠我爽一陣子了^^
趁印象清晰時趕快寫筆記
本來 以為syslog和rsyslog的教學可以互通的
居然不行!
至少在log server不行!
很多syslog的教學說要在log server的
/etc/sysconfig/syslog裡面增加一個選項, -r
在此鄭重強調
對應到rsyslog的/etc/sysconfig/rsyslog裡, 什麼也不需要更動
只需要在/etc/rsyslog.conf裡面
把
#$ModLoad imudp.so
#$UDPServerRun 514
註解註解掉, 就可以當log server了^^
當然, 必須先重新啟動一下
service rsyslog restart
而在client端
也是修改/etc/rsyslog.conf
把log要存的位置
從檔案改成@log-server即可
client改完應該也要重新啟動吧
這我倒是沒注意
總之, 爽阿^^
ps: 設好之後, 馬上以logger “log server test”來測試一下
應該會在/var/log/messages裡出現吧
Subscribe to:
Posts (Atom)