因為本人工作中要涉及到很多東西,審計(日志、數據神馬的)、源代碼審計、滲透測試、開發一大堆東西,有些東西,越是深入去做,越會發現,沒有工具或腳本,工作起來是有多麼的坑。
工作的這段時間,自己寫了幾個工具:Web日志分析、linux服務器安全檢查腳本、webshell查殺和webshell文件監控工具,接下來找機會,我會慢慢的都給大家共享出來。
其實我遇到的情況,很多管理員都會遇到,一堆服務器,尤其是linux的,沒辦法像windows那樣便捷,現成的工具也沒有辣麼多,有些工具呢,你還得裝環境,但是,無論是在客戶那裡,還是在自己的服務器上,都不天願意裝一堆環境,純手工檢查吧,有點慢,也枯燥,所以誕生了這個腳本。
腳本大致內容:基本信息統計(IP地址、MAC地址、端口信息、服務信息等)、主機安全檢查(包括等保三級要求主機相關的檢查點)、系統性能統計(暫時未加入分析)、惡意代碼、程序檢查等檢查點。
腳本內容涉及到:
1、查看系統密碼文件修改時間
2、查看是否開啟了ssh服務
3、查看系統SSH遠程訪問設置策略(host.deny拒絕列表)
4、查看shell是否設置超時鎖定策略
5、查看syslog日志審計服務是否開啟
6、查看syslog日志是否開啟外發
7、查看passwd文件中有哪些特權用戶
8、查看系統中是否存在空口令賬戶
9、PHP、JSP、perl、Python、HTML、以及linux下可執行文件內容的檢查
裡面列舉了一些常見webshell、提權EXP、以及Python掃描工具、嗅探工具的特征,如果發現此類相關的文件,則會顯示出來,或者拷貝一份到/tmp/目錄下
例如:能掃描到的linux下提權工具:
一共是172個文件。都可以掃描的到。。。。
其實整個腳本相對起來比較簡單,主要用到的命令為
find / -type
if語句
awk命令
more
egrep
等命令組成。
比如說awk命令,我們用more或cat命令,讀取某個文件內容,然後通過awk進行篩選和輸出,來顯示我們想要看的東西
例如:
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs裡面的"$1 "設置的是"$2"天,請管理員改成90天。"}}'
從這裡我們可以看到,通過more來打開/etc/login.defs文件,並查找關鍵字“PASS_MAX_DAYS”,用awk命令,篩選以”為分隔符的內容,用作判斷,如果$2第二個分隔符位置的內容不等於90,則輸出該內容。
同理,任意針對文件內容做篩選的結果,都可以通過這樣的方式去顯示我們想要顯示的內容。
又例如:
echo "查看系統中存在哪些非系統默認用戶"
echo "root:x:“該值大於500為新創建用戶,小於或等於500為系統初始用戶”"
more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd裡面的"$1 "的值為"$3",請管理員確認該賬戶是否正常。"}}'
echo ------------------------------------------------------------------------
if語句相關:
echo --------------------------------------------------------------------------
echo "檢查系統文件完整性2(MD5檢查)"
echo "該項會獲取部分關鍵文件的MD5值並入庫,默認保存在/etc/md5db中"
echo "如果第一次執行,則會提示md5sum: /sbin/portmap: 沒有那個文件或目錄"
echo "第二次重復檢查時,則會對MD5DB中的MD5值進行匹配,來判斷文件是否被更改過"
file="/etc/md5db"
if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1;
else
md5sum /etc/passwd >>/etc/md5db
md5sum /etc/shadow >>/etc/md5db
md5sum /etc/group >>/etc/md5db
md5sum /usr/bin/passwd >>/etc/md5db
md5sum /sbin/portmap>>/etc/md5db
md5sum /bin/login >>/etc/md5db
md5sum /bin/ls >>/etc/md5db
md5sum /bin/ps >>/etc/md5db
md5sum /usr/bin/top >>/etc/md5db;
fi
echo ----------------------------------------------------------------------
這裡呢,對部分敏感文件的MD5值做了下驗證,大致思路是,先檢查/etc/md5db是否存在,如果不存在的話,則將所涉及文件的MD5值入庫,並保存到/etc/md5db文件中,當我們第二次對服務器進行檢查時,則會對比兩次的MD5值,如果MD5值發生變化,則會進行提醒。
腳本本身沒什麼復雜的東西,我先貼出部分內容,供大家參考下。
#!/bin/bash
echo " (__)"
echo " (oo)"
echo " /------\/ "
echo " / | || "
echo " * /\---/\ "
echo " ~~ ~~ "
echo "...."Are You Ready?"..."
read key
echo "警告:本腳本只是一個檢查的操作,未對服務器做任何修改,管理員可以根據此報告進行相應的設置。"
echo ---------------------------------------主機安全檢查-----------------------
echo "系統版本"
uname -a
echo --------------------------------------------------------------------------
echo "本機的ip地址是:"
ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
echo --------------------------------------------------------------------------
awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一個未被鎖定的賬戶,請管理員檢查是否需要鎖定它或者刪除它。"}}' /etc/shadow
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs裡面的"$1 "設置的是"$2"天,請管理員改成90天。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' ' '{if($2!=6){print "/etc/login.defs裡面的"$1 "設置的是"$2"個字符,請管理員改成6個字符。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' ' '{if($2!=10){print "/etc/login.defs裡面的"$1 "設置的是"$2"天,請管理員將口令到期警告天數改成10天。"}}'
echo --------------------------------------------------------------------------
grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未設置登錄超時限制,請設置之,設置方法:在/etc/profile或者/etc/bashrc裡面添加TMOUT=600參數"
echo --------------------------------------------------------------------------
if ps -elf |grep xinet |grep -v "grep xinet";then
echo "xinetd 服務正在運行,請檢查是否可以把xinnetd服務關閉"
else
echo "xinetd 服務未開啟"
fi
echo --------------------------------------------------------------------------
echo "查看系統密碼文件修改時間"
ls -ltr /etc/passwd
echo --------------------------------------------------------------------------
echo "查看是否開啟了ssh服務"
if service sshd status | grep -E "listening on|active \(running\)"; then
echo "SSH服務已開啟"
else
echo "SSH服務未開啟"
fi
echo --------------------------------------------------------------------------
echo "查看是否開啟了TELNET服務"
if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then
echo "TELNET服務已開啟 "
else
echo "TELNET服務未開啟 "
fi
echo --------------------------------------------------------------------------
echo "查看系統SSH遠程訪問設置策略(host.deny拒絕列表)"
if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E "sshd"; then
echo "遠程訪問策略已設置 "
else
echo "遠程訪問策略未設置 "
fi
echo --------------------------------------------------------------------------
腳本運行截圖
主機安全檢查
惡意程序、代碼檢查
關鍵文件修改時間查看
系統性能檢查
完整腳本代碼
#!/bin/bash
echo " (__)"
echo " (oo)"
echo " /------\/ "
echo " / | || "
echo " * /\---/\ "
echo " ~~ ~~ "
echo "...."Are You Ready?"..."
read key
echo "警告:本腳本只是一個檢查的操作,未對服務器做任何修改,管理員可以根據此報告進行相應的設置。"
echo ---------------------------------------主機安全檢查-----------------------
echo "系統版本"
uname -a
echo --------------------------------------------------------------------------
echo "本機的ip地址是:"
ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
echo --------------------------------------------------------------------------
awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一個未被鎖定的賬戶,請管理員檢查是否需要鎖定它或者刪除它。"}}' /etc/shadow
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs裡面的"$1 "設置的是"$2"天,請管理員改成90天。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' ' '{if($2!=6){print "/etc/login.defs裡面的"$1 "設置的是"$2"個字符,請管理員改成6個字符。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' ' '{if($2!=10){print "/etc/login.defs裡面的"$1 "設置的是"$2"天,請管理員將口令到期警告天數改成10天。"}}'
echo --------------------------------------------------------------------------
grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未設置登錄超時限制,請設置之,設置方法:在/etc/profile或者/etc/bashrc裡面添加TMOUT=600參數"
echo --------------------------------------------------------------------------
if ps -elf |grep xinet |grep -v "grep xinet";then
echo "xinetd 服務正在運行,請檢查是否可以把xinnetd服務關閉"
else
echo "xinetd 服務未開啟"
fi
echo --------------------------------------------------------------------------
echo "查看系統密碼文件修改時間"
ls -ltr /etc/passwd
echo --------------------------------------------------------------------------
echo "查看是否開啟了ssh服務"
if service sshd status | grep -E "listening on|active \(running\)"; then
echo "SSH服務已開啟"
else
echo "SSH服務未開啟"
fi
echo --------------------------------------------------------------------------
echo "查看是否開啟了TELNET服務"
if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then
echo "TELNET服務已開啟 "
else
echo "TELNET服務未開啟 "
fi
echo --------------------------------------------------------------------------
echo "查看系統SSH遠程訪問設置策略(host.deny拒絕列表)"
if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E "sshd"; then
echo "遠程訪問策略已設置 "
else
echo "遠程訪問策略未設置 "
fi
echo --------------------------------------------------------------------------
echo "查看系統SSH遠程訪問設置策略(hosts.allow允許列表)"
if more /etc/hosts.allow | grep -E "sshd: ";more /etc/hosts.allow | grep -E "sshd"; then
echo "遠程訪問策略已設置 "
else
echo "遠程訪問策略未設置 "
fi
echo "當hosts.allow和 host.deny相沖突時,以hosts.allow設置為准。"
echo -------------------------------------------------------------------------
echo "查看shell是否設置超時鎖定策略"
if more /etc/profile | grep -E "TIMEOUT= "; then
echo "系統設置了超時鎖定策略 "
else
echo "未設置超時鎖定策略 "
fi
echo -------------------------------------------------------------------------
echo "查看syslog日志審計服務是否開啟"
if service syslog status | egrep " active \(running";then
echo "syslog服務已開啟"
else
echo "syslog服務未開啟,建議通過service syslog start開啟日志審計功能"
fi
echo -------------------------------------------------------------------------
echo "查看syslog日志是否開啟外發"
if more /etc/rsyslog.conf | egrep "@...\.|@..\.|@.\.|\*.\* @...\.|\*\.\* @..\.|\*\.\* @.\.";then
echo "客戶端syslog日志已開啟外發"
else
echo "客戶端syslog日志未開啟外發"
fi
echo -------------------------------------------------------------------------
echo "查看passwd文件中有哪些特權用戶"
awk -F: '$3==0 {print $1}' /etc/passwd
echo ------------------------------------------------------------------------
echo "查看系統中是否存在空口令賬戶"
awk -F: '($2=="!!") {print $1}' /etc/shadow
echo "該結果不適用於Ubuntu系統"
echo ------------------------------------------------------------------------
echo "查看系統中root用戶外連情況"
lsof -u root |egrep "ESTABLISHED|SYN_SENT|LISTENING"
echo ----------------------------狀態解釋------------------------------
echo "ESTABLISHED的意思是建立連接。表示兩台機器正在通信。"
echo "LISTENING的"
echo "SYN_SENT狀態表示請求連接"
echo ------------------------------------------------------------------------
echo "查看系統中root用戶TCP連接情況"
lsof -u root |egrep "TCP"
echo ------------------------------------------------------------------------
echo "查看系統中存在哪些非系統默認用戶"
echo "root:x:“該值大於500為新創建用戶,小於或等於500為系統初始用戶”"
more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd裡面的"$1 "的值為"$3",請管理員確認該賬戶是否正常。"}}'
echo ------------------------------------------------------------------------
echo "檢查系統守護進程"
more /etc/xinetd.d/rsync | grep -v "^#"
echo ------------------------------------------------------------------------
echo "檢查系統是否存在入侵行為"
more /var/log/secure |grep refused
echo ------------------------------------------------------------------------
echo "-----------------------檢查系統是否存在PHP腳本後門---------------------"
if find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|專用網馬|udf.dll|class PHPzip\{|ZIP壓縮程序 荒野無燈修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木馬|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木馬|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提權|phpspy|後門" |sort -n|uniq -c |sort -rn 1>/dev/null 2>&1;then
echo "檢測到PHP腳本後門"
find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|專用網馬|udf.dll|class PHPzip\{|ZIP壓縮程序 荒野無燈修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木馬|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木馬|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提權|phpspy|後門" |sort -n|uniq -c |sort -rn
find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|專用網馬|udf.dll|class PHPzip\{|ZIP壓縮程序 荒野無燈修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木馬|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木馬|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提權|phpspy|後門" |sort -n|uniq -c |sort -rn |awk '{print $2}' | xargs -I{} cp {} /tmp/
echo "後門樣本已拷貝到/tmp/目錄"
else
echo "未檢測到PHP腳本後門"
fi
echo ------------------------------------------------------------------------
echo "-----------------------檢查系統是否存在JSP腳本後門---------------------"
find / -type f -name *.jsp | xargs egrep -l "InputStreamReader\(this.is\)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提權|jspspy|後門" |sort -n|uniq -c |sort -rn 2>&1
find / -type f -name *.jsp | xargs egrep -l "InputStreamReader\(this.is\)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提權|jspspy|後門" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/ 2>&1
echo ------------------------------------------------------------------------
echo "----------------------檢查系統是否存在HTML惡意代碼---------------------"
if find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" 1>/dev/null 2>&1;then
echo "發現HTML惡意代碼"
find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" |sort -n|uniq -c |sort -rn
find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/
echo "後門樣本已拷貝到/tmp/目錄"
else
echo "未檢測到HTML惡意代碼"
fi
echo "----------------------檢查系統是否存在perl惡意程序----------------------"
if find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;" 1>/dev/null 2>&1;then
echo "發現perl惡意程序"
find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;"|sort -n|uniq -c |sort -rn
find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;"|sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/
echo "可疑樣本已拷貝到/tmp/目錄"
else
echo "未檢測到perl惡意程序"
fi
echo "----------------------檢查系統是否存在Python惡意程序----------------------"
find / -type f -name *.py | xargs egrep -l "execCmd|cat /etc/issue|getAppProc|exploitdb" |sort -n|uniq -c |sort -rn
find / -type f -name *.py | xargs egrep -l "execCmd|cat /etc/issue|getAppProc|exploitdb" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/
echo ------------------------------------------------------------------------
echo "-----------------------檢查系統是否存在惡意程序---------------------"
find / -type f -perm -111 |xargs egrep "UpdateProcessER12CUpdateGatesE6C|CmdMsg\.cpp|MiniHttpHelper.cpp|y4'r3 1uCky k1d\!|execve@@GLIBC_2.0|initfini.c|ptmalloc_unlock_all2|_IO_wide_data_2|system@@GLIBC_2.0|socket@@GLIBC_2.0|gettimeofday@@GLIBC_2.0|execl@@GLIBC_2.2.5|WwW.SoQoR.NeT|2.6.17-2.6.24.1.c|Local Root Exploit|close@@GLIBC_2.0|syscall\(\__NR\_vmsplice,|Linux vmsplice Local Root Exploit|It looks like the exploit failed|getting root shell" 2>/dev/null
echo ------------------------------------------------------------------------
echo "檢查網絡連接和監聽端口"
netstat -an
echo "--------------------------路由表、網絡連接、接口信息--------------"
netstat -rn
echo "------------------------查看網卡詳細信息--------------------------"
ifconfig -a
echo ------------------------------------------------------------------------
echo "查看正常情況下登錄到本機的所有用戶的歷史記錄"
last
echo ------------------------------------------------------------------------
echo "檢查系統中core文件是否開啟"
ulimit -c
echo "core是unix系統的內核。當你的程序出現內存越界的時候,操作系統會中止你的進程,並將當前內存狀態倒出到core文件中,以便進一步分析,如果返回結果為0,則是關閉了此功能,系統不會生成core文件"
echo ------------------------------------------------------------------------
echo "檢查系統中關鍵文件修改時間"
ls -ltr /bin/ls /bin/login /etc/passwd /bin/ps /usr/bin/top /etc/shadow|awk '{print "文件名:"$8" ""最後修改時間:"$6" "$7}'
echo "ls文件:是存儲ls命令的功能函數,被刪除以後,就無法執行ls命令,黑客可利用篡改ls文件來執行後門或其他程序。
login文件:login是控制用戶登錄的文件,一旦被篡改或刪除,系統將無法切換用戶或登陸用戶
user/bin/passwd是一個命令,可以為用戶添加、更改密碼,但是,用戶的密碼並不保存在/etc/passwd當中,而是保存在了/etc/shadow當中
etc/passwd是一個文件,主要是保存用戶信息。
sbin/portmap是文件轉換服務,缺少該文件後,無法使用磁盤掛載、轉換類型等功能。
bin/ps 進程查看命令功能支持文件,文件損壞或被更改後,無法正常使用ps命令。
usr/bin/top top命令支持文件,是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況。
etc/shadow shadow 是 /etc/passwd 的影子文件,密碼存放在該文件當中,並且只有root用戶可讀。"
echo --------------------------------------------------------------------------
echo "-------------------查看系統日志文件是否存在--------------------"
log=/var/log/syslog
log2=/var/log/messages
if [ -e "$log" ]; then
echo "syslog日志文件存在! "
else
echo "/var/log/syslog日志文件不存在! "
fi
if [ -e "$log2" ]; then
echo "/var/log/messages日志文件存在! "
else
echo "/var/log/messages日志文件不存在! "
fi
echo --------------------------------------------------------------------------
echo "檢查系統文件完整性2(MD5檢查)"
echo "該項會獲取部分關鍵文件的MD5值並入庫,默認保存在/etc/md5db中"
echo "如果第一次執行,則會提示md5sum: /sbin/portmap: 沒有那個文件或目錄"
echo "第二次重復檢查時,則會對MD5DB中的MD5值進行匹配,來判斷文件是否被更改過"
file="/etc/md5db"
if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1;
else
md5sum /etc/passwd >>/etc/md5db
md5sum /etc/shadow >>/etc/md5db
md5sum /etc/group >>/etc/md5db
md5sum /usr/bin/passwd >>/etc/md5db
md5sum /sbin/portmap>>/etc/md5db
md5sum /bin/login >>/etc/md5db
md5sum /bin/ls >>/etc/md5db
md5sum /bin/ps >>/etc/md5db
md5sum /usr/bin/top >>/etc/md5db;
fi
echo ----------------------------------------------------------------------
echo "------------------------主機性能檢查--------------------------------"
echo "CPU檢查"
dmesg | grep -i cpu
echo -----------------------------------------------------------------------
more /proc/cpuinfo
echo -----------------------------------------------------------------------
echo "內存狀態檢查"
vmstat 2 5
echo -----------------------------------------------------------------------
more /proc/meminfo
echo -----------------------------------------------------------------------
free -m
echo -----------------------------------------------------------------------
echo "文件系統使用情況"
df -h
echo -----------------------------------------------------------------------
echo "網卡使用情況"
lspci -tv
echo ----------------------------------------------------------------------
echo "查看僵屍進程"
ps -ef | grep zombie
echo ----------------------------------------------------------------------
echo "耗CPU最多的進程"
ps auxf |sort -nr -k 3 |head -5
echo ----------------------------------------------------------------------
echo "耗內存最多的進程"
ps auxf |sort -nr -k 4 |head -5
echo ----------------------------------------------------------------------
echo ---------------------------------------------------------------------
echo "COPY RIGHT 鬼魅羊羔"
echo "QQ:183126820"
echo ---------------------------------------------------------------------
關於腳本使用的幾個問題
直接上傳到服務器中,有時候出現中文亂碼的情況
亂碼情況解決辦法:
dos文件轉換成 unix 文件格式
dos 格式 文件 傳輸到 unix 系統時 , 會在每行的結尾多一個 ^M , 當然也有可能看不到 , 但是在 vi 的時候 , 會在下面顯示此文件的格式 , 比如 "dos.txt" [dos] 120L, 2532C 字樣 , 表示是一個 [dos] 格式文件 , 如果是 MAC 系統的 , 會顯示 [MAC] , 因為文件格式的原因有時會導致我們的 unix 程序 , 或者 shell 程序出現錯誤 , 那麼需要把這些 dos 文件格式轉換成 unix 格式 , 方法是
vi dos.txt
:set fileformat=unix
:w
這樣文件就轉換成 unix 格式 文件了 ,一般在 windows 機器上編寫好了文件傳到 unix 下就可能會出現這樣的情況 , 而一般我們使用 ftp 命令, 常常會加上 bin 參數表示二進制傳輸, 可是試一下不加 bin 參數 , 可能傳到 unix 下就是 unix 格式
Linux打開txt文件亂碼的解決方法
Linux顯示在Windows編輯過的中文就會顯示亂碼是由於兩個操作系統使用的編碼不同所致。Linux下使用的編碼是utf8,而Windows使用的是gb18030。因此,解決Linux打開txt文件中文亂碼可有如下兩種方法。
方法一:
在附件終端中,進入到txt文件所在目錄,使用命令符“iconv -f gb18030 -t utf8 1.txt -o 2.txt”把gb18030編碼的1.txt轉換成utf8的2.txt。這樣2.txt就成為Linux支持的編碼。
方法二:
在附件終端中,使用命令符“gconf-editor”,進入環境配置,依次展開“/apps/gedit-2/preferences/encodings/”,編輯右側的“auto_detected”將“gb18030”添加到最頂上。以後文本編輯器就可以正常顯示中文了。
其實腳本還能增加很多實用的東西,由於最近事兒太多,就沒做改動。
等這段時間忙完了,再上來更新新的東西。