Linux

Linux Tips

findコマンドで「許可がありません」がウザイ

$ find / -name memo.txt
find: ‘/usr/lib/firewalld’: 許可がありません
find: ‘/usr/lib64/Pegasus’: 許可がありません
find: ‘/usr/share/Pegasus/scripts’: 許可がありません
となるので、これをなんとかしたい。
このメッセージは標準エラーメッセージなのでこのエラーだけを/dev/nullに捨てればいいわけですね。
(見つかった際は標準出力なので標準エラーだけを捨てるとこのようになる)

$ find / -name memo.txt 2> /dev/null
/usr/oracle/out/memo.txt

ちなみにcrontabでよく出てくるのは
find / -name memo.txt > /dev/null 2>&1
これですね。(このサンプルでは何も出てこなくなるので意味ないけど、、)

lsコマンドでファイルのみ、ディレクトリのみを表示する

オプションに用意されていてもおかしくなさそうなんだけれど、存在しないんですよね。自分はgrep使って対策しています。

ディレクトリのみ表示
ls -lF | grep /
ファイルのみ表示
ls -lF | grep -v /

複数のファイル名を一括変更

rename sooni create_table *.sql
実行例
[root@vm105 work]# ls -l
合計 0
-rw-r--r--. 1 root root 0  3月 22 22:58 sooni_code_mst.sql
-rw-r--r--. 1 root root 0  3月 22 22:58 sooni_event_mst.sql
-rw-r--r--. 1 root root 0  3月 22 22:58 sooni_user_mst.sql
-rw-r--r--. 1 root root 0  3月 22 23:00 udonman_household_mst.sql
[root@vm105 work]#
[root@vm105 work]# rename sooni create_table *.sql
[root@vm105 work]# ls -l
合計 0
-rw-r--r--. 1 root root 0  3月 22 22:58 create_table_code_mst.sql
-rw-r--r--. 1 root root 0  3月 22 22:58 create_table_event_mst.sql
-rw-r--r--. 1 root root 0  3月 22 22:58 create_table_user_mst.sql
-rw-r--r--. 1 root root 0  3月 22 23:00 udonman_household_mst.sql
[root@vm105 work]#

CSVファイルのヘッダーを削除

長くなったので以下へ移動しました

ファイル行毎に文字数をカウントする

cat test.csv | while read line; do echo $((`echo $line | wc -m` - 1)); done

指定パターンマッチファイルを対象にgrepする

長くなったので以下へ移動しました

linux ファイルのタイムスタンプ変更

$ touch --date="2021/6/10 22:00" test.txt
$ ls -lt test.txt
-rw-r--r--. 1 oracle oinstall 0  6月 10 22:00 test.txt

ユーザ追加

useradd -m dabada
[root@vm022 ~]# useradd -m dabada
[root@vm022 ~]# passwd dabada da-dabada
passwd: ユーザー名のみが指定可能です。
[root@vm022 ~]# passwd dabada
ユーザー dabada のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは 8 文字未満の文字列です。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@vm022 ~]#

ログインできるユーザ一覧

/etc/shadowで判断する方法

決してエレガントな方法ではないと思いますが、、、私はこれで確認しています

cat /etc/shadow | awk -F ":" '{ if($2 != "!!" && $2 != "*" ) {print $1 }}'
/etc/passwdで判断する方法

こちら簡単なのですが「ログインしないユーザ」(例えばpostgreSQLをインストールした際のpostgresユーザ)も含まれる点ご注意ください。

cat /etc/passwd  | grep bash
### /etc/shadow 第2フィールドはパスワードです。
[root@vm022 ~]# cat /etc/shadow | awk -F ":" '{ if($2 != "!!" && $2 != "*" ) {print $1 }}'
root
sooni
dabada
[root@vm022 ~]#
### /etc/passwdのログインシェルで判断すると「ログインしないユーザ」も含まれるんです、、
[root@vm022 ~]# cat /etc/passwd  | grep bash
root:x:0:0:root:/root:/bin/bash
sooni:x:1000:1000:sooni:/home/sooni:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
dabada:x:1001:1001::/home/dabada:/bin/bash

ログアウトしてもコマンドを実行し続ける

長くなったので以下へ移動しました

スポンサーリンク