【Linux主機+架站+維護教學+遠端協助】專案 網路開展事業或在網路賺錢第一步: 【架設24小時賺錢網站主機】比網頁設計更優先! 你還在租用虛擬主機嗎? (租用不如自有主機!自己當家作主才是:王道!) 因租用會:限制空間大小、流量、PHP.ini修改、特定語法使用... 綁手綁腳,你還能有多出眾的作為? 替你架設Linux主機伺服器+影片教你維護 (還有遠端技術協助)讓你自己當家作主! 為協助學員快速架站(隨心所欲展開網路事業)總教頭特別規劃: 替你架設Linux主機專案 並教如何成為網管高手! 聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多! 參加了本專案,您無須再自我摸索曠日廢時→快速打通任都二脈 還有配套『加盟專案』,你可以現學現做,自然的實現:『事少、錢多、離家近!』的成功境界。

Linux主機(安裝與維護)

linux 啟動自動執行腳本

在 Linux 中,可以通過將腳本新增到啟動腳本中實現在系統啟動時自動執行腳本。

具體步驟如下:

  1. 編寫需要在啟動時執行的腳本檔案,例如 “myscript.sh”。
  2. 將腳本檔案複製到 /etc/init.d 目錄下,例如:
    
    
  • sudo cp myscript.sh /etc/init.d/
    
  • 授予腳本檔案執行權限,例如:
    
    
  • sudo chmod +x /etc/init.d/myscript.sh
    
  • 使用 update-rc.d 指令將腳本新增到啟動腳本中,例如:
    
    
  1. sudo update-rc.d myscript.sh defaults
    

    此指令將會將腳本新增到所有運行層級中。

  2. 重新啟動系統,腳本將會在啟動時自動執行。

如果您需要從啟動腳本中刪除腳本,可以使用以下指令:


sudo update-rc.d -f myscript.sh remove

希望這個回答可以幫助您實現在 Linux 啟動時自動執行腳本的需求。

效能優化的核心是找出系統的瓶頸點,問題找到了,優化的工作也就完成了大半; 這裡介紹的效能優化主要從兩個層面來介紹:系統層面和程式層面;

3.1. 分析系統瓶頸

系統響應變慢,首先得定位大致的問題出在哪裡,是IO瓶頸、CPU瓶頸、記憶體瓶頸還是程式導致的系統問題;

使用top工具能夠比較全面的檢視我們關注的點:

$top
    top - 09:14:56 up 264 days, 20:56,  1 user,  load average: 0.02, 0.04, 0.00
    Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
    Mem:    377672k total,   322332k used,    55340k free,    32592k buffers
    Swap:   397308k total,    67192k used,   330116k free,    71900k cached
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  2856  656  388 S  0.0  0.2   0:49.40 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   7:15.20 ksoftirqd/0
    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/
進入互動模式後:
  • 輸入M,程式清單按記憶體使用大小降冪排序,便於我們觀察最大記憶體使用者使用有問題(檢驗記憶體洩漏問題);
  • 輸入P,程式清單按CPU使用大小降冪排序,便於我們觀察最耗CPU資源的使用者是否有問題;
top第三行顯示現用的系統的,其中有兩個值很關鍵:
  • %id:閒置CPU時間百分比,如果這個值過低,顯示系統CPU存在瓶頸;
  • %wa:等待I/O的CPU時間百分比,如果這個值過高,顯示IO存在瓶頸;

3.2. 分析記憶體瓶頸

檢視記憶體是否存在瓶頸,使用top指令看比較麻煩,而free指令更為直觀:

[/home/weber#]free
             total       used       free     shared    buffers     cached
Mem:        501820     452028      49792      37064       5056     136732
-/+ buffers/cache:     310240     191580
Swap:            0          0          0
[/home/weber#]top
top - 17:52:17 up 42 days,  7:10,  1 user,  load average: 0.02, 0.02, 0.05
Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    501820 total,   452548 used,    49272 free,     5144 buffers
KiB Swap:        0 total,        0 used,        0 free.   136988 cached Mem

top工具顯示了free工具的第一行所有訊息,但真實可用的記憶體,還需要自己計算才知道; 系統實際可用的記憶體為free工具輸出第二行的free+buffer+cached;也就是第三行的free值191580;關於free指令各個值的詳情解讀,請參考這篇文章 free 查詢可用記憶體 ;

如果是因為缺少記憶體,系統響應變慢很明顯,因為這使得系統不停的做換入換出的工作;

進一步的監視記憶體使用情況,可使用vmstat工具,實時動態監視操作系統的記憶體和虛擬記憶體的動態變化。 參考: vmstat 監視記憶體使用情況 ;

3.3. 分析IO瓶頸

如果IO存在效能瓶頸,top工具中的%wa會偏高

進一步分析使用iostat工具:

/root$iostat -d -x -k 1 1
Linux 2.6.32-279.el6.x86_64 (colin)   07/16/2014      _x86_64_        (4 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.02     7.25    0.04    1.90     0.74    35.47    37.15     0.04   19.13   5.58   1.09
dm-0              0.00     0.00    0.04    3.05     0.28    12.18     8.07     0.65  209.01   1.11   0.34
dm-1              0.00     0.00    0.02    5.82     0.46    23.26     8.13     0.43   74.33   1.30   0.76
dm-2              0.00     0.00    0.00    0.01     0.00     0.02     8.00     0.00    5.41   3.28   0.00
  • 如果%iowait的值過高,表示硬碟存在I/O瓶頸。
  • 如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。
  • 如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;
  • 如果 await 遠大於 svctm,說明I/O 佇列太長,io響應太慢,則需要進行必要優化。
  • 如果avgqu-sz比較大,也表示有大量io在等待。

 

4. 分析程式呼叫

通過top等工具發現系統效能問題是由某個程式導致的之後,接下來我們就需要分析這個程式;繼續 查詢問題在哪;

這裡我們有兩個好用的工具: pstack和pstrace

pstack用來追蹤程式棧,這個指令在排查程式問題時非常有用,比如我們發現一個服務一直處於work狀態(如假死狀態,好似死迴圈),使用這個指令就能輕鬆定位問題所在;可以在一段時間內,多執行幾次pstack,若發現代碼棧總是停在同一個位置,那個位置就需要重點關注,很可能就是出問題的地方;

示例:檢視bash程式程式棧:

/opt/app/tdev1$ps -fe| grep bash
tdev1   7013  7012  0 19:42 pts/1    00:00:00 -bash
tdev1  11402 11401  0 20:31 pts/2    00:00:00 -bash
tdev1  11474 11402  0 20:32 pts/2    00:00:00 grep bash
/opt/app/tdev1$pstack 7013
#0  0x00000039958c5620 in __read_nocancel () from /lib64/libc.so.6
#1  0x000000000047dafe in rl_getc ()
#2  0x000000000047def6 in rl_read_key ()
#3  0x000000000046d0f5 in readline_internal_char ()
#4  0x000000000046d4e5 in readline ()
#5  0x00000000004213cf in ?? ()
#6  0x000000000041d685 in ?? ()
#7  0x000000000041e89e in ?? ()
#8  0x00000000004218dc in yyparse ()
#9  0x000000000041b507 in parse_command ()
#10 0x000000000041b5c6 in read_command ()
#11 0x000000000041b74e in reader_loop ()
#12 0x000000000041b2aa in main ()

而strace用來追蹤程式中的系統呼叫;這個工具能夠動態的追蹤程式執行時的系統呼叫和所接收的信號。是一個非常有效的檢驗、指導和除錯工具。系統管理員可以通過該指令容易地解決程式問題。

 

5. 優化程式代碼

優化自己開發的程式,建議採用以下準則:

  1. 二八法則:在任何一組東西中,最重要的只佔其中一小部分,約20%,其餘80%的儘管是多數,卻是次要的;在優化實踐中,我們將精力集中在優化那20%最耗時的代碼上,整體效能將有顯著的提升;這個很好理解。函數A雖然代碼量大,但在一次標準執行流程中,只呼叫了一次。而另一個函數B代碼量比A小很多,但被呼叫了1000次。顯然,我們更應關注B的優化。
  2. 編完代碼,再優化;編碼的時候總是考慮最佳效能未必總是好的;在強調最佳效能的編碼模式的同時,可能就損失了代碼的可讀性和開發效率;

gprof使用步驟

  1. 用gcc、g++、xlC編譯程式時,使用-pg參數,如:g++ -pg -o test.exe test.cpp編譯器會自動在目的代碼中插入用於效能測試的代碼片斷,這些代碼在程式運行時攫取並記錄函數的呼叫關係和呼叫次數,並記錄函數自身執行時間和被呼叫函數的執行時間。
  2. 執行編譯後的可執行程式,如:./test.exe。該步驟運行程式的時間會稍慢於標準編譯的可執行程式的運行時間。程式運行結束後,會在程式所在路徑下生成一個預設檔名為gmon.out的檔案,這個檔案就是記錄程式運行的效能、呼叫關係、呼叫次數等訊息的資料檔案。
  3. 使用gprof指令來分析記錄程式運行訊息的gmon.out檔案,如:gprof test.exe gmon.out則可以在顯示器上看到函數呼叫關聯的統計、分析訊息。上述訊息也可以採用gprof test.exe gmon.out> gprofresult.txt重導至文字檔案以便於後續分析。

關於gprof的使用案例。

6. 其它工具

除錯記憶體洩漏的工具valgrind,感興趣的朋友可以google了解。

OProfile: Linux 平台上的一個功能強大的效能分析工具,使用參考。

除了上面介紹的工具,還有一些比較全面的效能分析工具,比如sar(Linux系統上預設不安裝,需要手動安裝下); 將sar的常駐監控工具開啟後,能夠收集比較全面的效能分析資料。

程式除錯.調試

gdb 程式互動除錯

GDB是一個由GNU開源組織發佈的、UNIX/LINUX操作系統下的、基於指令行的、功能強大的程式除錯工具。

對於一名Linux下工作的c++程式員,gdb是必不可少的工具;

GDB中的指令固然很多,但我們只需掌握其中十個左右的指令,就大致可以完成日常的基本的程式除錯工作。

以下從一個完整的除錯過程簡單說明最基本的幾個指令;

$gdb programmer     # 啟動gdb
>break main         # 設定斷點
>run                # 運行除錯程式
>next               # 單步除錯
>print var1         # 在除錯過程中,我們需要檢視現用的某個變量值的時候,使用print 指令列印該值
>list               # 顯示現用的除錯處的原始碼
>info b             # 顯示現用的斷點設定情況

當你完成了第一個程式除錯之後,你當然會需要更多的指令:關於gdb常用指令及各種除錯方法詳見 gdb 除錯利器 ;

同時,你需要更高效的除錯:常用的除錯指令都會有單字元的縮寫,使用縮寫更方便;同時,直接敲換行表示重複執行上一步指令;這在單步除錯時非常有用;

pstack 追蹤棧空間

pstack是一個腳本工具,可顯示每個程式的棧追蹤。pstack 指令必須由相應程式的屬主或 root 運行。其核心實現就是使用了gdb以及thread apply all bt指令;

語法:

$pstrack <program-pid>

示例:

$ pstack 4551
Thread 7 (Thread 1084229984 (LWP 4552)):
#0  0x000000302afc63dc in epoll_wait () from /lib64/tls/libc.so.6
#1  0x00000000006f0730 in ub::EPollEx::poll ()
#2  0x00000000006f172a in ub::NetReactor::callback ()
#3  0x00000000006fbbbb in ub::UBTask::CALLBACK ()
#4  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#5  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#6  0x0000000000000000 in ?? ()

strace 分析系統呼叫

strace常用來追蹤程式執行時的系統呼叫和所接收的信號。在Linux世界,程式不能直接訪問硬體裝置,當程式需要訪問硬體裝置(比如讀取磁碟檔案,接收網路資料等等)時,必須由使用者態模式切換至內核態模式,通過系統呼叫訪問硬體裝置。strace可以追蹤到一個程式產生的系統呼叫,內含參數,返回值,執行消耗的時間。

完整程式:

strace -o output.txt -T -tt -e trace=all -p 28979

追蹤28979程式的所有系統呼叫(-e trace=all),並統計系統呼叫的花費時間,以及開始時間(以可視化的時分秒格式顯示),最後將記錄結果存在output.txt檔案裡面。

檢視程式正在做什麼(實時輸出程式執行系統呼叫的情況):

$strace -p <process-pid>

關於strace的詳細介紹,詳見 strace 追蹤程式中的系統呼叫

2. 目的檔案分析

nm

nm用來列出目的檔案的符號清單。

$nm myProgrammer
08049f28 d _DYNAMIC
08049ff4 d _GLOBAL_OFFSET_TABLE_
080484dc R _IO_stdin_used
         w _Jv_RegisterClasses
08049f18 d __CTOR_END__
08049f14 d __CTOR_LIST__
08049f20 D __DTOR_END__
08049f1c d __DTOR_LIST__
080485e0 r __FRAME_END__
08049f24 d __JCR_END__
08049f24 d __JCR_LIST__
0804a014 A __bss_start
0804a00c D __data_start
08048490 t __do_global_ctors_aux
08048360 t __do_global_dtors_aux
0804a010 D __dso_handle
         w __gmon_start__
08048482 T __i686.get_pc_thunk.bx
08049f14 d __init_array_end
08049f14 d __init_array_start
08048480 T __libc_csu_fini
08048410 T __libc_csu_init
         U __libc_start_main@@GLIBC_2.0
0804a014 A _edata
0804a01c A _end
080484bc T _fini
080484d8 R _fp_hw
080482b4 T _init
08048330 T _start
0804a014 b completed.6086
0804a00c W data_start
0804a018 b dtor_idx.6088
080483c0 t frame_dummy
080483e4 T main
         U printf@@GLIBC_2.0

這些包括可執行代碼的段稱為正文段。同樣地,資料段包括了不可執行的訊息或資料。另一種類型的段,稱為 BSS 段,它包括以符號資料開頭的塊。對於 nm 指令列出的每個符號,它們的值使用十六進位來表示(預設行為),並且在該符號前面加上了一個表示符號類型的編碼字元。

常見的各種編碼內含:

  • A 表示絕對 (absolute),這意味著不能將該值變更為其他的連線;
  • B 表示 BSS 段中的符號;
  • C 表示引用未起始化的資料的一般符號。

可以將目的檔案中所包括的不同的部分劃分為段。段可以包括可執行代碼、符號名稱、起始資料值和許多其他類型的資料。有關這些類型的資料的詳細訊息,可以閱讀 UNIX 中 nm 的 man 頁面,其中按照該指令輸出中的字元編碼分別對每種類型進行了描述。

在目的檔案階段,即使是一個簡單的 Hello World 程式,其中也包括了大量的細節訊息。nm 程式可用於列舉符號及其類型和值,但是,要更仔細地研究目的檔案中這些命名段的內容,需要使用功能更強大的工具。

其中兩種功能強大的工具是 objdump 和 readelf 程式。

註解

關於nm工具的參數說明及更多示例詳見 nm 目的檔案格式分析 ;

objdump

ogjdump工具用來顯示二進位檔案的訊息,就是以一種可閱讀的格式讓你更多地了解二進位檔案可能帶有的附加訊息。

$objdump -d myprogrammer
a.out:     file format elf32-i386


Disassembly of section .init:

080482b4 <_init>:
 80482b4:   53                      push   %ebx
 80482b5:   83 ec 08                sub    $0x8,%esp
 80482b8:   e8 00 00 00 00          call   80482bd <_init+0x9>
 80482bd:   5b                      pop    %ebx
 80482be:   81 c3 37 1d 00 00       add    $0x1d37,%ebx
 80482c4:   8b 83 fc ff ff ff       mov    -0x4(%ebx),%eax
 80482ca:   85 c0                   test   %eax,%eax
 80482cc:   74 05                   je     80482d3 <_init+0x1f>
 80482ce:   e8 3d 00 00 00          call   8048310 <__gmon_start__@plt>
 80482d3:   e8 e8 00 00 00          call   80483c0 <frame_dummy>
 80482d8:   e8 b3 01 00 00          call   8048490 <__do_global_ctors_aux>
 80482dd:   83 c4 08                add    $0x8,%esp
 80482e0:   5b                      pop    %ebx
 80482e1:   c3                      ret

Disassembly of section .plt:
...

每個可執行代碼段將在需要特定的事件時執行,這些事件內含庫的起始化和該程式本身主匯入點。

對於那些著迷於底層寫程式細節的程式員來說,這是一個功能非常強大的工具,可用於研究編譯器和彙編器的輸出。細節訊息,比如這段代碼中所顯示的這些訊息,可以揭示有關本地處理器本身運行模式的很多內容。對該處理器製造商提供的技術文件進行深入的研究,您可以收集關於一些有價值的訊息,通過這些訊息可以深入地了解內定的運行機制,因為功能程式提供了清晰的輸出。

註解

關於objdump工具的參數說明及更多示例詳見 objdump 二進位檔案分析 ;

readelf

這個工具和objdump指令提供的功能類似,但是它顯示的訊息更為具體,並且它不依賴BFD庫(BFD庫是一個GNU項目,它的目的就是希望通過一種統一的介面來處理不同的目的檔案);

$readelf -all a.out
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x8048330
  Start of program headers:          52 (bytes into file)
  Start of section headers:          4412 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         30
  Section header string table index: 27

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        08048154 000154 000013 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            08048168 000168 000020 00   A  0   0  4
  [ 3] .note.gnu.build-i NOTE            08048188 000188 000024 00   A  0   0  4
  [ 4] .gnu.hash         GNU_HASH        080481ac 0001ac 000020 04   A  5   0  4
  [ 5] .dynsym           DYNSYM          080481cc 0001cc 000050 10   A  6   1  4
  [ 6] .dynstr           STRTAB          0804821c 00021c 00004c 00   A  0   0  1
  [ 7] .gnu.version      VERSYM          08048268 000268 00000a 02   A  5   0  2
  [ 8] .gnu.version_r    VERNEED         08048274 000274 000020 00   A  6   1  4
  [ 9] .rel.dyn          REL             08048294 000294 000008 08   A  5   0  4
  [10] .rel.plt          REL             0804829c 00029c 000018 08   A  5  12  4
  [11] .init             PROGBITS        080482b4 0002b4 00002e 00  AX  0   0  4
  [12] .plt              PROGBITS        080482f0 0002f0 000040 04  AX  0   0 16
  [13] .text             PROGBITS        08048330 000330 00018c 00  AX  0   0 16
  [14] .fini             PROGBITS        080484bc 0004bc 00001a 00  AX  0   0  4
  [15] .rodata           PROGBITS        080484d8 0004d8 000011 00   A  0   0  4
  [16] .eh_frame_hdr     PROGBITS        080484ec 0004ec 000034 00   A  0   0  4
  [17] .eh_frame         PROGBITS        08048520 000520 0000c4 00   A  0   0  4
  [18] .ctors            PROGBITS        08049f14 000f14 000008 00  WA  0   0  4
  [19] .dtors            PROGBITS        08049f1c 000f1c 000008 00  WA  0   0  4
  [20] .jcr              PROGBITS        08049f24 000f24 000004 00  WA  0   0  4
  [21] .dynamic          DYNAMIC         08049f28 000f28 0000c8 08  WA  6   0  4
  [22] .got              PROGBITS        08049ff0 000ff0 000004 04  WA  0   0  4
  [23] .got.plt          PROGBITS        08049ff4 000ff4 000018 04  WA  0   0  4
  [24] .data             PROGBITS        0804a00c 00100c 000008 00  WA  0   0  4
  [25] .bss              NOBITS          0804a014 001014 000008 00  WA  0   0  4
  [26] .comment          PROGBITS        00000000 001014 00002a 01  MS  0   0  1
  [27] .shstrtab         STRTAB          00000000 00103e 0000fc 00      0   0  1
  [28] .symtab           SYMTAB          00000000 0015ec 000410 10     29  45  4
  [29] .strtab           STRTAB          00000000 0019fc 0001f9 00      0   0  1
  ...

ELF Header 為該檔案中所有段匯入顯示了詳細的摘要。在列舉出這些 Header 中的內容之前,您可以看到 Header 的具體數目。在研究一個較大的目的檔案時,該訊息可能非常有用。

除了所有這些段之外,編譯器可以將除錯訊息放入到目的檔案中,並且還可以顯示這些訊息。輸入下面的指令,仔細分析編譯器的輸出(假設您扮演了除錯程式的角色):

$readelf --debug-dump a.out | more

除錯工具,如 GDB,可以讀取這些除錯訊息,並且當程式在除錯器中運行的同時,您可以使用該工具顯示更具描述性的標示,而不是對代碼進行反彙編時的原始位址值。

註解

關於readelf工具的參數說明及更多示例詳見 readelf elf檔案格式分析 ;

size 檢視程式記憶體佔用

size這個工具用來檢視程式運行時各個段的實際記憶體佔用:

$size a.out
text           data     bss     dec     hex filename
1146            256       8    1410     582 a.out

file 檔案類型查詢

這個工具用於檢視檔案的類型;

比如我們在64位機器上發現了一個32位的庫,連結不上,這就有問題了:

$file a.out
a.out: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

也可以檢視Core檔案是由哪個程式生成:

$file core.22355

strings 查詢資料中的文字訊息

一個檔案中包括二進位資料和文字資料,如果只需要檢視其文字訊息,使用這個指令就很方便;過濾掉非字元資料,將文字訊息輸出:

$strings <objfile>

fuser 顯示檔案使用者

顯示所有正在使用著特殊的file, file system 或是 sockets的程式訊息;

$fuser -m -u redis-server
redis-server: 11552rce(weber) 22912rce(weber) 25501rce(weber)

使用了-m和-u選項,用來搜尋所有正在使用redis-server的所有程式的PID以及該程式的OWNER;

fuser通常被用在診斷系統的”resource busy”問題。如果你希望kill所有正在使用某一特殊的file, file system or sockets的程式的時候,你可以使用-k選項:

$fuser –k /path/to/your/filename

xxd 十六進位顯示資料

以十六進位模式顯示檔案,只顯示文字訊息:

$xxd a.out
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 0300 0100 0000 3083 0408 3400 0000  ........0...4...
0000020: 3c11 0000 0000 0000 3400 2000 0900 2800  <.......4. ...(.
0000030: 1e00 1b00 0600 0000 3400 0000 3480 0408  ........4...4...
0000040: 3480 0408 2001 0000 2001 0000 0500 0000  4... ... .......
0000050: 0400 0000 0300 0000 5401 0000 5481 0408  ........T...T...
...

od

通常使用od指令檢視特殊格式的檔案內容。通過指定該指令的不同選項可以以十進位、八進位、十六進位和ASCII碼來顯示檔案。

參數說明:

-A 指定位址基數,內含:

  • d 十進位
  • o 八進位(系統預設值)
  • x 十六進位
  • n 不列印位移值

-t 指定資料的顯示格式,主要的參數有:

  • c ASCII字元或反斜槓序列
  • d 有符號十進位數
  • f 浮點數
  • o 八進位(系統預設值為02)
  • u 無符號十進位數
  • x 十六進位數

除了選項c以外的其他選項後面都可以跟一個十進位數n,指定每個顯示值所包括的位元組數。

說明:od指令系統預設的顯示模式是八進位,這也是該指令的名稱由來(Octal Dump)。但這不是最有用的顯示模式,用ASCII碼和十六進位組合的模式能提供更有價值的訊息輸出。

以十六進位和字元同時顯示:

$od -Ax -tcx4 a.c
000000   #   i   n   c   l   u   d   e       <   s   t   d   i   o   .
              636e6923        6564756c        74733c20        2e6f6964
000010   h   >  \n  \n   v   o   i   d       m   a   i   n   (   )  \n
              0a0a3e68        64696f76        69616d20        0a29286e
000020   {  \n  \t   i   n   t       i       =       5   ;  \n  \t   p
              69090a7b        6920746e        35203d20        70090a3b
000030   r   i   n   t   f   (   "   h   e   l   l   o   ,   %   d   "
              746e6972        68222866        6f6c6c65        2264252c
000040   ,   i   )   ;  \n   }  \n
              3b29692c        000a7d0a
000047

以字元模式顯示:

$od -c a.c
0000000   #   i   n   c   l   u   d   e       <   s   t   d   i   o   .
0000020   h   >  \n  \n   v   o   i   d       m   a   i   n   (   )  \n
0000040   {  \n  \t   i   n   t       i       =       5   ;  \n  \t   p
0000060   r   i   n   t   f   (   "   h   e   l   l   o   ,   %   d   "
0000100   ,   i   )   ;  \n   }  \n
0000107

註:類似指令還有hexdump(十六進位輸出)

一般原始碼提供的程式安裝需要通過配置、編譯、安裝三個步驟:

  1. 配置做的工作主要是檢查現用的環境是否滿足要安裝軟體的依賴關係,以及設定程式安裝所需要的起始化訊息,比如安裝路徑,需要安裝哪些元件;配置完成,會生成makefile檔案供第二步make使用。
  2. 編譯是對源檔案進行編譯連結生成可執行程式。
  3. 安裝做的工作就簡單多了,就是將生成的可執行檔案複製到配置時設定的起始路徑下。

1. 配置

查詢可用的配置選項:

./configure --help

配置路徑:

./configure --prefix=/usr/local/snmp

–prefix是配置使用的最常用選項,設定程式安裝的路徑;

2. 編譯

編譯使用make編譯:

make -f myMakefile

通過-f選項顯示指定需要編譯的makefile;如果待使用makefile檔案在現用的路徑,且檔名為以下幾個,則不用顯示指定:

makefile Makefile

makefile編寫的要點

  • 必須滿足第一條規則,滿足後停止
  • 除第一條規則,其他無順序

makefile中的全局自變量

  • $@目的檔名
  • @^所有前提名,除副本
  • @+所有前提名,含副本
  • @<一個前提名
  • @?所有新於目的檔案的前提名
  • @*目的檔案的基名稱

更多選取 CMake

CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或是project檔案。使用CMake,能夠使程式員從複雜的編譯連線過程中解脫出來。它使用一個名為 CMakeLists.txt 的檔案來描述構建過程,可以生成標準的構建檔案,如 Unix/Linux 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。

編譯依賴的庫

makefile編譯過程中所依賴的非標準庫和標頭檔路徑需要顯示指明:

CPPFLAGS -I標示非標準標頭檔存放路徑
LDFLAGS  -L標示非標準庫存放路徑

如果CPPFLAGS和LDFLAGS已在使用者環境變量中設定並且匯出(使用export關鍵字),就不用再顯示指定;

make -f myMakefile LDFLAGS='-L/var/xxx/lib -L/opt/mysql/lib'
    CPPFLAGS='-I/usr/local/libcom/include -I/usr/local/libpng/include'

警示

連結多庫時,多個庫之間如果有依賴,需要注意書寫的順序,右邊是左邊的前提;

g++編譯

g++ -o unixApp unixApp.o a.o b.o

選項說明:

  • -o:指明生成的目的檔案
  • -g:加入除錯訊息
  • -E: 檢視中間檔案

應用:查詢巨集展開的中間檔案:

在g++的編譯選項中,加入 -E選項,然後去掉-o選項 ,重導至一個檔案中即可:

g++ -g -E unixApp.cpp  -I/opt/app/source > midfile

查詢應用程式需要連結的庫:

$ldd myprogrammer
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003995400000)

3. 安裝

安裝做的工作就簡單多了,就是將生成的可執行檔案複製到配置時設定的起始路徑下:

$make install

其實 install 就是makefile中的一個規則,開啟makefile檔案後可以檢視程式安裝的所做的工作。

Linux系統中的wget是一個下載檔案的工具,它用在指令行下。對於Linux使用者是必不可少的工具,我們經常要下載一些軟體或從遠端伺服器恢復備份到本地伺服器。wget支援HTTP,HTTPS和FTP協定,可以使用HTTP代理。

wget 可以追蹤HTML頁面上的連結依次下載來建立遠端伺服器的本地版本,完全重建原始站台的目錄結構。這又常被稱作”遞歸下載”。在遞歸下載的時候,wget 遵循Robot Exclusion標準(/robots.txt). wget可以在下載的同時,將連結轉換成指向本地檔案,以方便離線瀏覽。

wget 非常穩定,它在頻寬很窄的情況下和不穩定網路中有很強的適應性.如果是由於網路的原因下載失敗,wget會不斷的嘗試,直到整個檔案下載完畢。如果是伺服器打斷下載過程,它會再次聯到伺服器上從停止的地方繼續下載。這對從那些限定了連結時間的伺服器上下載大檔案非常有用。

17.1. 指令格式

wget [參數] [URL位址]

17.2. 指令參數:

啟動參數:

  • -V, –version 顯示wget的版本後離開
  • -h, –help 列印語法幫助
  • -b, –background 啟動後轉入後台執行
  • -e, –execute=COMMAND 執行’.wgetrc’格式的指令,wgetrc格式參見/etc/wgetrc或~/.wgetrc

記錄和輸入檔案參數

  • -o, –output-file=FILE 把記錄寫到FILE檔案中
  • -a, –append-output=FILE 把記錄追加到FILE檔案中
  • -d, –debug 列印除錯輸出
  • -q, –quiet 安靜模式(沒有輸出)
  • -v, –verbose 冗長模式(這是預設設定)
  • -nv, –non-verbose 關掉冗長模式,但不是安靜模式
  • -i, –input-file=FILE 下載在FILE檔案中出現的URLs
  • -F, –force-html 把輸入檔案當作HTML格式檔案對待
  • -B, –base=URL 將URL作為在-F -i參數特殊的檔案中出現的相對連結的首碼

–sslcertfile=FILE 可選用戶端證書 –sslcertkey=KEYFILE 可選用戶端證書的KEYFILE –egd-file=FILE 指定EGD socket的檔名

下載參數

  • -bind-address=ADDRESS 指定本地使用位址(主機名或IP,當本地有多個IP或名字時使用)
  • -t, –tries=NUMBER 設定最大嘗試連結次數(0 表示無限制).
  • -O –output-document=FILE 把文件寫到FILE檔案中
  • -nc, –no-clobber 不要覆蓋存在的檔案或使用.#首碼
  • -c, –continue 接著下載沒下載完的檔案
  • -progress=TYPE 設定程式條標示
  • -N, –timestamping 不要重新下載檔案除非比本地檔案新
  • -S, –server-response 列印伺服器的回應
  • -T, –timeout=SECONDS 設定響應逾時的秒數
  • -w, –wait=SECONDS 兩次嘗試之間間隔SECONDS秒
  • -waitretry=SECONDS 在重新連結之間等待1…SECONDS秒
  • -random-wait 在下載之間等待0…2*WAIT秒
  • -Y, -proxy=on/off 開啟或關閉代理
  • -Q, -quota=NUMBER 設定下載的容量限制
  • -limit-rate=RATE 限定下載輸率

目錄參數

  • -nd –no-directories 不建立目錄
  • -x, –force-directories 強制建立目錄
  • -nH, –no-host-directories 不建立主機目錄
  • -P, –directory-prefix=PREFIX 將檔案儲存到目錄 PREFIX/…
  • -cut-dirs=NUMBER 忽略 NUMBER層遠端目錄

HTTP 選項參數

  • -http-user=USER 設定HTTP使用者名為 USER.
  • -http-passwd=PASS 設定http密碼為 PASS
  • -C, –cache=on/off 容許/不容許伺服器端的資料快取 (一般情況下容許)
  • -E, –html-extension 將所有text/html文件以.html副檔案名儲存
  • -ignore-length 忽略 ‘Content-Length’頭域
  • -header=STRING 在headers中插入字串 STRING
  • -proxy-user=USER 設定代理的使用者名為 USER
  • proxy-passwd=PASS 設定代理的密碼為 PASS
  • referer=URL 在HTTP請求中包括 ‘Referer: URL’頭
  • -s, –save-headers 儲存HTTP頭到檔案
  • -U, –user-agent=AGENT 設定代理的名稱為 AGENT而不是 Wget/VERSION
  • no-http-keep-alive 關閉 HTTP活動連結 (永遠連結)
  • cookies=off 不使用 cookies
  • load-cookies=FILE 在開始會話前從檔案 FILE中加載cookie
  • save-cookies=FILE 在會話結束後將 cookies儲存到 FILE檔案中

FTP 選項參數

  • -nr, –dont-remove-listing 不移走 ‘.listing’檔案
  • -g, –glob=on/off 開啟或關閉檔名的 globbing機制
  • passive-ftp 使用被動傳輸模式 (預設值).
  • active-ftp 使用主動傳輸模式
  • retr-symlinks 在遞歸的時候,將連結指向檔案(而不是目錄)

遞歸下載參數

  • -r, –recursive 遞歸下載--慎用!
  • -l, –level=NUMBER 最大遞歸深度 (inf 或 0 代表無窮)
  • -delete-after 在現在完畢後局部刪除檔案
  • -k, –convert-links 轉換非相對連結為相對連結
  • -K, –backup-converted 在轉換檔案X之前,將之備份為 X.orig
  • -m, –mirror 等價於 -r -N -l inf -nr
  • -p, –page-requisites 下載顯示HTML檔案的所有圖片
    遞歸下載中的包括和不包括(accept/reject):
  • -A, –accept=LIST 分號分隔的被接受副檔案名的清單
  • -R, –reject=LIST 分號分隔的不被接受的副檔案名的清單
  • -D, –domains=LIST 分號分隔的被接受域的清單
  • -exclude-domains=LIST 分號分隔的不被接受的域的清單
  • -follow-ftp 追蹤HTML文件中的FTP連結
  • -follow-tags=LIST 分號分隔的被追蹤的HTML標籤的清單
  • -G, –ignore-tags=LIST 分號分隔的被忽略的HTML標籤的清單
  • -H, –span-hosts 當遞歸時轉到外部主機
  • -L, –relative 僅僅追蹤相對連結
  • -I, –include-directories=LIST 容許目錄的清單
  • -X, –exclude-directories=LIST 不被包括目錄的清單
  • -np, –no-parent 不要追溯到父目錄

wget -S –spider url 不下載只顯示過程

17.3. 使用案例

案例1:使用wget下載單個檔案

$wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip

說明:以上例子從網路下載一個檔案並儲存在現用的目錄,在下載的過程中會顯示進度條,包括(下載完成百分比,已經下載的位元組,現用的下載速度,剩餘下載時間)。

案例2:使用wget -O下載並以不同的檔名儲存

$wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080

wget預設會以最後一個符合”/”的後面的字元來指令,對於動態連結的下載通常檔名會不正確。

案例3:使用wget –limit -rate限速下載

$wget --limit-rate=300k http://www.minjieren.com/wordpress-3.1-zh_CN.zip

當你執行wget的時候,它預設會佔用全部可能的寬頻下載。但是當你準備下載一個大檔案,而你還需要下載其它檔案時就有必要限速了。

案例4:使用wget -c斷點續傳

$wget -c http://www.minjieren.com/wordpress-3.1-zh_CN.zip

使用wget -c重新啟動下載中斷的檔案,對於我們下載大檔案時突然由於網路等原因中斷非常有幫助,我們可以繼續接著下載而不是重新下載一個檔案。需要繼續中斷的下載時可以使用-c參數。

案例5:使用wget -b後台下載

$wget -b http://www.minjieren.com/wordpress-3.1-zh_CN.zip
Continuing in background, pid 1840.
Output will be written to 'wget-log'.

對於下載非常大的檔案的時候,我們可以使用參數-b進行後台下載。

你可以使用以下指令來察看下載進度:

$tail -f wget-log

案例6:偽裝代理名稱下載

wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.minjieren.com/wordpress-3.1-zh_CN.zip

有些網站能通過根據判斷代理名稱不是瀏覽器而拒絕你的下載請求。不過你可以通過–user-agent參數偽裝。

案例7:使用wget -i下載多個檔案

首先,儲存一份下載連結檔案,接著使用這個檔案和參數-i下載:

$cat > filelist.txt
url1
url2
url3
url4

$wget -i filelist.txt

案例8:使用wget –mirror對映網站

$wget --mirror -p --convert-links -P ./LOCAL URL
下載整個網站到本地
  • -miror:開戶對映下載
  • -p:下載所有為了html頁面顯示標準的檔案
  • -convert-links:下載後,轉換成本地的連結
  • -P ./LOCAL:儲存所有檔案和目錄到本地指定目錄

案例9: 使用wget -r -A下載指定格式檔案

$wget -r -A.pdf url
可以在以下情況使用該功能:
  • 下載一個網站的所有圖片
  • 下載一個網站的所有視訊
  • 下載一個網站的所有PDF檔案

案例10:使用wget FTP下載

$wget ftp-url
$wget --ftp-user=USERNAME --ftp-password=PASSWORD url
可以使用wget來完成ftp連結的下載
  • 使用wget匿名ftp下載:wget ftp-url
  • 使用wget使用者名和密碼認證的ftp下載:wget –ftp-user=USERNAME –ftp-password=PASSWORD url

17.4. 編譯安裝

使用如下指令編譯安裝:

tar zxvf wget-1.9.1.tar.gz
cd wget-1.9.1
./configure
make
make install

SCP   (安全複製協定) 是一種網路協定,用於 Linux ( Unix 在網路上的 ) 系統之間安全地複製檔案/資料夾。 要傳輸,請使用 scp指令行實用程式, cp(複製)指令 的更安全變體。

連線複製時保護您的資料 ,在通過SSH(安全外殼) SCP通過加密檔案和 密碼 。 因此,即使流量被攔截,訊息仍然是加密的。

在以下情況下使用 SCP:

  • 將檔案從 本地主機 複製到遠端主機。
  • 將檔案從遠端主機複製到本地主機。
  • 之間複製檔案 在兩個遠端伺服器 。

本指南向您展示如何 使用 SCP 指令複製檔案,並內含 13 個實際使用的指令示例

如何使用SCP命令傳輸和復製文件。

先決條件

  • 伺服器上的安全 shell 登入
  • (可選)用戶端和伺服器上的根訪問權限
  • 伺服器系統上的安全 shell 登入

SCP 指令語法

使用的語法 scp指令是:

scp [option] [user_name@source_host:path/to/source/file] [user_name@target_host:target/path] 

如果省略:

  • ,該指令預設為現用的使用者。 使用者名 主機(或目的)的
  • 複製 檔案 指令中的 path/to/source (或 target/path ),程式在本地搜尋(或

使用遠端檔案時,請始終指定使用者和主機規範。

確保使用對要在源系統上複製的檔案具有讀取權限的帳戶。 此外,您需要使用對 具有寫入權限的帳戶。 目的系統上儲存檔案的目錄

scp指令在寫入之前不檢查目的位置。 目的中任何同名的檔案都將被覆蓋,恕不另行知會。

SCP 指令選項

可以加入很多 scp指令選項可自訂並加速該過程。 選項作為屬性加入在 scp指令。

每個選項都有一個簡短的單字元形式和一個較長的描述性等效形式。

-1 使用協定 1。
-2 使用協定 2。
-4 僅使用 Ipv4 位址。
-6 僅使用 IPv6 位址。
-B 以批處理模式運行,禁用對使用者輸入的所有查詢。
-b buffer_size 指定用於資料傳輸的緩衝區大小。 如果未指定,則使用預設值 – 32768 位元組。
-C 啟用壓縮。
-c cipher 選取 資料加密的密碼 。 如果未指定,SCP 將使用預設值 – ‘AnyStdCipher’。
-D debug_level 設定除錯層級(1、2、3 或 99)。
-d 僅當目的目錄已存在時才複製檔案。
-F file 的替代配置檔 指定SSH
-h 顯示指令選項清單。
-i file 指定從中讀取身份以進行公鑰身份驗證的檔案。
-l limit 限制 頻寬 ( 以 Kbit/s為單位指定限制 )。
-o ssh_option 以 ssh_config 格式將選項設定為 SSH。
-P port 指定 連接埠 要連線的 。 如果未指定,SCP 使用連接埠 22。
-q 在安靜模式下運行 SCP。
-Q 禁用顯示任何檔案傳輸統計訊息。
-r 遞歸複製。
-S program 使用特殊的程式進行加密連線。
-u 複製完成後刪除源檔案。
-v 啟用詳細模式,將除錯層級設定為 2。

SCP 指令示例

為了更好地理解這個有用的實用程式,請檢視以下內容 scp指令示例。

將檔案從本地複製到遠端伺服器

在下面的示例中,我們將示例檔案從本地主機複製到遠端伺服器:

scp Desktop/sample_example.txt root@136.183.142.28:/home/remote_dir 

該指令包括以下訊息:

  • Desktop/sample_example.txt– 正在複製的檔案的名稱及其位置。
  • root@136.183.142.27使用者名和 IP位址。 -遠端伺服器的
  • /home/remote_dir– 存儲複製檔案的位置。
使用 scp 命令將文件從本地服務器複製到遠程服務器。

將檔案從遠端伺服器複製到本地主機

要將示例檔案從遠端主機複製到本地主機,我們運行:

scp 147.182.143.27:/home/remote_dir/sample_example.txt home/Desktop

提供的訊息是

  • root@147.182.143.27– 檔案現用的所在的遠端伺服器的使用者名和 IP 位址。
  • /home/remote_dir/sample_example.txt– 正在複製的檔案的名稱及其位置。
  • home/Desktop– 存儲複製檔案的位置。
使用 scp 命令將文件從遠程服務器複製到本地服務器。

將檔案從一台遠端伺服器複製到另一台遠端伺服器

接下來,讓我們看看如何使用以下指令將檔案從一台遠端伺服器複製到另一台遠端伺服器 scp指令:

scp root@147.182.143.27:/home/remote_dir/sample_example.txt sofija@146.153.129.25:home/Desktop

上面的指令指定:

  • root@147.182.143.27– 檔案現用的所在的遠端伺服器的使用者名和 IP 位址。
  • /home/remote_dir/sample_example.txt– 正在複製的檔案的名稱及其位置。
  • sofija@146.153.129.25– 我們要復製檔案的遠端伺服器的使用者名和 IP 位址。
  • home/Desktop– 遠端伺服器上存儲複製檔案的位置。

使用 SCP 複製多個檔案

SCP 容許您在單個指令中複製多個檔案。 例如,以下指令將兩個檔案從本地主機複製到遠端伺服器:

scp example/sample1.txt example/sample2.txt root@147.182.143.27:/home/remote_dir

它內含以下訊息:

  • example/sample1.txt– 正在複製的第一個檔案的名稱和位置。
  • example/sample2.txt– 正在複製的第二個檔案的名稱和位置。
  • root@147.182.143.27– 接收檔案的遠端伺服器的使用者名和 IP 位址。
  • /home/remote_dir– 遠端伺服器上存儲複製檔案的位置。
使用 scp 命令將多個文件從本地服務器複製到遠程服務器。

將資料夾從本地主機遞歸複製到遠端伺服器

除了檔案之外, scp還可以安全地將 資料夾 複製到遠端伺服器或從遠端伺服器複製資料夾。 以下指令顯示如何以遞歸模式將示例目錄複製到遠端伺服器:

scp -r example root@147.182.143.27:/home/remote_dir

該指令內含:

  • -r– 遞歸複製資料夾的選項。
  • example– 從本地伺服器複製的資料夾的名稱。
  • root@147.182.143.27– 接收資料夾的遠端伺服器的使用者名和 IP 位址。
  • /home/remote_dir– 遠端伺服器上存儲複製的資料夾的位置。

使用特定連接埠通過 SCP 複製檔案

預設情況下,SCP 使用連接埠 22。但是,如果 遠端系統配置為偵聽 不同連接埠上的 SSH 請求,請使用 –P開關來指定連接埠。

例如,以下指令使用連接埠 2222 將檔案從本地複製到遠端伺服器:

scp -P 2222  Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir

上述指令的組成部分是:

  • -P 2222– 使用連接埠 2222。
  • Desktop/sample_example.txt– 您要複製的檔名及其位置。
  • root@147.182.143.27– 接收檔案的遠端伺服器的使用者名和 IP 位址。
  • /home/remote_dir– 遠端伺服器上存儲複製檔案的位置。

在安靜模式下使用 SCP 複製檔案

運行一個 scp安靜模式下的指令意味著禁止在輸出中顯示進度表和非錯誤訊息。 為此,您需要加入 -q選項:

scp -q Desktop/sample_example.txt root@136.183.142:/home/remote_dir
在安靜模式下使用 scp 命令複製文件。

在詳細模式下使用 SCP 複製檔案

你可以運行 scp在詳細模式下加入 -v選項將除錯層級設定為 2。這樣做會在輸出中列印除錯訊息,這可以幫助您排除故障。

加入 -v之後的選項 scp啟用詳細模式,如下例所示:

scp -v Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir
在詳細模式下使用 scp 命令複製文件。

使用 SCP 和限制頻寬複製檔案

另一個有用的選項是限制所使用的頻寬 scp指令通過加入 -l範圍。 這在複製大檔案以防止 SCP 耗盡頻寬時特別有用。

限制頻寬時,您需要指定以千位/秒為單位的數字。 請記住 1 位元組 = 8 位。 因此,如果要將 SCP 的頻寬限制為 100 KB/s,則 l 的值(以 kbps 為單位)將為 800 (100 x 8),如以下指令所示:

scp -l 800 Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir

使用 SCP 更快地複製檔案

要加快從一台伺服器到另一台伺服器的檔案傳輸速度,請加入 -C在傳輸檔案時壓縮檔的選項。 一旦檔案到達目的地,它就會恢復到標準大小。

scp -C Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir

使用特定密碼複製帶有 SCP 的檔案

預設情況下,SCP 使用 AES-128 加密檔案。 但是,那 -c選項容許您變更 SCP 將用於加密檔案的密碼。

例如,為了提高安全性,您可以切換到 3des 加密,如下例所示:

scp -c 3des Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir

使用 IPv4 或 IPv6 通過 SCP 複製檔案

您可以根據需要通過加入 -4 -6 屬性來強制 SCP 僅使用 IPv4 或 IPv6。

要將示例檔案從本地伺服器複製到僅使用 IPv6 的遠端主機,您可以運行:

scp -6 Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir

注意: 了解 IPv4 和 IPv6 之間的主要區別。

使用 SCP 保留檔案屬性複製檔案

要使用 SCP 複製檔案並保留檔案屬性(例如修改和訪問時間、模式和權限),請使用 -p選項:

scp -p Desktop/sample_example.txt root@147.182.143.27:/home/remote_dir

結論

在本指南中,您已經了解了 scp指令是什麼以及如何使用它來保護檔案傳輸。

這作為 FTP 的替代品特別有用,因為預設情況下 FTP 本質上是不安全的。 還 安全複製協定 遵循一般指令行和 SSH 功能,有助於建立用於管理 Linux 電腦之間的檔案的無縫指令集。

 

備註:本文引用來至:phoenixnap.com

 

scp 跨機遠端複製

scp是secure copy的簡寫,用於在Linux下進行遠端複製檔案的指令,和它類似的指令有cp,不過cp只是在本機進行複製不能跨伺服器,而且scp傳輸是加密的。當你伺服器硬碟變為唯讀 read only system時,用scp可以幫你把檔案移出來。

註解

類似的工具有rsync;scp消耗資源少,不會提高多少系統負荷,在這一點上,rsync就遠遠不及它了。rsync比scp會快一點,但當小檔案多的情況下,rsync會導致硬碟I/O非常高,而scp基本不影響系統標準使用。

1. 指令格式:

scp [參數] [原路徑] [目的路徑]

2. 指令參數:

  • -1 強制scp指令使用協定ssh1
  • -2 強制scp指令使用協定ssh2
  • -4 強制scp指令只使用IPv4尋址
  • -6 強制scp指令只使用IPv6尋址
  • -B 使用批處理模式(傳輸過程中不詢問傳輸密碼或短語)
  • -C 容許壓縮。(將-C標誌傳遞給ssh,從而開啟壓縮功能)
  • -p 留原檔案的修改時間,訪問時間和訪問權限。
  • -q 不顯示傳輸進度條。
  • -r 遞歸複製整個目錄。
  • -v 詳細模式顯示輸出。scp和ssh(1)會顯示出整個過程的除錯訊息。這些訊息用於除錯連線,驗證和配置問題。
  • -c cipher 以cipher將資料傳輸進行加密,這個選項將直接傳遞給ssh。
  • -F ssh_config 指定一個替代的ssh配置檔,此參數直接傳遞給ssh。
  • -i identity_file 從指定檔案中讀取傳輸時使用的密鑰檔案,此參數直接傳遞給ssh。
  • -l limit 限定使用者所能使用的頻寬,以Kbit/s為單位。
  • -o ssh_option 如果習慣於使用ssh_config(5)中的參數傳遞模式,
  • -P port 注意是大寫的P, port是指定資料傳輸用到的連線埠號
  • -S program 指定加密傳輸時所使用的程式。此程式必須能夠理解ssh(1)的選項。

3. 使用說明

從本地伺服器複製到遠端伺服器

複製檔案:

$scp local_file remote_username@remote_ip:remote_folder
$scp local_file remote_username@remote_ip:remote_file
$scp local_file remote_ip:remote_folder
$scp local_file remote_ip:remote_file

指定了使用者名,指令執行後需要輸入使用者密碼;如果不指定使用者名,指令執行後需要輸入使用者名和密碼;

複製目錄:

$scp -r local_folder remote_username@remote_ip:remote_folder
$scp -r local_folder remote_ip:remote_folder

第1個指定了使用者名,指令執行後需要輸入使用者密碼; 第2個沒有指定使用者名,指令執行後需要輸入使用者名和密碼;

註解

從遠端複製到本地的scp指令與上面的指令一樣,只要將從本地複製到遠端的指令後面2個參數互換順序就行了。

4. 使用示例

案例1:從遠處複製檔案到本地目錄

$scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/

說明: 從10.6.159.147機器上的/opt/soft/的目錄中下載demo.tar 檔案到本地/opt/soft/目錄中

案例2:從遠處複製到本地

$scp -r root@10.6.159.147:/opt/soft/test /opt/soft/

說明: 從10.6.159.147機器上的/opt/soft/中下載test目錄到本地的/opt/soft/目錄來。

案例3:上傳本地檔案到遠端機器指定目錄

$scp /opt/soft/demo.tar root@10.6.159.147:/opt/soft/scptest

說明: 複製本地opt/soft/目錄下的檔案demo.tar 到遠端機器10.6.159.147的opt/soft/scptest目錄

案例4:上傳本地目錄到遠端機器指定目錄

$scp -r /opt/soft/test root@10.6.159.147:/opt/soft/scptest

說明: 上傳本地目錄 /opt/soft/test到遠端機器10.6.159.147上/opt/soft/scptest的目錄中

crontab 定時任務

通過crontab 指令,我們可以在固定的間隔時間執行特殊的系統指令或 shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。這個指令非常適合週期性的日誌分析或資料備份等工作。

1. 指令格式

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

2. 指令參數

  • -u user:用來設定某個使用者的crontab服務;
  • file:file是指令檔案的名字,表示將file做為crontab的任務清單檔案並載入crontab。如果在指令行中沒有指定這個檔案,crontab指令將接受標準輸入(鍵盤)上鍵入的指令,並將它們載入crontab。
  • -e:編輯某個使用者的crontab檔案內容。如果不指定使用者,則表示編輯現用的使用者的crontab檔案。
  • -l:顯示某個使用者的crontab檔案內容,如果不指定使用者,則表示顯示現用的使用者的crontab檔案內容。
  • -r:從/var/spool/cron目錄中刪除某個使用者的crontab檔案,如果不指定使用者,則預設刪除現用的使用者的crontab檔案。
  • -i:在刪除使用者的crontab檔案時給確認提示。

3. crontab的檔案格式

分 時 日 月 星期 要運行的指令

  • 第1列分鐘0~59
  • 第2列小時0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要運行的指令

4. 常用方法

建立一個新的crontab檔案

向cron程式送出一個crontab檔案之前,首先要設定環境變量EDITOR。cron程式根據它來確定使用哪個編輯器編輯crontab檔案。9 9 %的UNIX和LINUX使用者都使用vi,如果你也是這樣,那麼你就編輯$HOME目錄下的. profile檔案,在其中加入這樣一行:

EDITOR=vi; export EDITOR

然後儲存並離開。不妨建立一個名為<user> cron的檔案,其中<user>是使用者名,例如, davecron。在該檔案中加入如下的內容。

# (put your own initials here)echo the date to the console every
# 15minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console

儲存並離開。注意前面5個域用空格分隔。

在上面的例子中,系統將每隔1 5分鐘向控制台輸出一次現用的時間。如果系統崩潰或掛起,從最後所顯示的時間就可以一眼看出系統是什麼時間停止工作的。在有些系統中,用tty1來表示控制台,可以根據實際情況對上面的例子進行相應的修改。為了送出你剛剛建立的crontab檔案,可以把這個新建立的檔案作為cron指令的參數:

$ crontab davecron

現在該檔案已經送出給cron程式,它將每隔1 5分鐘運行一次。同時,新建立檔案的一個副本已經被放在/var/spool/cron目錄中,檔名就是使用者名(即dave)。

列出crontab檔案

使用-l參數列出crontab檔案:

$ crontab -l
0,15,30,45 18-06 * * * /bin/echo `date` > dev/tty1

可以使用這種方法在$HOME目錄中對crontab檔案做一備份:

$ crontab -l > $HOME/mycron

這樣,一旦不小心誤刪了crontab檔案,可以用上一節所講述的方法迅速恢復。

編輯crontab檔案

如果希望加入、刪除或編輯crontab檔案中的條目,而EDITOR環境變量又設定為vi,那麼就可以用vi來編輯crontab檔案:

$ crontab -e

可以像使用vi編輯其他任何檔案那樣修改crontab檔案並離開。如果修改了某些條目或加入了新的條目,那麼在儲存該檔案時, cron會對其進行必要的完整性檢查。如果其中的某個域出現了超出容許範圍的值,它會提示你。 我們在編輯crontab檔案時,沒準會加入新的條目。例如,加入下面的一條:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name 'core' -exec rm {} \;

儲存並離開。

註解

最好在crontab檔案的每一個條目之上加入一條注解,這樣就可以知道它的功能、運行時間,更為重要的是,知道這是哪位使用者的定時作業。

刪除crontab檔案

$crontab -r

5. 使用案例

案例1:每1分鐘執行一次myCommand

* * * * * myCommand

案例2:每小時的第3和第15分鐘執行

3,15 * * * * myCommand

案例3:在上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * * myCommand

案例4:每隔兩天的上午8點到11點的第3和第15分鐘執行

3,15 8-11 */2  *  * myCommand

案例5:每週一上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * 1 myCommand

案例6:每晚的21:30重啟smb

30 21 * * * /etc/init.d/smb restart

案例7:每月1、10、22日的4 : 45重啟smb

45 4 1,10,22 * * /etc/init.d/smb restart

案例8:每週六、週日的1 : 10重啟smb

10 1 * * 6,0 /etc/init.d/smb restart

案例9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb

0,30 18-23 * * * /etc/init.d/smb restart

案例10:每星期六的晚上11 : 00 pm重啟smb

0 23 * * 6 /etc/init.d/smb restart

案例11:每一小時重啟smb

* */1 * * * /etc/init.d/smb restart

案例12:晚上11點到早上7點之間,每隔一小時重啟smb

0 23-7 * * * /etc/init.d/smb restart

6. 使用注意事項

注意環境變量問題

有時我們建立了一個crontab,但是這個任務卻無法自動執行,而手動執行這個任務卻沒有問題,這種情況一般是由於在crontab檔案中沒有配置環境變量引起的。

在crontab檔案中定義多個調度任務時,需要特別注環境變量的設定,因為我們手動執行某個任務時,是在現用的shell環境下進行的,程式當然能找到環境變量,而系統自動執行任務調度時,是不會加載任何環境變量的,因此,就需要在crontab檔案中指定任務運行所需的所有環境變量,這樣,系統執行任務調度時就沒有問題了。

不要假定cron知道所需要的特殊環境,它其實並不知道。所以你要保證在shelll腳本中提供所有必要的路徑和環境變量,除了一些自動設定的全局變量。所以注意如下3點:

  1. 腳本中涉及檔案路徑時寫全局路徑;

  2. 腳本執行要用到java或其他環境變量時,通過source指令引入環境變量,如:

    cat start_cbp.sh
    !/bin/sh
    source /etc/profile
    export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
    /usr/local/jboss-4.0.5/bin/run.sh -c mev &
    
  3. 當手動執行腳本OK,但是crontab死活不執行時,很可能是環境變量惹的禍,可嘗試在crontab中直接引入環境變量解決問題。如:

    0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
    

注意清理系統使用者的信件日誌

每條任務調度執行完畢,系統都會將任務輸出訊息通過電子信件的形式傳送到給現用的系統使用者,這樣日積月累,日誌訊息會非常大,可能會影響系統的標準運行,因此,將每條任務進行重定向處理非常重要。 例如,可以在crontab檔案中設定如下形式,忽略日誌輸出:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

“/dev/null 2>&1”表示先將標準輸出重導至/dev/null,然後將標準錯誤重導至標準輸出,由於標準輸出已經重導至了/dev/null,因此標準錯誤也會重導至/dev/null,這樣日誌輸出問題就解決了。

系統級任務調度與使用者級任務調度

系統級任務調度主要完成系統的一些維護操作,使用者級任務調度主要完成使用者自訂的一些任務,可以將使用者級任務調度放到系統級任務調度來完成(不建議這麼做),但是反過來卻不行,root使用者的任務調度操作可以通過”crontab –uroot –e”來設定,也可以將調度任務直接寫入/etc/crontab檔案,需要注意的是,如果要定義一個定時重啟系統的任務,就必須將任務放到/etc/crontab檔案,即使在root使用者下建立一個定時重啟系統的任務也是無效的。

其他注意事項

新建立的cron job,不會馬上執行,至少要過2分鐘才執行。如果重啟cron則馬上執行。

當crontab失效時,可以嘗試/etc/init.d/crond restart解決問題。或是檢視日誌看某個job有沒有執行/報錯tail -f /var/log/cron。

千萬別亂運行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除使用者的Crontab檔案。刪除了該使用者的所有crontab都沒了。

在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義%,如經常用的date ‘+%Y%m%d’在crontab裡是不會執行的,應該換成date ‘+%Y%m%d’。

更新系統時間時區後需要重啟cron,在ubuntu中服務名為cron:

$service cron restart

ubuntu下啟動、停止與重啟cron:

$sudo /etc/init.d/cron start
$sudo /etc/init.d/cron stop
$sudo /etc/init.d/cron restart

Linux主機(文字輸入下)關機與重新開機指令

shutdown:關機

shutdown -參數 時間 訊息

k:並非真正關機,只是送出訊息

r:關機後重新開機

h:關機後不重新開機

例如:
shutdown -h now (立即關機)

f:快速關機

n:快速關機,不要經過init的程序

c:取消關時的程序

t:在警告訊息和刪除信號間做停留
時間可用now或任意數字 (代表分鐘)

 reboot:重新開機

 

Modoboa 是一個用於 Linux 的開源信件伺服器託管和管理平台。
它是用 Python 編寫的,使用 Postfix 和 Dovecot 來傳送和接收電子信件。
它使用 Nginx 網路伺服器和 MySQL/PostgreSQL 資料庫。
它容許您建立無限的信箱和無限的信件功能變數。
它可以與 Let’s Encrypt 整合以加密您的電子信件伺服器和外部網路之間的所有通信。
它帶有一個基於 Web 的管理面板,用於管理功能變數、信箱、別名等。

先決條件:
運行 Debian 10 的伺服器。
指向您的伺服器 IP 的有效功能變數名。
在伺服器上配置了 root 密碼。

入門:
在開始之前,使用以下指令將您的系統包更新到最新版本:

apt-get update -y

接下來,使用以下命令安裝其他所需的依賴項:

apt-get install git curl gnupg2 wget -y

接下來,使用以下命令設置系統主機名稱:

hostnamectl set-hostname modoboa.example.com

安裝 Modoboa
接下來,使用以下命令下載最新版本的 Modoboa:

git clone https://github.com/modoboa/modoboa-installer

 

下載完成後,將目錄更改為 Modoboa 並使用以下命令檢查配置:

 

cd modoboa-installer
./run.py --stop-after-configfile-check example.com

這將在您當前的工作目錄中創建一個新的配置文件 installer.cfg。

接下來,使用以下命令編輯配置文件:

nano installer.cfg

 

更改以下幾行:

 

[certificate] 
generate = true 
type =letsencrypt 

[letsencrypt] 
email = hitjethva@gmail.com 

[database] 
engine = postgres 
host = 127.0.0.1 
install = true

保存並關閉文件,然後使用以下命令開始安裝:

./run.py --interactive example.com

安裝完成後,您應該得到以下輸出:

Welcome to Modoboa installer!

Warning:
Before you start the installation, please make sure the following DNS records exist for domain 'modoboa.example.com':
  mail IN A   
       IN MX  modoboa.example.com.

Your mail server will be installed with the following components:
modoboa automx amavis clamav dovecot nginx razor postfix postwhite spamassassin uwsgi radicale opendkim
Do you confirm? (Y/n) Y
The process can be long, feel free to take a coffee and come back later ;)
Starting...
Generating new certificate using letsencrypt
Installing amavis
Installing spamassassin
Installing razor
Installing clamav
Installing modoboa
Installing automx
Installing radicale
Installing uwsgi
Installing nginx
Installing opendkim
Installing postfix
Installing postwhite
Installing dovecot
Congratulations! You can enjoy Modoboa at https://modoboa.example.com (admin:password)

訪問 Modoboa Web 界面
現在,打開您的 Web 瀏覽器並輸入 URL https://modoboa.example.com。您應該會看到 Modoboa 登錄頁面:

提供預設使用者名:admin,密碼:password 然後點擊登入按鈕。您將被重導至以下頁面上的 Modoboa 控制台:

結論
在上面的文章中,您學習瞭如何在 Linux 伺服器上安裝 Modoboa。
您現在可以加入您的第一個功能變數並開始向其他電子信件位址傳送信件。

 

Linux 的 Live CD 或 DVD 是指什麼?(是什麼用途)

我們在國外網站下載Linux安裝光碟時,有時會發現有兩個版本的ISO光碟映象檔案可以下載
那到底要下載那一個?如果ISO光碟映象檔案有加註明 Live CD 那是什麼意思?
有時也會在網路上看到 Live CD(或DVD)版的ISO光碟映象檔案下載,Live CD是指什麼?

LiveCD是指透過CD或是DVD便能開機的作業系統,除了作業系統本身的必要項目外,還可以另行安裝其它的應用程式。
適合用於展示(demo),緊急救援(rescue),測試(testing)等應用。

一般而言,要在電腦上安裝作業系統,都得歷經切割分割區,建立檔案系統(也就是格式化),再經過一定的安裝步驟才能完成,此時作業系統是安裝在硬碟上,但是有些玩家便開始研究,如何不安裝作業系統到硬碟,便能夠直接從光碟片執行,具體的作法不外乎,取出作業系統的核心檔案,修改部分設定;但是設定過程繁瑣,門檻又高(必須對於作業系統『非常』瞭解)。

對於此種不需要安裝到硬碟,就可以啟動執行的作業系統稱之為『Live系統』,一般大多以CD(或DVD)的方式存在,目前也有以DVD的方式存在,其他周邊設備,例如磁片、大姆哥(USB隨身碟)也都可以。

由於自行製作的門檻極高,所幸目前已經有很多現成的LiveCD,部分作業系統(例如:Linux、BSD)因為 Open Source 的原因,可以直接下載別人製作完成的光碟映像檔(iso檔),燒錄成光碟後立刻可以使用,至於 Microsoft 的 Windows 也有 LiveCD 嗎?當然可以,但是有版權的問題,無法直接下載現成的光碟映像檔直接使用,必須自行透過工具(例如:BartPE),製作LiveCD。

以下針對目前知名的 Live CD(或DVD)整理清單如下:
Red Hat / Fedora based:
Linux4all LiveCD, Basilisk
Adios
Berry Linux

Mandrake based:
MandrakeMove
APODIO
PCLinuxOS

Debian based
DemoLinux
Knoppix
Gnoppix
LinEx

Slackware based
MoviX, eMoviX and MoviX2
Slax
Stux
Sentry_Firewall_CD

Gentoo based
Gentoo LiveCD
Jollix
SystemRescueCd

BSD base
FreeSBIE (Based on FreeBSD)
Frenzy mini-CD (Based on FreeBSD)
DragonFly BSD

Microsoft Windows based
BartPE

Others
SkyOS

看完這些琳瑯滿目的LiveCD後,您心中可能會問, Live CD(或DVD)的用途為何?
Live CD(或DVD)的重點在於作業系統不需要安裝到硬碟中,所以優點是這點,缺點也是。
因為光碟已經有作業系統,免了安裝以及後續維護的困擾,所以適合用於展示用的機器,中/小學的教育訓練,幼兒的教育訓練
(例如:拿 Knoppix 給小孩練習電腦,打電動玩具,因為不需要使用硬碟,所以不需要擔心硬碟crash,重新安裝/設定…等問題)
但是缺點也是因為光碟的唯讀性,如果需要更改設定或是更新版本,更新或是製作LiveCD的時間及步驟都比較繁瑣。

Live CD(或DVD)並不適合取代原來安裝於硬碟的作業系統,而是用於某些特別的場合,可以有效降低維護的負擔,又不用擔心硬碟損壞或是中毒,這麼棒的東西,趕快去試試 Live CD(或DVD)!

在本教學中,您將學習在運行Debian 9 Stretch的Apache Web伺服器上安裝TLS / SSL證書的過程。
完成後,伺服器與用戶端之間的所有流量都將被加密且安全。
這是保護電子商務網站和其他線上金融服務安全的標準做法。

先決條件:
在開始使用本指南之前,您需要具備以下條件:

具有root訪問權限或sudo使用者訪問Debian 9 Stretch VPS的 SSH
正確配置了功能變數和虛擬主機的Apache Web伺服器


步驟1:安裝Let’sEncrypt certbot
使用“讓我們加密”取得SSL證書的第一步是在伺服器上安裝certbot“讓我們加密”用戶端。要安裝,請運行以下指令:

sudo apt-get install certbot

步驟2:建立並安裝SSL證書)
使用“讓我們加密”用戶端為Apache生成SSL證書非常簡單。
用戶端將自動取得並安裝對我們的Apache配置中的功能變數有效的新SSL證書。要執行交談式安裝並取得Apache配置中定義的所有功能變數的證書,請輸入:

sudo certbot --Apache

步驟3:檢查SSL證書的配置
在上述階段,將創建並配置證書。現在檢查您的域VirtualHost與ssl的配置是否類似。如果沒有,那麼將它們手動放在virtualhost的ssl配置上:

...
SSLCertificateFile / etc / letsencrypt / live / <您的網域> /cert.pem
SSLCertificateKeyFile / etc / letsencrypt / live / <您的網域> /privkey.pem
SSLCertificateChainFile / etc / letsencrypt / live / <您的網域> /chain.pem
...

現在,需要測試我們的配置是否正確–

sudo apachectl configtest

最後,重新啟動 apache,您的SSL應該立即開始工作。

sudo service apache2 reload

步驟4:設定自動續約
系統上的Certbot軟體包帶有cronjob,它將在證書過期之前自動更新證書。
由於“讓我們加密”證書可以使用90天,因此,最好使用此功能。您可以通過運行以下指令來測試證書的自動續訂:

sudo certbot renew --dry-run

結論:
您剛剛通過實施最受期待的安全功能-免費的SSL證書來保護apache Web伺服器!
從現在開始,功能變數Web伺服器和用戶端之間的所有流量都是安全的,可以確保沒有人可以攔截通信並變更或竊取重要訊息。

X Linux是一個中量級的GNU/Linux發行版。
其基於Debian穩定版本開發,使用了antiX的核心組件,並可安裝MX社群開發或打包的軟體。
MX Linux是antiX和早前的MEPIS社群合作開發的產物,旨在使用各自系統中最優秀的工具和軟體。
MX社群的既定目標是「將優雅而高效的桌面與簡單的組態、高度的穩定性、可靠的效能和中等的大小相結合」。
MX Linux使用Xfce作為預設桌面環境。

MX Linux 19首個維護版19.1已發布,更新內容除了常規的修復錯誤和升級軟體包外,還爲部分硬體提供了專門設計的構建映像。
官方表示,由於使用新硬體(尤其是較新的AMD或Intel硬體)的用戶越來越多
除了提供使用 4.19 LTS內核的標準32位和64位ISO映像外,他們還另外製作了第三個ISO映像,並稱之爲「Advanced Hardware Support」(簡稱 AHS,發音爲 Oz)。

MX Linux 自由的作業系統 官網:
https://mxlinux.org/

AHS也是64位映像,並包含debian 5.4內核、Mesa 19.2以及較新的xserver驅動程序以及利用較新圖形堆棧的各種重新編譯的應用程式。

MX Linux是一箇中型Linux發行版,具有優雅高效的桌面。和Ubuntu一樣也是基於Debian穩定版,使用核心的antiX元件​。它簡單可靠,並且可以在傳統硬體到現代桌上型電腦上很好地執行。
在最近幾年中,MX Linux使用者數逐漸增加,是目前Distrowatch人氣最高的發行版。

MX Linux具有其特有的非常有用的MX工具,包括引導修復,系統快照和Nvidia驅動程式安裝程式。MX軟體包安裝程式(apt包管理器)井井有條,易於使用。

MX Linux 的特點:
MX Linux通過內建一套名為MX Tools的使用者工具集而從Linux發行版中脫穎而出。
MX Tools中,許多工具都是專為MX Linux開發的,而有些則是從antiX應用程式中分離出來的,有些是antiX上現有的應用程式,少數工具經許可而被引入。
例如,工具集中一個基於圖形化使用者介面的工具MX-snapshot可用於將當前系統快照儲存為ISO映像,這種系統映像可以從磁碟或USB隨身碟啟動,同時保留設定及有用的檔案,可作為方便而快速的備份。

MX Linux 歷史:
MX Linux的誕生始於2013年12月MEPIS社群成員之間的一次關於未來選擇的討論。
antiX的開發者隨後加入該系統的開發工作,並且帶來ISO映像架構方案以及Live-USB/Live-DVD技術。為了被列入DistroWatch,MX Linux起初以antiX的衍生版本的形式提供。


MX Linux於2016年11月2日發布了MX-16的第一個公共測試版,其後MX Linux作為獨立的發行版而獲得了自己的DistroWatch頁面。

MX-14系列基於Debian 7,並首先採用Xfce 4.10,其後MX-14.4採用Xfce 4.12。
MX-14系列要求使系統ISO映像的大小適應CD容量,這限制了系統中包含的應用程式的數量。
在該系列中,MX Tools逐步發展。MX Tools是一系列便捷的實用程式的集合,旨在幫助使用者完成各種常見但複雜的任務。

MX-15系列基於Debian 8,系統ISO映像的大小限制被解除,使得開發者可以給使用者提供完整並可立即使用的作業系統。
MX Tools中的實用程式數量大幅增加。


MX-16系列仍然基於Debian 8,但向後移植了許多應用程式,亦從其他來源添加了應用程式,並對MX Tools進行了補充和改進,匯入了進階antiX開發工具、擴充支援以及全新的圖示/主題包/桌面背景組合。

MX-16.1包含了自MX-16以來的所有錯誤修復和改進,並添加了「翠鳥」主題包,升級且簡化了MX Tools,修訂了使用手冊,並新增對使用者介面的翻譯。

MX-17系列基於Debian 9,帶來了改進的圖形化使用者介面、全新的MX Tools和改進的Live CD操作。

MX-18系列中,MX Tools得到進一步發展,引入了全新核心,支援將整個磁碟加密。
MX-18可通過MX Boot選項添加了grub主題包,亦改進了圖形化使用者介面和在地化。

MX-19系列基於Debian 10,其預設桌面環境更新至Xfce 4.14。此版本改進了使用者工具、圖示、使用手冊和在地化等。

您想要在 Linux主機下 安裝 Apache2+MySQL5+PHP5 其方法如下:
—————————————————————-
(請先確認linux 主機更新表列設置網址是否正確?)

套件庫設定:
資料夾:/etc/apt
套件庫設定檔: /etc/apt/sources.list

———————————————–
1.執行更新:

apt-get update

apt-get updgrade
—————————————————————
2.安裝Apache2:
apt-get install apache2-mpm-prefork

apt-get install apache2
—————————————————————-
3.安裝mysql資料庫:

apt-get install mysql-server-5.0 mysql-common mysql-client
—————————————————————-
4.安裝php關聯元件,並整合mysql資料庫:

apt-get install php5-common php5-mysql php5-cgi php5-gd php5-mcrypt libapache2-mod-php5 php5-memcache php5-imagick php5-suhosin php5-xmlrpc

如果需要,可以如下安裝

apt-get install php5-common php-pear php5-curl php5-dev php5-gd php5-idn php5-imap php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xsl

—————————————————————-
備註:
如果要刪除某個包,可以用以下指令

apt-get remove

例如:刪除php-cgi

apt-get remove php-cgi
—————————————————————-
如果不知道有哪些安裝包,可以用如下指令:

apt-cache search

例如:

apt-cache search apache2
—————————————————————-
5.設定帳號、密碼與改善:

mysqladmin -u root password ''   //在引號中輸入密碼
—————————————————————-
登入MySQL資料庫:

mysql -u root -p

修改原始帳號(mysql)

mysql>use mysql;
mysql>update user set user="自己設定使用者名" where user="root"; (將mysql的root使用者名修改成centos,防止root的密碼被暴力破解)
mysql>select Host,User,Password,Select_priv,Grant_priv from user;
mysql>delete from user where user=''; (刪除user使用者)
mysql>delete from user where password=''; (刪除user使用者)
mysql>delete from user where host=''; (刪除user使用者)
mysql>drop database test; (刪除預設的test資料庫)
mysql>flush privileges; (重整mysql的快取,讓以上設定立即生效)
mysql>quit;
—————————————————————-
修改MySQL的配置檔案在/etc/mysql/my.cnf

找到 #skip-innodb 去掉註釋

重新載入Mysql

/etc/init.d/mysql reload

或是重啟Mysql

/etc/init.d/mysql restart
—————————————————————-
6.設定php:

修改檔案:/etc/php5/apache2/php.ini

找到以下數值,修改為自己需要的數值

memory_limit
post_max_size
upload_max_filesize

關閉以下功能 Off

enable_dl
display_errors
—————————————————————-
7.Apache 改善及設定:
修改 /etc/apache2/apache2.conf檔案

Timeout 300

改為

Timeout 60

KeepAliveTimeout 15

改為:

KeepAliveTimeout 5

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0

改為:

StartServers 3
MinSpareServers 5
MaxSpareServers 10
MaxClients 50
MaxRequestsPerChild 2000

找到 AddType application/x-gzip .gz .tgz 在其下加入如下內容

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
——————————————
儲存離開,並重啟 apache

/etc/init.d/apache2 reload

/etc/init.d/apache2 restart
——————————————
啟動 deflate模組(用於頁面壓縮),在SSH介面輸入:

a2enmod deflate
——————————————
讓apache2得程式加載新配置的模組

/etc/init.d/apache2 force-reload
——————————————
再修改 /etc/apache2/apache2.conf檔案,在最後加入

在檔案之後加入:

DeflateCompressionLevel 6
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
——————————————
啟動mod rewrite(用於偽靜態連線位址),在SSH介面輸入:

a2enmod rewrite
——————————————
讓apache2得程式加載新配置的模組

/etc/init.d/apache2 force-reload
——————————————
再修改 /etc/apache2/apache2.conf檔案,在最後加入:
——————————————
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
——————————————
網上有人這麼設定的,不過很多時候,網站多了很不好控制,都已我沒有在apache2.conf加入這最後一段。
——————————————
重新載入apache

/etc/init.d/apache2 reload
——————————————
或重啟apache

/etc/init.d/apache2 restart
—————————————————————-
8.設定多功能變數名:

設定/etc/apache2/sites-available/default,將ServerAdmin改為你自己的信箱,並在之前加入一段,作為你的空間根目錄功能變數名:

ServerName xxx.com
——————————————
將/var/www/目錄全部修改為 /home/www/
——————————————
在SSH介面輸入:

chmod 755 -R /home/www     //設定網站根目錄權限

ls -lh //檢視資料夾屬主

cd /home/www/

chown -R www-data:www-data /home/www/
——————————————
做好這些後,儲存並離開 default。
——————————————
在/home/www/建立新資料夾「1」;然後在現用的目錄「/sites-available/」新增一個檔案,假設檔名為1,開啟檔案1,輸入以下內容:

<VirtualHost *>

ServerName xxx.com       //此處輸入功能變數名

ServerAdmin webmaster@admin.com

DocumentRoot "/home/www/1/"       //網站目錄

<Directory />                               //這段加入後,可直接支援.htaccess

Options FollowSymLinks

AllowOverride All

</Directory>

ErrorLog "/var/log/apache2/1-error.log"

CustomLog "/var/log/apache2/1-access.log" common

</VirtualHost>
——————————————
儲存該檔案,然後在SSH介面下輸入:

a2ensite 1
——————————————
這時,設定的網站功能變數名已經被綁定了,在/etc/apache2/sites-enabled/資料夾會有一個1的快捷連結。
重啟一下Apache後,就可以操作該網站了:
——————————————
/etc/init.d/apache2 restart
——————————————
現在就可以用瀏覽器登陸你的功能變數名了~

分開設定確實麻煩了點,但好處還是很大的,比如我要單獨維護網站1,只需要輸入以下指令:

a2dissite silent
——————————————
然後重啟一遍即可

/etc/init.d/apache2 restart

其他網站還是會標準運作,不會受到牽連~
—————————————————————-

學員來信問道:
總教頭您好!我的Linux主機開機後,出現一堆錯誤,接著就出現

Give root password for maintenance (or type Control-D continue)
接著就一動也不動了,按鍵盤的任何按鍵,好像都沒有作用,請問大師,我該如何排除此故障呢?

總教頭回覆:你的主機,一開機從跑文字看到磁碟有發生錯誤
Linux主機它企圖自我修護…..跑到14%左右就無法修護!
 
出現:Give root password for maintenance (or type Control-D continue)
就不動了!
 
這就是硬碟有問題!趕快用 fsck 指令修復
※僅管理者的身份才有權限能執行使用fsck – 檢查並修復Linux檔案系統
***********************************************************************************
 Give root password for maintenance (or type Control-D continue)
 
以後您發生此問題,就這麼弄:

1.輸入root的密碼XX016XX168XX(注意:密碼不會顯示,好像不能輸入密碼一樣,你不用管它)按Enter
  這樣他就會跳到root權限的文字指令下
 
2.接著,輸入 fsck /dev/sda1 ,按Enter (紅色字路徑是你的磁碟)
 
3.系統開始檢查修復,遇到詢問,一律按 y 繼續

備註:在fsck  後面加上-y 自動回答 "yes" 給每次詢問。
才不會那麼辛苦(每次都要按 Y)。
範例:
fsck -y /dev/sda1
注意:此動作因為是修護硬碟,所以會跑所有磁區(時間過程很長,要耐心等候)

4.完成後 ,輸入reboot ,按Enter 重新啟動
*******************************************************
重新啟動後,他就會自動跑到視窗
選登入帳號:rootadmin 輸入密碼,就開啟視窗了!
———————————————
選網路連線,看一下設定『網路設定並沒有跑掉』

 

用WinSCP連線,OK!

——————————————————-