スキップしてメイン コンテンツに移動

投稿

ラベル(Linux)が付いた投稿を表示しています

Linuxで任意の文字列をbase64エンコードする方法

Linuxでbase64エンコードをするにはbase64コマンドを使えばOKです。 base64コマンド ファイルであれば下記のようにファイル名を指定すると、ファイルの中身をbase64エンコードした結果が標準出力に出力されます。 base64 {エンコード対象のファイル} ファイルに保存したい場合は、リダイレクトを使います。 base64 {エンコード対象のファイル} > {エンコードされたファイル} ファイルではなく文字列をbase64エンコードする場合 echoコマンドとパイプを使えば容易に実現できます。注意点として、base64コマンドでオプションを何も与えないと76文字ごとに改行が勝手に入るので、改行を除きたい場合は -w 0 をオプションに指定します。 echo "エンコードしたい文字列" | base64 -w 0

Composer is operating significantly slower than normal because you do not have the PHP curl extension enabled.

composer install コマンドを実行したところ下記の警告メッセージが表示されました。 Composer is operating significantly slower than normal because you do not have the PHP curl extension enabled. PHPのcurl extensionが有効でないため、Composerが通常より遅くなると言われているので、PHPのcurl extensionをインストールします。 実際、curl extensionをインストールしないと遅くなりました。 Linuxのディストリビューションに応じて下記のコマンドを実行して、PHPのcurl extensionをインストールします。 apt install php-curl yum install php-curl Windowsの場合は、php.iniを編集してcurl extensionを有効化します。 php.iniの場所は php --ini をPoweerShellやコマンドプロンプトで実行すればわかります。 php.ini内の Loaded Configuration File: 付近で下記の行のコメントを削除して、有効化します。 extension=php_curl.dll

WindowsとWSLから相互にファイルにアクセスする方法

WindowsからWSL上のLinuxシステム、WSL上のLinuxシステムからWindows上のファイルにアクセスする方法を紹介します。 * WindowsからWSL上のファイルにアクセスする方法 エクスプローラー上で \\wsl$ と入力すればOKです。WSL上のシステムが起動していれば、下記のようにエクスプローラー内にドライブが表示されます。 * WSL上にセットアップしたLinuxからWindowsのドライブにアクセスする方法 WindowsのCドライブは、Linux上の /mnt/c/ にマウントされています。LinuxのShellから、 /mnt/c にアクセスすればOKです。

前日の日付が入ったファイルをLinuxコマンドで処理

ログファイルのバックアップなどで、日付の入ったファイルを扱うことも多いと思います。 dateコマンドを使って、前日の日付がファイル名に入ったファイルだけを処理する簡単なLinuxコマンドを紹介します。 下記のコマンドでは、dateコマンドにyesterdayと日付フォーマットを引数として渡し、当日が2021年2月25日の時に20210224.logのような書式のログファイルを、dir1からdir2へコピーすることができます。 #!/bin/bash cp -p /dir/*'date -d 'yesterday' +%Y%m%d'.log /dir2/

Linuxコマンドの組み合わせだけで、前日の日付がが入ったファイルのみgzip圧縮する方法

ログファイルなどでは日ごとにファイルを生成し、日付がファイル名に入っている場合があると思います。 前日までの日付のファイルをすべてgzipで圧縮するLinuxコマンドを紹介します。 注: コマンドの組み合わせは、もっと少なくできる方法もあるかもしれませんが、今回紹介したコマンドの組み合わせでも、たたき台にはなるかと思いますので、参考にしてみてください。 # /dir/ディレクトリはいかにある、拡張子がlogのファイルでかたファイル名に含まれる日付がコマンド実行時の前日のものをすべてgzip圧縮するコマンドの組み合わせ。 find /dir/ -type f -name "*.log" | sed 's/.*_\([0-9]*\)\.log/\1/` | awk -v date="$(date +%Y%m%d)" '{if ($0 < date) print $0}' | xargs -I {} find /dir/ -name "*{}.log" | xargs --no-run-if-empty gzip 簡単に解説です。 find /dir/ -type f -name "*.log" :dirディレクトリ配下で拡張子がlogのファイルをすべてリストアップ sed 's/.*_\([0-9]*\)\.log/\1/` :ファイル名から日付部分のみを抜き出し awk -v date="$(date +%Y%m%d)" '{if ($0 < date) print $0}' :コマンド実行時の前日の日付のみ抜き出し。ちなみにawkのvオプションで変数dateを定義しています。 xargs -I {} find /dir/ -name "*{}.log" :前日以前の日付が含まれる拡張子がlogのファイルをすべて取得。ちなみにxargsの -Iオプションの{}の部分で日付部分をfindコマンドに渡しています。 xargs --no-run-if-empty gzip :ファイルがなかったら実行しないというxargsのオプション

Linuxで新規ユーザーとグループの追加とsshでpasswordなしでログインする方法

Linuxで新規ユーザーとグループの追加とsshでpasswordなしでログインする方法のメモです。super userで実施します。 ローカルホスト側: # user1でssh keyを生成した場合の例 $ ssh-keygen -t rsa Enter file in which to save the key (/home/user1/.ssh/id_rsa): Created directory '/home/user1/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. ローカルホストのid_rsaはユーザーのみ読み書きできるように権限"600"を設定。 リモートホスト側: ユーザーとグループの追加 # "group1"をgroup id 100を指定して追加 $ groupadd group1 -g 100 # "user1"をuser id 200を指定して追加 $ useradd user1 -u 200 -g group1 # groupsコマンドでユーザーの所属グループを確認 $ groups user1 user1 : group1 リモートホスト側: sshでpasswordなしでログイン設定 # .sshディレクトリ作成 $ mkdir /home/user1/.ssh # [重要] .sshディレクトリの権限を変更 # "rwx------"か"rwxr-xr-x" 数字指定だと "700" か "755" でないとダメ。 $ chmod 700 /home/user1/.ssh # ログインするホストのユーザーのid_rsa.pubをauthorized_keysに追加 # 実際はssh-rsa

