20210410のLinuxに関する記事は8件です。

複数ファイルの中身を一度に確認する

testディレクトリに以下3つのファイルがあるとします。 [oracle@db01 test]$ ll 合計 12 -rw-r--r-- 1 oracle oinstall 12 4月 10 23:09 aaa -rw-r--r-- 1 oracle oinstall 12 4月 10 23:09 bbb -rw-r--r-- 1 oracle oinstall 12 4月 10 23:09 ccc cat * で開くと全部つっくいてどれがどのファイルなのか分かりにくいですね。 [oracle@db01 test]$ cat * aaa aaa aaa bbb bbb bbb ccc ccc ccc grepを使う方法 「grep "" *」でどの中身がどのファイルなのか表示することができます。 [oracle@db01 test]$ grep "" * aaa:aaa aaa:aaa aaa:aaa bbb:bbb bbb:bbb bbb:bbb ccc:ccc ccc:ccc ccc:ccc tailを使う方法 「tail -n +1 *」でもファイル名を表示することができます。 [oracle@db01 test]$ tail -n +1 * ==> aaa <== aaa aaa aaa ==> bbb <== bbb bbb bbb ==> ccc <== ccc ccc ccc 以下のオプションを付けることでファイル名に色付けすることも可能です。 [oracle@db01 test]$ tail -n +1 * | grep -E --color=auto "==>.*<==|$" ==> aaa <== aaa aaa aaa ==> bbb <== bbb bbb bbb ==> ccc <== ccc ccc ccc qiitaのコード内の色付けの仕方がわからないのでここだと同じに見えてます。。。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux メモ ユーザー入力を受け付ける

サンプルコード1 echo -n 'input something: ' read input echo "$input" サンプルコード2 question.sh read -p 'USER NAME: ' user_name stty -echo read -p 'PASSWORD: ' password stty echo echo -e '\n' echo "Hi! $user_name" echo "$password" 複数入力を受け付ける方法はこちら パスワードの非表示入力をしたい場合 ユーザー入力部分をパイプラインで渡す パイプラインでサンプルコード2のスクリプトにユーザー名・パスワードを渡す $ printf 'hello\npass' | sh qustion.sh stty: standard input: Inappropriate ioctl for device stty: standard input: Inappropriate ioctl for device Hi! hello Your Password: pass コメントにて コメントで教えて頂きました。 ユーザーの入力文字を非表示にしたい場合、read -s -p のように-sオプションをつけると、sttyが不要になります。stty: standard input: Inappropriate ioctl for device のエラーも消えました。 question.sh read -p 'USER NAME: ' user_name read -s -p 'PASSWORD: ' password echo -e '\n' echo "Hi! $user_name" echo "Your Password: $password" $ printf 'hello\npass' | sh qustion.sh Hi! hello Your Password: pass 参考記事
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux向けてんこ盛りサイト

最近 Linux 向けに色々なツールや環境構成を手助けする PLING ←クリック!(新窓)というサイトでよく遊んでいます。 メインページは ALL となっていますが、左枠に様々なツールの案内があります。 LinuxUnix Desktop だけでも50837という数 その内訳  *Boot and Splashscreens *Cursors *Desktop Extensions *Desktop Themes and more, フォント、システムサウンド、壁紙、などなど・・・ 特に面白いのが Xfce Gnome 等の Desktop 環境別に対応するツール Pling →Linux/Unix Desktops →Desktop Themes と入って下さい。 Be-Shell/Bespin Cinnamon Enlightenment Gnome/GTK KDE Kvantum LXQt Themes QSvgStyles QtCurve XFCE/XFWM4 Themes これだけあれば迷います。 それぞれのテーマなどは使っている環境によりますが 面白いこと請け合いです! コロナ禍、お暇なあなた・・・遊んでみて下さい。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

多段ssh (途中のホストで名前解決)

