㈠ linux如何查看文件的最後一行
tail -n 20 filename
說明:顯示filename最後20行。
Linux下tail命令的使用方法。
linux tail命令用途是依照要求將指定的文件的最後部分輸出到標准設備,通常是終端,通俗講來,就是把某個檔案文件的最後幾行顯示到終端上,假設該檔案有更新,tail會自己主動刷新,確保你看到最新的檔案內容。
一、tail命令語法
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
參數解釋:
-f 該參數用於監視File文件增長。
-c Number 從 Number 位元組位置讀取指定文件
-n Number 從 Number 行位置讀取指定文件。
-m Number 從 Number 多位元組字元位置讀取指定文件,比方你的文件假設包括中文字,假設指定-c參數,可能導致截斷,但使用-m則會避免該問題。
-b Number 從 Number 表示的512位元組塊位置讀取指定文件。
-k Number 從 Number 表示的1KB塊位置讀取指定文件。
File 指定操作的目標文件名稱
上述命令中,都涉及到number,假設不指定,默認顯示10行。Number前面可使用正負號,表示該偏移從頂部還是從尾部開始計算。
tail可運行文件一般在/usr/bin/以下。
二、tail命令使用方法演示例子
1、tail -f filename
說明:監視filename文件的尾部內容(默認10行,相當於增加參數 -n 10),刷新顯示在屏幕上。退出,按下CTRL+C。
2、tail -n 20 filename
說明:顯示filename最後20行。
3、tail -n +20 filename
說明:顯示filename前面20行。
4、tail -r -n 10 filename
說明:逆序顯示filename最後10行。
補充:
跟tail功能相似的命令還有:
cat 從第一行開始顯示檔案內容。
tac 從最後一行開始顯示檔案內容。
more 分頁顯示檔案內容。
less 與 more 相似,但支持向前翻頁
head 僅僅顯示前面幾行
tail 僅僅顯示後面幾行
n 帶行號顯示檔案內容
od 以二進制方式顯示檔案內容關於Linux命令的介紹,看看《linux就該這么學》,具體關於這一章地址3w(dot)linuxprobe/chapter-02(dot)html
㈡ linux 下如何刪除 myfile (1).dot文件 shell該怎麼寫
樓主您好,刪除單個文件還要用shell,這有點大材小用了吧。
其實只需要一條命令就能搞定的
rm -rf 'myfile (1).dot'
這樣就能實現刪除效果了,不管裡面有多少個空格都沒有關系。
㈢ 如何在linux上模擬網路丟包
Linux 中使用 tc 進行流量管理。具體命令的使用請參考 tc 的 man 手冊。1.設置延時
# tc qdisc add dev eth0 root netem delay 30ms2. 丟包
設置丟包命令如下:
# tc qdisc add dev eth0 root netem loss 10%
如果你是通過 SSH 登陸設備進行配置丟包的話,配置完這條命令就會感覺到機器訪問時有點一卡一卡的。這說明,設備已經開始丟包了,可以通過具體抓包查看。
其他諸如修改、查看、刪除的命令,都可以參考上面延時的設置。關於Linux命令的介紹,看看《linux就該這么學》,具體關於這一章地址3w(dot)linuxprobe/chapter-02(dot)html.
㈣ linux 下的兩句命令,不太懂,求大仙解釋
. 當前目錄
~ 用戶主目錄
「. ~/.euca/eucarc「 中,
. 與 ~ 中間有一個空格,是你輸入有誤,還是,這個字元串是
哪個命令的參數?
我的計算機上,
cd -
切換到 用戶主目錄,並顯示 位置
㈤ 如何在Linux用戶和內核空間中進行動態跟蹤
你不記得如何在代碼中插入探針點了嗎? 沒問題!了解如何使用uprobe和kprobe來動態插入它們吧。 基本上,程序員需要在源代碼匯編指令的不同位置插入動態探針點。
探針點
探針點是一個調試語句,有助於探索軟體的執行特性(即,執行流程以及當探針語句執行時軟體數據結構的狀態)。printk是探針語句的最簡單形式,也是黑客用於內核攻擊的基礎工具之一。
因為它需要重新編譯源代碼,所以printk插入是靜態的探測方法。內核代碼中重要位置上還有許多其他靜態跟蹤點可以動態啟用或禁用。 Linux內核有一些框架可以幫助程序員探測內核或用戶空間應用程序,而無需重新編譯源代碼。Kprobe是在內核代碼中插入探針點的動態方法之一,並且uprobe在用戶應用程序中執行此操作。
使用uprobe跟蹤用戶空間
可以通過使用thesysfs介面或perf工具將uprobe跟蹤點插入用戶空間代碼。
使用sysfs介面插入uprobe
考慮以下簡單測試代碼,沒有列印語句,我們想在某個指令中插入探針:
[source,c\n.test.c
#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>
編譯代碼並找到要探測的指令地址:
# gcc -o test test.\n# objmp -d test
假設我們在ARM64平台上有以下目標代碼:
0000000000400620 <func_1>: 400620\t90000080\tadr\tx0, 410000 <__FRAME_END__+0xf6f8>
並且我們想在偏移量0x620和0x644之間插入探針。執行以下命令:
# echo 'p:func_2_entry test:0x620' > /sys/kernel/debug/tracing/uprobe_event\n# echo 'p:func_1_entry test:0x644' >> /sys/kernel/debug/tracing/uprobe_event\n# echo 1 > /sys/kernel/debug/tracing/events/uprobes/enable# ./test&
在上面的第一個和第二個echo語句中,p告訴我們這是一個簡單的測試。(探測器可以是簡單的或返回的。)func_n_entry是我們在跟蹤輸出中看到的名稱,名稱是可選欄位,如果沒有提供,我們應該期待像p_test_0x644這樣的名字。test 是我們要插入探針的可執行二進制文件。如果test 不在當前目錄中,則需要指定path_to_test / test。
0x620或0x640是從程序啟動開始的指令偏移量。請注意>>在第二個echo語句中,因為我們要再添加一個探針。所以,當我們在前兩個命令中插入探針點之後,我們啟用uprobe跟蹤,當我們寫入events/ uprobes / enable時,它將啟用所有的uprobe事件。程序員還可以通過寫入在該事件目錄中創建的特定事件文件來啟用單個事件。一旦探針點被插入和啟用,每當執行探測指令時,我們可以看到一個跟蹤條目。
讀取跟蹤文件以查看輸出:
# cat /sys/kernel/debug/tracing/trac\n# tracer: no\n\n# entries-in-buffer/entries-written: 8/8\n#P:\n\n# _-----=> irqs-of\n# / _----=> need-resche\n# | / _---=> hardirq/softir\n# || / _--=> preempt-dept\n# ||| / dela\n# TASK-PID CP\n# |||| TIMESTAMP FUNCTION# | | | |||| | |
我們可以看到哪個CPU完成了什麼任務,什麼時候執行了探測指令。
返回探針也可以插入指令。當返回該指令的函數時,將記錄一個條目:
# echo 0 > /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo 'r:func_2_exit test:0x620' >> /sys/kernel/debug/tracing/uprobe_event\n# echo 'r:func_1_exit test:0x644' >> /sys/kernel/debug/tracing/uprobe_event\n# echo 1 > /sys/kernel/debug/tracing/events/uprobes/enable
這里我們使用r而不是p,所有其他參數是相同的。請注意,如果要插入新的探測點,需要禁用uprobe事件:
test-3009 [002] .... 4813.852674: func_1_entry: (0x400644)
上面的日誌表明,func_1返回到地址0x4006b0,時間戳為4813.852691。
# echo 0 > /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo 'p:func_2_entry test:0x630' > /sys/kernel/debug/tracing/uprobe_events count=%x\n# echo 1 > /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo > /sys/kernel/debug/tracing/trace# ./test&
當執行偏移量0x630的指令時,將列印ARM64 x1寄存器的值作為count =。
輸出如下所示:
test-3095 [003] .... 7918.629728: func_2_entry: (0x400630) count=0x1
使用perf插入uprobe
找到需要插入探針的指令或功能的偏移量很麻煩,而且需要知道分配給局部變數的CPU寄存器的名稱更為復雜。 perf是一個有用的工具,用於幫助引導探針插入源代碼中。
除了perf,還有一些其他工具,如SystemTap,DTrace和LTTng,可用於內核和用戶空間跟蹤;然而,perf與內核配合完美,所以它受到內核程序員的青睞。
# gcc -g -o test test.c# perf probe -x ./test func_2_entry=func_\n# perf probe -x ./test func_2_exit=func_2%retur\n# perf probe -x ./test test_15=test.c:1\n# perf probe -x ./test test_25=test.c:25 numbe\n# perf record -e probe_test:func_2_entry -e\nprobe_test:func_2_exit -e probe_test:test_15\n-e probe_test:test_25 ./test
如上所示,程序員可以將探針點直接插入函數start和return,源文件的特定行號等。可以獲取列印的局部變數,並擁有許多其他選項,例如調用函數的所有實例。 perf探針用於創建探針點事件,那麼在執行./testexecutable時,可以使用perf記錄來探測這些事件。當創建一個perf探測點時,可以使用其他錄音選項,例如perf stat,可以擁有許多後期分析選項,如perf腳本或perf報告。
使用perf腳本,上面的例子輸出如下:
# perf script
使用kprobe跟蹤內核空間
與uprobe一樣,可以使用sysfs介面或perf工具將kprobe跟蹤點插入到內核代碼中。
使用sysfs介面插入kprobe
程序員可以在/proc/kallsyms中的大多數符號中插入kprobe;其他符號已被列入內核的黑名單。還有一些與kprobe插入不兼容的符號,比如kprobe_events文件中的kprobe插入將導致寫入錯誤。 也可以在符號基礎的某個偏移處插入探針,像uprobe一樣,可以使用kretprobe跟蹤函數的返回,局部變數的值也可以列印在跟蹤輸出中。
以下是如何做:
; disable all events, just to insure that we see only kprobe output in trace\n# echo 0 > /sys/kernel/debug/tracing/events/enable; disable kprobe events until probe points are inseted\n# echo 0 > /sys/kernel/debug/tracing/events/kprobes/enable; clear out all the events from kprobe_events\n to insure that we see output for; only those for which we have enabled
[root@pratyush ~\n# more /sys/kernel/debug/tracing/trace# tracer: no\n\n# entries-in-buffer/entries-written: 9037/9037\n#P:8\n# _-----=> irqs-of\n# / _----=> need-resche\n# | / _---=> hardirq/softirq#\n|| / _--=> preempt-depth#\n ||| / delay# TASK-PID CPU#\n |||| TIMESTAMP FUNCTION#\n | | | |||| | |
使用perf插入kprobe
與uprobe一樣,程序員可以使用perf在內核代碼中插入一個kprobe,可以直接將探針點插入到函數start和return中,源文件的特定行號等。程序員可以向-k選項提供vmlinux,也可以為-s選項提供內核源代碼路徑:
# perf probe -k vmlinux kfree_entry=kfre\n# perf probe -k vmlinux kfree_exit=kfree%retur\n# perf probe -s ./ kfree_mid=mm/slub.c:3408 \n# perf record -e probe:kfree_entry -e probe:kfree_exit -e probe:kfree_mid sleep 10
使用perf腳本,以上示例的輸出:
關於Linux命令的介紹,看看《linux就該這么學》,具體關於這一章地址3w(dot)linuxprobe/chapter-02(dot)html
㈥ Linux如何設置命令別名
通常情況下,系統中已經定義了一些命令別名,要查看已經定義的命令別名,可以使用alias命令:
# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
用於設置系統別名的相關文件保存在/etc/profile.d/目錄中(系統別名目錄),使用以下方式可以查看:
#進入目錄/etc/profile.d/
# cd /etc/profile.d/
#查看目錄中的文件
# ls
許多時候管理員都會按自己的使用習慣定義命令別名。例如讓查看當前文件內容的命令兼容DOS中的查看文本命令type:
#為cat命令定義一個別名type
# alias type='cat'
#使用type命令查看文件alias.txt的內容
# type alias.txt
上面的命令中,先為cat命令定義了一個名為type的別名。當用戶使用命令type時,系統會自動使用cat命令將其替代
3.取消定義的別名
要取消已經定義好的命令別名,可以對別名使用unalias命令:
# unalias type
# type alias.txt
-bash:type: command not found
4.保存別名設置
當系統重新啟動或用戶重新登錄時,使用alias命令定義的別名將會丟失。可以在系統別名目錄中添加別名配置文件,但這種方式定義的別名對所有的用戶都生效,通常不建議使用這種方法。
如果要定義全局別名,通常建議將命令添加到全局配置文件/etc/profile中。例如定義全局別名:
# echo "alias type='cat'">>/etc/profile
這條命令將alias pg='cat'添加到文件/etc/profile中。
注意:在對/etc/profile這樣的系統配置文件進行操作時,一定要謹慎,否則有可能會損壞系統。因此上面的命令中使用的是">>"而不是">",">>"表示將內容追加到文件結尾。
如果某個用戶想要定義自己的命令別名,可以將命令添加到用戶家目錄中的文件.bash_profile中。例如要定義用戶自己的別名:
# echo "alias vi='vim'">>~/.bash_profile
source ~/.bash_profile 最後,退出並重新登陸以使定義生效。
㈦ Linux使用ldd命令查看程序調用了哪些動態庫
名稱
ldd
-
列印共享庫的依賴關系
大綱
ldd
[選項]...文件...
描述
ldd
輸出在命令行上指定的每個程序或共享庫需要的共享庫。
選項
--version
列印ldd的版本號
-v
--verbose
列印所有信息,例如包括符號的版本信息
-d
--data-relocs
執行符號重部署,並報告缺少的目標對象(只對ELF格式適用)
-r
--function-relocs
對目標對象和函數執行重新部署,並報告缺少的目標對象和函數(只對ELF格式適用)
--help
用法信息
或者看看《linux就該這么學》,具體關於這一章地址3w(dot)linuxprobe/chapter-02(dot)html.