Telnet自動化 簡易版

コマンド内容をシェルに書いておく。速すぎると失敗するのでスリープを入れる

#!/bin/sh
sleep 2; echo LOGIN_ACCOUNT
sleep 2; echo PASSWORD
sleep 5; echo pwd
sleep 1; echo exit

実行は以下のように行う

sh test.txt | telnet 192.168.x.x

コマンド集

xargsで並列curl実行

urllistにurlを入れておき、P3で3並列実行

cat urllist.txt | xargs -P3 -t -n1 curl >/dev/null

ファイルを結合(INNER JOINのような)

join -t, a.csv b.csv > joined.csv

findで拡張子複数を検索

find -name "*.txt" -or -name "*.dat"

findで前日に更新されたファイルを列挙

find . -mtime +0 -mtime -2

findで60分以上120分以内に更新されたファイルを列挙

find . -mmin +60 -mmin -120

findで特定の日付以内に更新されたディレクトリ列挙

find .  -maxdepth 1 -mtime +1-type d

上記だと1日以内に更新されたディレクトリを列挙

findで見つかったファイルの合計MB単位で表示する

 find . -name "*log" | xargs ls -la | awk '{ total +=$5 }; END { print total/1024/1024 }'

上記のさらにgzを対象にしたバージョン

find . -name "*gz"  |  xargs gzip  -l | tail -n 1

ディレクトリ古い順に表示して6位から表示

ls -t1 | tail -n +6 

リソース監視

dstat -am --top-bio --top-io -n 5

ファイルを直接書き換える

sed -i 's/hogehoge/fugafuga/' hoge.txt

findとのあわせ技

find . -name "*.css" | xargs sed -i 's/fuga//'

gzのファイルを展開せずにgrepする

zgrep "キーワード" xxxlog.gz
zgrep "キーワード" xxxlog.gz | wc -l
zgrep "キーワード" xxxlog.gz > grepresult.txt

ftp専用ユーザの作成

useradd -s /sbin/nologin ユーザ名

ls編

該当ディレクトリ以下ではなく該当ディレクトリだけの情報を見るls -d
ディレクトリだけ表示ls -algrep ^d

指定ディレクトリ以下の総ディスク使用量を求める。

du -h --max-depth=1 /var/tmp

開いているポートを見る

netstat -tpl

touchで日付時刻指定

touch -t 200612312400 lastupdate

ファイルに基準時刻でtouchしておき、以下のコマンドでその時点以後に更新されたファイルがわかる。

find . -newer lastupdate

findで複数場所から指定のファイルを探す

find /usr/local /usr/bin /usr/sbin -type f -print

findで見つけたファイルと.bkを持つファイルのdiffを一気に表示

find . -name "org.txt" -print0 | xargs -0 -i diff {} {}.bk

上記でorg.txtとorg.txt.bkの比較になる。sedでの書き換えと合わせ技

findでフルパス

探す場所をフルパスで指定すればよい。手動で入力してもよいが、pwdを使うと楽

find `pwd` -name "*" 

findで最終更新日を基準にファイルを探す

find ./ -mtime +50 -name "*.gz"
find ./ -mtime -50 -name "*.gz"
find . -mmin -2
find ./ -mtime +50 -name "*.gz" | xargs rm -f

危険なのでいったんリストアップしてから、|以降の処理を加えるとよいだろう

find . -path "./backup" -prune -o -type f -name "*.txt"

ここではbackupフォルダを検索対象から外し、もうひとつの条件を-oオプションで付与している。

ファイル数が多すぎるフォルダから1000ファイルずつバックアップ

rmやlsで「引数リストが長すぎます」のエラーが出てしまった時の対応でまずバックアップを取得したかったので1000ファイルずつ別のフォルダ(ここでは1_work)にコピーした。

ls --color=never | head -n 1000 | xargs -I {} mv -v {} ../1_work/

emacsのバックアップを消す

find . -name "*~" | xargs rm

特定の関数を使っているファイルをリストアップ

find . -name '*.php' -type f -print | xargs grep wordwrap 2>/dev/null
find . -name "*.php" -type f | xargs grep echo

自分がどのグループに所属するか等の情報を見るコマンド

id

isoイメージをマウントする

mount -o loop xxxx.iso iso_tmp

画面のログを取る〜script

script ログファイル名
exitするまで画面内容をログにためてくれる。エスケープシーケンスを正しく表示させるためログはcatでみるべし

指定の行数でファイル分割〜split

split -l ? intput.txt

psですべてを表示させる

ps -efw

lastログのDNSホスト取得

last  | grep "\.r" | awk '{ print $3 }'

不正侵入者のIP取得(Linux限定)

grep Did secure* | awk -F" " '{print $12}'
grep Illegal secure* | awk -F" " '{print $10}' | uniq
grep refused /var/log/secure*  | awk -F" " '{print $10}' | sort  | uniq -c | wc -l
grep refused /var/log/secure*  | awk -F" " '{print $10}' | sort  | uniq -c | sort -r -n

不正侵入者国別ランキング

grep refused /var/log/secure*  | awk -F " " '{print $9}' |xargs -n 1  geoiplookup -f /usr/share/GeoIP/GeoIP.dat|sort|uniq -c|sort -n

CSVの特定列取得

echo "removed,b,c,d" | awk -F"," '{print $2","$3","$4}'

文字列の前後にリテラルを付与

ダブルクォーテーションは\でエスケープ

 cat category.dat | awk '{print "categories.add(\"" $1 "\");"}'

n日前GET

date --date 'n days ago' '+%y%m%d'

日付設定(Linux)

2006/02/15 11:30
date 0215113006

特定のユーザーにのみsu - を許可

vi /etc/pam.d/suで下記部分をアンコメント
auth       required     /lib/security/pam_wheel.so use_uid

シャットダウンする

shutdown -h now(haltはNG)

HDDの速度調査

hdparm -ft /dev/hda

ハードウェア情報

lshwをインストールする。ほかにもlspciやlsusbがある

コメント除去

grep -v ^#

コメントと空行も除去

grep -v -e "^[ \t]*#" -e "^$" /etc/httpd/conf/httpd.conf

zipでディレクトリごと圧縮

zip -r xxxx.zip ./圧縮したいディレクトリ

改行コードをみる

cat -v ファイル名

CRLFなら^Mが行末に出る

gzで圧縮されたファイルを解凍せずに見る

zcat ファイル.gz | more

HOSTNAME変更

CentOS7より後

hostnamectl set-hostname xxx

CentOS6以前

hostname NEW_NAME
vi /etc/sysconfig/network編集
vi /etc/hosts編集
ネットワーク再起動
/etc/init.d/network restart

キーボード編

CRL+Dでログアウト

有名ソフトウェア

tarで所有者情報を消す

tar czf /var/tmp/hoge.tar.gz hoge/ --no-same-owner --no-same-permissions

AWK

awk -F "delimiter" 'print {$1}'
grep wiki access_log | awk '{ printf("%10s,%10s\n",$1,$11)}' | grep -v "-" | grep -v 221.186.64.20
awk -F , '{ print $1, $3, $5; }' 対象ファイル名
awk '{print "prefix" $1 "suffix"}' account.txt

ダウンロードテクニック

正当性確認

md5sum ファイル名
sha1sum ファイル名

ネットワークの通信量を調べる

netstat -ic

ソースは以下のページ

http://www.math.kobe-u.ac.jp/~kodama/tips-netstatus.html

文字コード変換

nkf

nkf 

iconv

iconv -f EUC-JP -t iso-2022-jp 入力ファイル名
Counter: 14376, today: 1, yesterday: 2

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-14 (金) 13:16:52