構成 Host Port User HostName IP target の名前解決 local - - - - 不可 jump1 10022 user1 jump1.domain1.example.com - 可 jump2 20022 user2 jump2.domain2.example.com - 不可 target 30022 user3 target.domain3.example.com 192.168.3.3 - 目標 local から jump1、jump2 を経由し、target に ssh 接続。 ただし、target の名前解決は jump1 で実行。 普通にやるとこうなる: user0@local$ ssh -p 10022 user1@jump1.domain1.example.com user1@jump1$ ssh -p 20022 user2@jump2.domain2.example.com user2@jump2$ ssh -p 30022 user3@192.168.3.3 # jump2 は target を名前解決できない user3@target$ config を書いてこうしたい: user0@local$ ssh target user3@target$ 準備 jump1 で resolve を実行すると target の名前解決ができるものとする。 user1@jump1$ resolve target.domain3.example.com 192.168.3.3 解決策 local の ~/.ssh/config: Host jump1 Port 10022 User user1 # local が名前解決 HostName jump1.domain1.example.com Host jump2 Port 20022 User user2 # jump1 が名前解決 HostName jump2.domain2.example.com ProxyCommand ssh -W %h:%p jump1 Host target Port 30022 User user3 # local から jump1 に ssh アクセスし、resolve を実行し、target を名前解決 ProxyCommand ssh -W $(ssh jump1 resolve target.domain3.example.com </dev/null):%p jump2 一般化 nameserver で target を名前解決し、local から jump 経由で target にアクセス。 目標: local$ ssh target target$ localの ~/.ssh/config: Host jump ... Host target ProxyCommand ssh -W $(ssh nameserver resolve target </dev/null):%p jump local から nameserver に必ずしも直接アクセスできる必要は無い。 nameserver へは ProxyCommand を使い、複数の jump サーバー経由でアクセスしても良い。 注意 ProxyCommand に </dev/null が無いと以下のようにエラーとなり、ssh 接続できない。 user0@local$ ssh target Bad packet length 1231976033. ssh_dispatch_run_fatal: Connection to UNKNOWN port 65535: message authentication code incorrect また、ProxyCommand を利用しない多段 ssh で名前解決を実行しても、同様のエラーが発生する場合がある: ProxyCommand ssh -W $(ssh jump1 ssh nameserver resolve </dev/null):%p jump2 これは </dev/null を ssh の引数に工夫して入れ込めば恐らく解決できる。 しかし、ssh が3段や4段となるとクオートが大変だったり色々面倒くさいので検証していない。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

shellscriptのfor,while