Linuxで特定のパターンにマッチするファイルの削除方法

Linuxで特定のパターンにマッチするファイルの削除方法について簡単にメモ 例1: /tmpディレクトリ配下の128bit hash(例:e111c876b32143abccd98bb56542bcc2)のパターンにマッチするファイルをすべて削除 regextypeを指定しないと我々が普段(?)よく知っているposixのregexが使えないことに注意! find /tmp -type f -regextype posix-egrep -regex '\./[0-9a-f]{32}' -delete 例2: /tmpディレクトリ配下の、AAAで始まるディレクトリで、更新日が5日以前のものを、ディレクトリの中身のファイルも含めてすべて削除 最後の「-exec {} +」は複数のファイルをまとめてコマンド実行するという意味 「-exec {} ;」の場合はファイル一個ずつの処理になるので、rmの場合は「-exec {} +」の方が効率が良い。 find /tmp -mindepth 1 -maxdepth -type d -mtime +5 -name ".AAA*" -exec rm -rf {} +

Linuxで特定のディスクの使用率を調べるコマンド

Linuxで特定のディスクの使用率は下記のコマンドで調べられます。 df {対象のディレクトリパス} | awk '{print $5}' | sed -ne 2p | cut -d"%" -f1 応用で、Bashを使って下記の機能を実現させてみます。 対象ディレクトリを指定できるように 制限値より多い場合に実行失敗にする #!/bin/bash checkDiskUsage() { local $directory=$1 local $limit=$2 # 下記のコマンドの前にssh hostのようにすれば、リモートホストでも実行可能。 local used=`df $directory | awk '{print $5}' | sed -ne 2p | cut -d"%" -f1` echo "Disk usage of $directory: $used%" if [ $used -gt $3 ] then echo "Exceed limit of disk usage (greather than $limit%)" exit 1 fi } checkDiskUsage "/tmp" 80

Linuxコマンド1行で、ファイルが空かどうか判定してメッセージ出力

もっとスマートなやり方があるかもしれませんが、下記のコマンドで実現できます。 du -h {調べたい対象のファイル} | awk -F ' ' '{if (\$1 == 0) print "file is empty"; else print "file is not empty";}' duコマンドの結果でファイルサイズを取得 (ファイルサイズ取れればどんなコマンドでもOK) コマンド出力結果でファイルサイズの部分が0かどうかをawkで判定して、ファイルサイズの結果に応じてメッセージを出力

XMLStarletを使ってLinuxのコマンドラインからXMLを操作

LinuxのコマンドラインからXMLを操作する際には、 XMLStarlet を使うと便利です。 ただし、複雑な処理を適用する場合は、素直にプログラミング言語で提供されているDOMやParserを使う方が良いと思います。 例えば、下記のコマンドを実行すると、特定のxpathにマッチした要素の数を数えることができます。 # selはxml documentへのクエリや検索を実行するためのオプション # -tはテンプレートを指定するためのオプションで、下記の例では、さらに-vで指定したxpathを実行するように命令しています。 xml sel -t -v &quote;count(/xml/table/row)&quote; data.xml オプションは色々あるので、公式ドキュメントを読んで色々試してみるのが近道かと思います。

Bash Script for Back Up Files to Subversion

Introduction There are 2 ways to control files on multiple machines in the software development world. Deploy or build file from version control system Backup files to version control system In my opinion, ideally, everything should be done by the way 1 because it ensures the files are same across the all machines. However in the real world, sometime it is hard to deploy all files from version control system because of the various reasons - such as linux/unix permission or organization structure or too difficult to automating deployment or etc. etc.... In that case, we should take the way 2. In this post, I will introduce simple bash script for back up files to Subversion. Of course you can use your favorite version control system such as Git instead of Subversion ;) If you are a software developer, you can easily refine my bash script and create git version quickly ;) Bash Script for Back Up Files to Subversion See below script! You just save the script and simply execut

Bash Script: Convert File Extension Lower Case

I wrote a small bash script for converting file extension to lower. #!/bin/bash PATH="/somwhere_in_the_world/" EXTS=("jpg" "gif" "png") for ((I=0; I<${#EXTS[@]}; ++I )) do FILES=`find $PATH ! -type f -iname "*."${EXTS[$I]}`; for FILE in $FILES; do FNAME=`expr $FILE : '\(.*\)\.\w\+'` LOWER=$FNAME"."${EXTS[$I]} if [ $FILE != $LOWER ]; then mv $FILE $LOWER echo "$FILE converted to lower case."; fi; done; done;

File Clean Up and Archiving Linux Command Tips

If you would like to delete files whose name ends with "batch.log" older than 30 days, Use the following command. find /var/log/ -name "*batch.log" -mtime +30 -type -f -delete If you would like to archive files whose name ends with "batch.log" older than 30 days, Use the following command. The archived file will have timestamp at the end of the filename. find /var/log/ -name "*batch.log" -mtime +30 -type -f -pront0 | tar -czvf /var/log/batch.log.tar.gz.`date +\%Y%m%d%H%M%S` -T - --null --remove-files

Linux Tips

ディストリビューション Debian TurboLinux RedHat Ubuntu Linux上に何かをインストールするときに役に立つサイト http://www.if-not-true-then-false.com/ : MySQLやJavaをLinuxにインストールする方法が丁寧に解説されています。様々なバージョンの組み合わせについて、どのコマンドを実行すべきか書いてあるので大変便利です。