以下の内容は業務と関係なし、一般的の方法である。 ========================================================================= ■ Linux Command 使用方法: ------------------------------------------------------------------------- ls -lrt cp [OPTION]... [-T] SOURCE DEST -u, --update SOURCE ファイルがコピー先ファイルより新しいか 存在しない時だけコピーする sync Copyした後に必ず! 削除 rm rfs 作成 ln -s rootfs_20170827_r2.rootfs/ rfs http://uguisu.skr.jp/Windows/tar.html 圧縮 tar zcvf tgtFileName.tar.gz orgfile1 orgfile2 tar zcvflh creating.tar.gz /bin /boot /etc /home /lib /sbin /usr /var tar zcvflh creating.tar.gz * 解凍 tar zxvf filename.tar.gz tar xvf filename.tar.gz tar jxvf ff.tar.bz2 ファイルExplorer: sudo nautilus gedit aa.cpp 他サーバにLogin: ssh uname:pw@192.168.1.100 他サーバにファイルコピー scp -r -p file_org uname:pw@192.168.3.100:/media/sda1 scp -r -p file_org uname:pw@192.168.3.100:. <--- /home/mydir シェルスクリプトの条件式や演算子 http://open-groove.net/shell/conditional-expression/ if文でnot [ ! 条件式 ] if文でand [ 条件式その1 -a 条件式その2 ] if文でor [ 条件式その1 -o 条件式その2 ] if [ "$1" = "qt" -o "$1" = "q" ] && [ $# -eq 1 ]; then 正規表現 【正規表現】文字列の否定、ある文字列を含まない 「abc」or 「def」という文字列を含まない ^(?!.*(abc|def)).+$ 「abc」という文字列を含まない ^(?!.*abc).+$ 「abc」という文字列で始まらない ^(?!abc).+$ Aの直後から「abc」という文字列を含まない繰り返し A((?!abc).)*? 直後に「ABC」も「XYZ」もこないY Y(?!(ABC|XYZ)) grepの表現方法: grep -e "a\|b" grep -e ^export.*HMI_ cat my.log | egrep -e 'error|Error|ERROR|Fail|fail' | egrep -v 'LGD_IOC|BIOS' > new.log これを含む これを除く journalctl 最近のメッセージを表示(-e) journalctl -e -x をつけると詳細情報も表示される(-xe) journalctl -xe tail -fのようにログを監視する(-f) journalctl -f 特定サービスのメッセージだけを表示 -u ユニット名で指定する。 ユニット名とはsystemctlで表示される「sshd.service」など。「.service」は省略できる。 *(アスタリスク)でパターンマッチできる。 journalctl -u sshd journalctl -u httpd journalctl -u nginx journalctl -u mysqld journalctl -u cronie journalctl -u updatedb journalctl -u 'up*' いくらか優先度が落ちるコマンド ログの末尾だけ表示(-n) tail -n 100 のようにログの末尾だけ表示する。 journalctl -n journalctl -n 100 起動時からの全メッセージを表示(-b) journalctl -b journalctl -b 2 # 2回前の起動時のログを表示 ========================================================================= ■eclipse 使用方法 ------------------------------------------------------------------------- workspace取り込み手順 空白になった時に、 eclipse -> File -> Import -> 一般 -> 既存Projectをworkspaceへ -> 次へ -> ルートディレクトリーを下記のフォルダを選択する ~/workspaces/workspace gitから Eclipseを起動して、 インポート->Git->Gitプロジェクト 次へ 既存ローカル・リポジトリ 次へ 自分必要なprojectを選択して次へ 次へ 完了 ========================================================================= ■ C C++ に printf()に 共通Headerをつける方法 ------------------------------------------------------------------------- #define LOG_DEBUG //#undef LOG_DEBUG #ifdef LOG_DEBUG #define DBG(...) printf(__VA_ARGS__) #define ERR(...) fprintf( stderr, __VA_ARGS__) #define DBGP(fmt, ...) \ printf("LogCommon Label(%s:%d) "fmt, __func__, __LINE__, ## __VA_ARGS__) #else #define DBG(...) #define ERR(...) #define DBGP(fmt, ...) #endif ========================================================================= ■ git 操作方法 ------------------------------------------------------------------------- ■ git アップ手順 @ソースコードの取得 $ cd ~/gitwk $ git clone ssh://mysrv@192.168.4.10/home/mysrv/git/ddd1 -b devel $ git clone ssh://mysrv@192.168.4.10/home/mysrv/git/qqqq2 -b master $ git clone ssh://mysrv@192.168.4.10/home/mysrv/git/ggg3 master Aソースコードの修正・確認 上記のworkディレクトリ配下に、ddd1 ,qqqq2, ggg3 が 作成されるので、push用のソースコードを修正を行ってください。 Bソースコードのpush 例えば、ddd1の修正をpushする場合。 $ cd [workディレクトリ]/ddd1 pushする際は、下記のコマンドでpush先に間違いが無いことを確認して下さい。 $ git remote -v 下記のコマンドで全てのディレクトリ配下の修正が反映されます。 $ git add -A $ git commit コメントの入力画面が表示されます。 commitするソースコードも表示されますので、相違が無いか確認して下さい。 (bakファイルなど必要ないファイルはcommit前に削除して下さい。) コメントを入力後、 ctrl+Oキーで保存、リターンを入力する。 ctrl+Xキーで入力モードを終了します。 コメントを入力しないとcommitできません。 下記のコマンドで修正箇所が表示されます。 $ git log -p C修正ファイルをpushする。 現状の修正ブランチを確認する。 $ git branch * develと表示された場合は、下記のコマンドでpushして下さい。 $ git push origin devel 新規 $ git push =================================================================================== ■ gdb の使い方・デバッグ方法まとめ ( http://uguisu.skr.jp/Windows/gdb.html ) ----------------------------------------------------------------------------------- ■ ゾンビ場所のbacktraceログの取得する方法 Teratermでゾンビ場所のbacktraceログの取得する方法: タスクを実行してゾンビになった後に実施する 注:試験前に、/var/core配下のファイルを全て削除してから 試験するのがお勧めです。 @ core dumpの有無のチェック cd /var/core/ ls -lrt find . gz | grep gz A gzにあるフォルダにcore dumpファイルの解凍 cd zzz (例) cd 84_20170101_091401_xxx-simple-e gunzip core_xxx-simple-e_20170101_091401_pid821.gz B gdbでcore dumpファイルを解析: gdbコマンド: 第1引数: アプリの実行ファイルのフルパス、 第2引数: 解凍したcore dumpファイル名(.gz無し!) gdb /usr/bin/xxx-simple-egl core_xxx-simple-e_19700101_091401_pid821 C gdbにてbacktraceログを確認, 落ち箇所のログが表示される。 (gdb) bt =================================================================================== ■ SHELL 構成方法 ( 例 ) ----------------------------------------------------------------------------------- # 実行時に指定された引数の数、つまり変数 $# の値が 1 でなければエラー終了。 echo " ------- `date '+%m/%d %H:%M:%S'` ( \$# = $# ) --------" DateMe=`date '+%m%d%H%M%S'` #echo ${DateMe} echo " " if [ $# -ne 1 -a $# -ne 2 ]; then echo " ============== 使用方法 ================" echo " 指定された引数は$#個です。 1-2 個 の引数が必要です。" 1>&2 echo " " echo " 例: ./mySH.sh eb(e) " 1>&2 echo " ./mySH.sh gr(g) " 1>&2 echo " ./mySH.sh wl " 1>&2 echo " ./mySH.sh qt(q) " 1>&2 echo " ./mySH.sh we(w) " 1>&2 echo " ./mySH.sh sink(s)" 1>&2 echo " ./mySH.sh av(a) " 1>&2 echo " " exit 1 fi if [ $# -eq 1 ]; then PTH_WKSP="/home/myant/workspaces" PTH_FFLIB="${PTH_WKSP}/FFLib/FFLib" PTH_GGKLIB="${PTH_WKSP}/ffdd" PTH_AAIB="${PTH_WKSP}/hhgg" fi if [ $# -eq 2 ]; then PTH_WKSP="/home/myant/gitwk" PTH_FFLIB="${PTH_WKSP}/eee" PTH_GGPLIB="${PTH_WKSP}/fff" PTH_AALIB="${PTH_WKSP}/ddd" fi if [ "$1" = "av" -o "$1" = "a" ] ; then echo "---------- File Copy ------------" echo ${PTH_WKSP} cd ${PTH_WKSP} cp -r -u -v /MyCopy.cpp ./src/MyHandler/appli_$1_$2_${DateMe}.log sync echo " Copying OK ---->" fi if [ "$1" = "eb" -o "$1" = "e" ] ; then # .... fi if [ "$1" = "gr" -o "$1" = "g" ] ; then # .... fi if [ "$1" = "sink" -o "$1" = "s" ] ; then # .... fi if [ "$1" = "qt" -o "$1" = "q" ] ; then # .... fi cd ~ echo on --------------------------------------- if [ "${MY_MODE}" = "CASE1" -o "${HMI_MODE}" = "CASE2" ]; then echo " a --- " elif [ "${MY_MODE}" = "CASE3" ] ; then cd ~ fi --------------------------------------- =================================================================================== ■ Teraterm ファイル:keyboard.cnf 構成 ( 例 ) ----------------------------------------------------------------------------------- keycodeは teraterm\keycode.exeを立ち上げ、対応なキーを押したら、得られる。 ;Example of user key definitions. ;[User keys] ; Ctrl + F1 key: character string ;User1=1083,0,telnet myhost ; ; Ctrl + F2 key: control characters ;User2=1084,0,$0D$0A ; ; Ctrl + F3 key: CR character with new-line code conversion (CR -> CR/CR+LF) ;User3=1085,1,$0D ; ; Ctrl + F4 key: Executing a macro file ;User4=1086,2,test.ttl ; ; Ctrl + F5 key: Executing a menu command ;User5=1087,3,50110 [User keys] ; Ctrl + F4 key: Executing a macro file ;User4=1086,2,set_time.ttl ; Ctrl + shift+z User1=1580,2,set_time.ttl ; Ctrl + shift+x User2=1581,0, ./mklg $0D$0A ; Ctrl + shift+m User3=1586,0, ./modChg.sh ; Ctrl + shift+3 ;---- A2 ---- User4=1540,0, mycmd1 1 1024 780 480 ;---- C1 ---- ;User4=1540,0, mycmd2 0 1024 780 480 0 ; Ctrl + shift+4 User5=1541,0, systemctl start mytask ; Ctrl + shift+5 User6=1542,0, ./r.sh ; Ctrl + shift+6 User7=1543,0, ./r1.sh ; Ctrl + shift+7 User8=1544,0, ./r2.sh ; Ctrl + shift+s User9=1567,0, sync $0D$0A ; Ctrl + shift+p User10=1561,0, pstree | grep - ; Ctrl + shift+t User11=1556,0, ps aux | grep 0 =================================================================================== ■ Teraterm Linux OS タイム自動設定 ( 例 ) ----------------------------------------------------------------------------------- getdate nowDatae "'%m/%d %H:%M:%S %Y'" dataSet = "date -s " strconcat dataSet nowDatae ;sendln 'root' ;pause 1 sendln dataSet ; ---- 自動ログ保存 ----- connect '/C=5' ;getenv 'USERNAME' username gettime timestr "%m%d_%H%M" ;getdir mdir ;sprintf2 filename '%s\console_%s_%s.log' mdir username timestr logDir = 'C:\share\log' sprintf2 filename '%s\tera_console_%s.log' logDir timestr logopen filename 0 0 1 0 1 sendln '' pause 1 sendln "root" pause 1 getdate nowDatae "'%m/%d %H:%M:%S %Y'" dataSet = "date -s " strconcat dataSet nowDatae sendln dataSet =================================================================================== ■ sakura Editor Color Set ( 呉専用 ) ----------------------------------------------------------------------------------- ; テキストエディタ色設定 Ver3 ; File name : c.col [SakuraColor] C[BRC]=0,1,ffffff,000000,0 C[CAR]=1,0,ff8080,000000,0 C[CBK]=0,0,ffffff,000000,0 C[CMT]=1,0,bec210,000000,0 C[CTL]=1,0,ffffff,000000,0 C[CVL]=0,0,ffffff,000000,0 C[DFA]=1,0,ffffff,000000,0 C[DFC]=1,0,ffffff,000000,0 C[DFD]=1,0,ffffff,000000,0 C[EBK]=0,0,ffffff,000000,0 C[EOF]=1,0,ffffff,000000,0 C[EOL]=1,0,808040,000000,0 C[FN2]=1,0,ffffff,000000,0 C[FN3]=1,0,ffffff,000000,0 C[FN4]=1,0,ffffff,000000,0 C[FN5]=1,0,ffffff,000000,0 C[FND]=1,0,400080,80ff80,0 C[HDC]=0,0,ffffff,000000,0 C[IME]=1,0,80ffff,000000,0 C[KW1]=1,0,80ff00,000000,0 C[KW2]=1,0,ffffff,000000,0 C[KW3]=1,0,ffffff,000000,0 C[KW4]=1,0,ffffff,000000,0 C[KW5]=1,0,ffffff,000000,0 C[KW6]=1,0,ffffff,000000,0 C[KW7]=1,0,ffffff,000000,0 C[KW8]=1,0,ffffff,000000,0 C[KW9]=1,0,ffffff,000000,0 C[KWA]=1,0,ffffff,000000,0 C[LNO]=1,0,c0c0c0,000000,0 C[MOD]=1,1,ff8080,000000,0 C[MRK]=1,0,000000,c08000,0 C[NOT]=0,0,ffffff,000000,0 C[NUM]=0,0,ffffff,000000,0 C[PGV]=1,0,ffffff,000000,0 C[RAP]=1,0,ffffff,000000,0 C[RK1]=0,0,ffffff,000000,0 C[RK2]=0,0,ffffff,000000,0 C[RK3]=0,0,ffffff,000000,0 C[RK4]=0,0,ffffff,000000,0 C[RK5]=0,0,ffffff,000000,0 C[RK6]=0,0,ffffff,000000,0 C[RK7]=0,0,ffffff,000000,0 C[RK8]=0,0,ffffff,000000,0 C[RK9]=0,0,ffffff,000000,0 C[RKA]=0,0,ffffff,000000,0 C[RUL]=1,0,c080ff,000000,0 C[SEL]=1,0,ff80ff,c0c0c0,0 C[SPC]=0,0,ffffff,000000,0 C[SQT]=0,0,ffffff,000000,0 C[TAB]=1,0,808040,000000,0 C[TXT]=1,0,ffff80,000000,0 C[UND]=1,0,c080ff,000000,0 C[URL]=1,0,ffffff,000000,1 C[VER]=0,0,ffffff,000000,0 C[WQT]=0,0,ffffff,000000,0 C[ZEN]=1,0,8000ff,000000,0