shellscriptのfor,while,untilなどを勉強したのでまとめます。 for文 書式 変数に値を格納してその値の個数分ループする。 for_ex.sh for 変数名 in 値; do 処理 done 例 for.sh for var in 1 2 3 4 5; do echo $var done for var2 in `seq 1 5`; #seq 1 2 10 だと 1 3 5 7 9が格納される do echo $var2 done どちらも実行すると1行ずつ数値が表示される。 (seqを使って指定すると、短く書ける。インクリメントする数も指定できる。) break・continue file.sh #break for var in `seq 1 10`; do echo $var if [ $var -eq 5 ]; then break fi done #continue for var2 in `seq 1 10`; do if [ $var -eq 3 ]; then continue done echo $var2 done 数値が5のとき終了する文と、数値が3のとき表示しない文。 for文でコマンドを実行 command.sh for com in pwd ls; do echo $com #コマンドは実行されない $com #コマンドが実行される done 変数に文字列を格納して、$変数名とかけば実行ができる。 while文 条件が満たされている間はdo~doneの処理を実行する。 書式 while_ex.sh while [ 文字列 ] or (( 数値 )); do 処理 done 数値演算は$(( ))だけど、while文では(( ))となる。 例 *var変数がある前提で while.sh #文字列 read -p 'var変数の中身' var while [ $var != 'end' ]; do echo 'yes!' read -p 'var変数の中身' var done #数値 varn=0 while (( $varn < 10 )); do echo $varn varn=$(( $varn + 1 )) #これがないと無限ループになる done 上はendという文字列を入力したら処理が終了する。 下は変数$varnが10より小さい場合に数値を表示し、最後の行で変数をインクリメントしている。 break breakが実行されると、ループ自体が終了する。 break.sh var=0 while (( $var < 10 ); do if [ $var -eq 7 ]; then break fi var=$(( $var + 1 )) done この例では$varが7になったらループを強制終了させる。 continue continue以降の処理を中止し、ループを繰り返す。 continue.sh var=0 while (( $var < 10 )); do echo $var if [ $var -eq 7 ]; then continue fi var=$(($var+1)) done これを実行すると$varが7になったら、最後のインクリメントが行われずに無限ループになる。 出力は下記のようになる。(Ctrl+Cで終了) 1 2 ~~ 6 7 7 . . whileでファイルを読み込む 読み込ませるファイル sample.txt 1 2 3 sample hello やり方 file.sh while read var do echo $var done < 'sample.txt' ----------- or ----------- cat 'sample.txt' | while var do echo $var done catで変数を読み込もうとしたらエラーが正しく処理されなかった。 変数を使うときは上の方がいい。 出力 1 2 3 sample hello whileの条件にread 変数名を書くことで外部ファイルを変数に格納する。(1行ごと) その変数をechoで表示している。 until文 条件にマッチするまで処理を続ける。 書式はwhileと同じ。 例 until.sh var=0 until (( $var > 10 ); do var=$(( $var + 1 )) done $varが10より大きくなるまでインクリメントを続ける。 間違いがありましたらご指摘ください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PrivateなEC2でyumコマンド使いたいけど「Resolving timed out after 5000 milliseconds」が出た時の対応

EC2でyum updateしようとしたら以下のエラーが発生した。 前提として ・EC2はPrivate Subnetに配置してある ・VPCエンドポイントは設定済み である。 [ec2-user@ip-10-0-77-0 ~]$ sudo yum update 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd Could not retrieve mirrorlist http://amazonlinux.ap-northeast-1.amazonaws.com/2/core/latest/x86_64/mirror.list error was 12: Timeout on http://amazonlinux.ap-northeast-1.amazonaws.com/2/core/latest/x86_64/mirror.list: (28, 'Resolving timed out after 5000 milliseconds') One of the configured repositories failed (不明), and yum doesn't have enough cached data to continue. At this point the only safe thing yum can do is fail. There are a few ways to work "fix" this: 1. Contact the upstream for the repository and get them to fix the problem. 2. Reconfigure the baseurl/etc. for the repository, to point to a working upstream. This is most often useful if you are using a newer distribution release than is supported by the repository (and the packages for the previous distribution release still work). 3. Run the command with the repository temporarily disabled yum --disablerepo=<repoid> ... 4. Disable the repository permanently, so yum won't use it by default. Yum will then just ignore the repository until you permanently enable it again or use --enablerepo for temporary usage: yum-config-manager --disable <repoid> or subscription-manager repos --disable=<repoid> 5. Configure the failing repository to be skipped, if it is unavailable. Note that yum will try to contact the repo. when it runs most commands, so will have to try and fail each time (and thus. yum will be be much slower). If it is a very temporary problem though, this is often a nice compromise: yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true Cannot find a valid baseurl for repo: amzn2-core/2/x86_64 Resolving timed out after 5000 milliseconds でggったら公式リファレンスが引っかかった。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-troubleshoot-yum-errors-al1-al2/ けど内容が正直よく分からない・・・(YourDNSって何?どう正しければ良いの?何を直せばいいの?) 「Resolving timed out after 5000 milliseconds」 次のコマンドを実行して、/etc/resolv.conf ファイルに DNS サーバーの正しい IP があることを確認します。 cat /etc/resolv.conf nameserver YourDNSIP 取り急ぎの対応だとは思うが、とりあえずこの /etc/resolv.conf の設定を変えることで自分の場合がyum使えるようになりました。 以下手順です。 ①sudo権限で/etc/resolv.confを編集する $ sudo vi /etc/resolv.conf ②nameserver {IPアドレス}の部分を上書きする。(上書きしたら!wqで保存。) (変更前) nameserver {IPアドレス} (変更後) nameserver 8.8.8.8 nameserver 8.8.4.4 これで出来ない場合は上に貼った公式リファレンスを上から眺めていくと良いかもです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

RHCSA (EX200) に合格したので独学での勉強方法などを書いていく

はじめに 先日 Red Hat 社の認定資格 RHCSA の試験(EX200)に満点で合格できましたので、独学での勉強方法などを残しておきたいと思います。 受験方法 EX200 試験を個人で受験する場合、主に以下の3つの選択肢があります。いずれも申し込みにあたっては Red Hat アカウントの作成が必要になります。 受験者が指定の試験会場に集合して受けるクラスルーム試験 テストセンターで受ける個人用試験 (キオスク試験) 任意の端末で受験できるリモート試験 私の場合、リモート試験用の部屋が準備できなかったこと、テストセンターが3月まで休止中だったため、ハードウェアも準備してもらえるクラスルーム試験を申し込んで受験することにしました。クラスルーム試験はおおむね月1で開催されているようです。 EX200 試験の概要 RHCSA 試験は RHEL 8.2 をベースに基本的な Linux の操作を問われる試験です。パフォーマンスベーステストのため、各設問で提示される要件に合わせて実際に RHEL を操作して設定していきます。 試験時間は3時間、合格点は 210/300 (70%)です。試験で要求される項目は EX200 のページに記載されているので以下を参照してください。具体的な問題などは NDA への署名により開示不可となります。 受験時に必要なもの 試験の申し込みを行った後は、受験する際に写真付きの身分証明書の提示が必要になります。私が受けたクラスルーム試験の場合は日本語の運転免許証で対応可能でした。 また、試験時にメモ用のホワイトペーパー(普通の紙)を渡されます。その際に日付と名前を書くことになりますがペンは提供が無かったので、ボールペンを持参することを推奨します。 なお、受験の際に結果を通知するためのメールアドレスの入力が必要になるので、事前に確認しておきましょう。 クラスルーム試験は試験開始15分前には会場に到着している必要がありますが、30分前には到着してゆっくりしておくのが良いと思います。ドレスコードはビジネスカジュアルなので、あまりにラフ過ぎる格好は避けた方が良いでしょう。 試験対策にあたって活用した資料やサイト Red Hat 社のトレーニング(RH124/RH134/RH200)を受けることが最も効率的で推奨されます。ただ、私の場合は会社の補助もなかったため、O'Reilly Learning のサブスクリプションで閲覧できる以下の書籍や動画で学習を進めました。英語を読むのが面倒な場合は適宜、Chrome の翻訳機能なども併用しています。 O'Reilly Learning のサブスクリプションは \$49/month とそこそこしますが、ACM の Professional Membership の特典としても利用することができます。ACM Pro 会員は \$100/year のため相当お得です。 また、理解が不足している部分などは Red Hat 公式の製品ドキュメントやナレッジベースを参照して補完しています。 その他には、有志の Red Hat 認定資格の学習グループの Slack に登録しています。こちらは試験における一般的な注意点の確認や上述の書籍に関する FAQ、有志によって作成されたサンプル試験などを補助的に利用していました。 学習環境構築の Tips EX200 は RHEL 8.2 ベースの試験のため、CentOS や Fedora ではなく RHEL8 の環境で学習を行うべきです。先日、Red Hat Developer Subscription が拡張され、個人1ユーザーが 16 システムまで無償でサブスクリプションを利用できるようになっています。こちらを活用するのが良いでしょう。 学習環境を構築する際は VirtualBox や VMware Workstation の仮想マシンに RHEL8 をゲストとしてインストールし、OS インストール直後の状態で仮想マシンのスナップショットを取っておけば「環境をいじる→スナップショットへのリストア」の繰り返しで練習がしやすくなると思います。 勉強期間 勉強期間としてはおおむね2ヶ月弱、時間にすると 60 時間程度の勉強を行いました。基本的には上述の書籍や動画の内容を淀みなく実施できるまで勉強しています。業務でも度々 Linux に関わることはありましたので、それほど試験対策が苦になることはありませんでした。 試験にあたっての一般的な注意点 EX200 の試験は上述したように実際に OS を操作するパフォーマンスベーステストですので、もし操作を行っている中で OS 内のトラブルが発生した場合には自力でトラブルシューティングを行っていく必要があります。 最悪、OS を試験開始時の状態にリセットすることも可能ですが、試験の後半にリセットが必要になると多大な時間のロスが発生してしまいます。この試験に限らず一般的なシステムの運用と同様、実施する作業はロールバックが行えるよう日頃から意識しておきましょう。 また、採点対象の環境にインターネット接続はなく、一般の Web サイトを検索する能力は役に立ちません。コマンドのヘルプを見る、man -k や man -K で man ページを検索するなど、RHEL 8.2 の機能で完結できる調べ方が必要になります。日頃からコマンドやファイルの仕様などは OS 内のドキュメントで調べられるようにしておきましょう。 なお、クラスルーム試験の場合は会場側でテスト済みハードウェアが用意されているので、物理的な問題(例えばキーボードやモニターの破損、試験用ソフトウェアの誤動作など)は起きづらいと思います。試験官も日本語話者のため、もし試験中に発生しても焦らずに手を上げて申告すれば対応してもらえるはずです。 受験後にやること 受験後、2~3営業日で採点結果が以下のようなメールで通知されます(早い!)。合計点の他にカテゴリ別の正答率なども合わせて提示されるので、苦手な分野はきちんと復習しておきましょう。 また、同通知メールの後ろの方に認定情報を照会するための Certification ID と Red Hat 社サイトへのリンクが記載されています。 Red Hat 社サイト右上の [アカウント] > [プロファイルと設定の編集] から認定ページにアクセスし、アカウントと Certification ID を関連付けることで認定を照会できるようになります。以下のページも参考にアカウントとの関連付けを実施しておきましょう。 おわりに 今回、独学で RHCSA の勉強を行って EX200 試験に合格できました。公式のトレーニングの受講に比べれば効率は悪いと思われますが、独学でも頑張れば満点合格は可能ですので、今後受験される方のお役に立てば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】ハイフンをいっぱい出したかっただけなのに【printfコマンド】

初めに 実務で使ったコマンドの使い方を備忘録的にまとめます。 基本的な使い方は色んな方が書かれているので簡単に、 使っていて気付いた部分を重視して記述します。 実際の動きを見た推測等を含むため、仕様的に間違いがありましたら教えていただけると幸いです。 printfコマンドとは データを整形して、表示するコマンド。 整形して表示とは、 $ printf "%s" penpen penpen[root@nagisa] 「""」の中でフォーマットを指定して、整形して表示しています。 実行結果を見て分かる通り、改行はしません。回り込んじゃってますね。 改行したい場合は「\n」をつけてあげます。 $ printf "%s\n" penpen penpen データを整形ってよくわからないんだけど? $ printf "%x\n" 255 ff 「%x」でデータ(引数)の「255」のフォーマットを16進数に指定して、整形してあげています。 出力結果はしっかり16進数で表示されていますね。 使い方備忘録 ここからは実務で使ったやりかたの備忘録です。 参考程度にご覧ください。 ハイフンをいっぱい出したい!! 実務でシェルスクリプトを作る過程で、printfコマンドの動きを確認していました。 ハイフンを量産して区切りでも作ってみようか。 ハイフン量産方法の例 $ printf "%s-" {0..60} | tr -d '[0-9]' | awk '{print}' ------------------------------------------------------------- $ printf "%s" {0..60} | sed -e s/[0-9]/-/g -e s/$/\\n/ ---------------------------------------------------------------------------------------------------------------- $ printf "%.s-" {0..60} | awk '{print}' ------------------------------------------------------------- ただハイフンを量産するだけには見合わない労力を費やした気がします。 そもそもこのやり方たちがメジャーなのか不明です。 printfコマンドの使い方なので、他のコマンドの説明は先に簡単に済ませます。 「tr」「sed」これらのコマンドは文字を置換、削除するコマンドです。 ・trコマンド: 正規表現で数字を指定し削除。 ・sedコマンド: 正規表現で数字を指定しハイフンに置換。 どちらのコマンドでも最後に改行を差し込んでいます。意外と奥が深いひと手間。 3つめのコマンドはシンプルで美しいです。 printfコマンドの精度を利用して、文字列を表示しないやり方です。 最小フィールド幅と精度は奥が深そうなので、別記事にして勉強してみるのもいいかもしれません。 printfコマンドで繰り返し 話が脇道に逸れましたが、本題はprintfコマンドを使って、文字列を繰り返し出力できる使い方です。 $ printf "%s" {0..10} | awk '{print}' 012345678910 注目していただきたいのは 「{0..10} 」 この部分。 brace expansion(ブレース展開)というようで、 出力結果を見て分かる通り、ここでは0から10の数字を展開してprintfコマンドに渡しています。 この展開を利用して、ついでに数字にハイフンをつけて、先述したコマンドで数字を置換、削除します。回りくどい。 ハイフンをつけてみると $ printf "%s-" {0..10} | awk '{print}' 0-1-2-3-4-5-6-7-8-9-10- こんな感じ。 ハイフンが各数字にくっ付いていますので、 「012345678910」という文字列を渡しているのではなく、0から10まで繰り返していると推察できます。 実は最初はエラーが出た 実は最初は上手くいきませんでした。 $ printf "-%.s" {0..10} | awk '{print}' bash: printf: -%: invalid option printf: usage: printf [-v var] format [arguments] 違いが判りますでしょうか。 ハイフンを数字の前につけようとすると怒られてしまいます。 エラー内容によると「-%」はオプションとして無効だそうです。 「""」で囲っているのに文字列として認識せず、オプションとして認識されているのでしょうか。 「""」を展開して解釈してくれているみたいなのですがよくわかりません。どなたかご教授を。。。 とにかく、正しい使い方を教えてくれているので実際に使ってみます。 $ printf -v var "%s" penpen $ echo ${var} penpen 「-v」というオプションで「var」という変数に、文字列を整形して格納しています。 このような使い方はしたことがないので詳しくはわかりませんが。。。 ではここでエラーから逆算した使い方を実践してみましょう。 $ printf "-v" var "%s" wanwan $ echo ${var} wanwan 正常終了し、「var」の値も書き換わっています。 オプションを「""」で囲んでもちゃんと認識してくれました。 実は解決策もあった 先述した通り、ハイフンを数字の前につけるとエラーになるのですが、 ハイフンをエスケープすることで回避できます。 $ printf -- "-%s" {0..10} | awk '{print}' -0-1-2-3-4-5-6-7-8-9-10 「--」をつけることで、後の「-」をエスケープできます。 しっかりハイフンが数字の前に付いてくれていますね。 このようなエラーは滅多に出会うことはなさそうですが、もしハマったら中々抜け出せなさそうな沼の予感がします。 まとめ printfコマンドで色々遊んでみました。 労力に見合うほど得るものがあったのかは疑問ですが、楽しかったからヨシッ。 この記事の説明には不足、間違い、推測違いがあるかもしれません。 是非教えて頂ければ新たな学びとなりますので、どうぞよろしくお願いします。 最後に ハイフンのエスケープは他のコマンドでも面白い動きが確認できたので、また記事にしたい思います。 [追記] trコマンドでもハイフンで遊んでみました! 【Linux】trコマンド使ってみた【trコマンド】
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む