20210912のLinuxに関する記事は5件です。

Linux: 自作サービスをsystemdに登録して自動起動させてみた

新しいソフトウェアをインストールした際に使用したのでメモ。 実施環境: Linux [root@testhost ~]# uname -a Linux testhost 4.18.0-331.el8.x86_64 #1 SMP Thu Aug 19 16:49:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux [root@testhost ~]# echo $SHELL /bin/bash Linux においてサービスの自動起動を行う方法はいくつかあります。 かつては sysVinit が有名でしたが、最近の主流は systemd を用いたものとなっています。 そこで、以下の自作のスクリプトを自動起動に登録してみます。 /usr/local/test/test.sh #!/bin/bash while true do sleep 10 done exit 0 まず、 /usr/lib/systemd/system 内に設定ファイルを作成し、以下のように書き込みます。 ファイル名は拡張子が .service であれば何でも良いのですが、今回は test.service としました。 /usr/lib/systemd/system/test.service [Unit] Description = TEST [Service] ExecStart = /usr/local/test/test.sh Type = simple [Install] WantedBy = default.target 上記のファイル内の項目については以下の通りです。他にも細かい設定はありますが、今回は割愛します。 Description:サービスの説明。今回は TEST としましたが、わかれば何でも良いです。 ExecStart:サービスの起動コマンド。フルパスで、引数が必要な場合は引数も含めて記載してください。 Type:サービスの起動タイプ。今回は実行したコマンド(スクリプト)自体が起動し続けるタイプなので simple となります。コマンド自体は終了し子プロセスが生き続けるタイプの場合は forking を指定してください。 WantedBy:サービスが自動起動する環境。CUI( multi-user.target )の場合だけでもよいですが、基本全環境( default.target )でよいかと思います。 次に、 systemctl daemon-reload を実行し設定ファイルの再読み込みを行います。 この時点で、自作のスクリプトを systemd から管理できるようになっています。 Linux [root@testhost ~]# systemctl daemon-reload [root@testhost ~]# systemctl start test.service [root@testhost ~]# systemctl is-active test.service active では、いよいよこのスクリプトを自動起動の対象に設定します。 そのためには、 systemctl enable <サービス名>.service を実行します。 systemctl is-enabled <サービス名>.service を実行して enabled と表示されれば登録済みです。 Linux [root@testhost ~]# systemctl enable test.service Created symlink /etc/systemd/system/default.target.wants/test.service → /usr/lib/systemd/system/test.service. [root@testhost ~]# systemctl is-enabled test.service enabled 早速OSを再起動し、サービスが自動起動していることを確認してみてください。 Linux(再起動後) [root@testhost ~]# systemctl is-active test.service active
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

raspberry pi4 の初期設定

ここ数年は全く新しいPCを買うことがなかったのですがとあるYoutube動画を見てこれなら自分でも再現できそうだと思い、早速ラズパイ3台を購入しました。 この記事ではラズパイ購入後にした最低限のセットアップ作業をまとめています。 最初のラズパイOSダウンロードダウンロード以外はLinuxのセットアップ作業とほぼ変わらなくなっていますが、参考までに。 こういったセットアップもあったほうが良いというものがあればコメントで教えて下さい。 OSダウンロードから起動、最低限のセットアップ作業まとめ OSダウンロード 以下のURLにあるOSファイルをダウンロード Raspberry PI OS ダウンロードしたOSをSDカードに焼き付けるにはImagerツールを使います。Raspberry Pi Imagerはラズベリーパイ財団のWebサイトからダウンロードできます。 Raspberry PI OS Imager Raspberry PI Imagerを起動すると下記の画面が立ち上がります。 ↓の2箇所をクリックして、ダウンロードしたOSのイメージファイルと使用するSDカードを選択してください。あとは「WRITE」ボタンを押すだけです。自分の場合5分くらいで終わりました。 SDカードの準備・パーティションの話 Imager使って起動用のSDカードを作るとパーティションが200MBくらいのもの1つしかなく残りの容量はどこに行った?ってなりました。 ただ、実際に作成したSDカードを使ってOSを起動すると残りの容量もきちんと認識してくれますのでご安心を。 始めて見たときはこれを知らなかったので、SDカード不良だったのかなって少しテンパりました。 ケーブルを挿す順番 HDMI ↓ 電源、HDM以外 ↓ 電源 の順番が無難かと思います。電源を入れると自動でOSが起動するので、それ以外は先に刺しておく方が無難だと思います。 組み立て 何らかのケースには入れたほうが良いと思います。 写真は1段ですが、今回は3台用意しましたので、最終形は3段になっています。 起動から初期設定 言語設定・SSH有効化 $ sudo raspi-config このコマンドで言語設定、SSHの有効化ができるのですが、色々と検索してみましたが今回しようとしていたOSのメニューの情報が見つからずなんとなく英語を読みながら作業を進めました。 これは画像を並べると長くなるので、別で記事を書きます。 モジュールの最新化 ちょくちょくモジュールは更新されるので、まず最初に最新化するようにしましょう。 sudo apt-get update sudo apt-get upgrade sudo apt-get clean sudo apt-get autoclean ※参考 Raspberry Pi パッケージのアップデート方法 ユーザの追加・パスワードの変更 $ sudo useradd [追加するユーザ名] $ sudo passwd [追加したユーザ名] ユーザを作ってもユーザのホームディレクトリが作成されなかったので合わせて作成します。 $ sudo mkdir /home/[追加したユーザ名] $ sudo chown [追加したユーザ名]:[追加したユーザ名] /home/[追加したユーザ名] # ユーザを追加しても権限がないので、piユーザと同じ権限を付与します。 $ groups pi pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio # 追加したユーザにpiユーザと同じグループ権限を付与する $ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio [追加したユーザ名] 公開鍵・暗号鍵の作成 sshで公開鍵・秘密鍵を使って接続するための作業です。 すでに作成済みの鍵を流用する場合、鍵作成の工程は省略できます。 $ cd ~/ $ mkdir .ssh $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/[追加したユーザ]/.ssh/id_rsa): Created directory '/home/[追加したユーザ]/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/[追加したユーザ]/.ssh/id_rsa. Your public key has been saved in /home/[追加したユーザ]/.ssh/id_rsa.pub. The key fingerprint is: SHA256:〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 [追加したユーザ]@(マシン名) The key's randomart image is: 〜〜〜〜〜〜 〜〜省略〜〜 〜〜〜〜〜〜 $ ls .ssh id_rsa id_rsa.pub 最終的に「id_rsa」「id_rsa.pub」の2ファイルが作られます。 秘密鍵:「id_rsa」 公開鍵:「id_rsa.pub」 となるので、秘密鍵はssh接続をするもとのPCに配置。公開鍵はファイル名を変えて保存しておく $ cd ~/.ssh $ sudo mv id_rsa.pub authorized_keys ※参考 sshキー(秘密鍵・公開鍵)の作成と認証 流れ 公開鍵を使わないでログイン $ ssh -v -o PubkeyAuthentication=no [ユーザ名]@(IPアドレス) 複数台設定するとき、ログインユーザを同じ名前にし、かつ、秘密鍵設定済みの場合、ssh接続で公開鍵を使わないことを明示しないと繋がりませんでした。 公開鍵の配置 $ su - [追加したユーザ] $ cd ~/ $ mkdir .ssh $ vi authorized_keys $ chmod 600 authorized_keys sshの設定変更 sshはraspi-configで有効化していますので、その他の設定を追加でします。 # ポート番号を変更 #Port 22 ↓ Port 22222 ←覚えやすいデフォルトとは違うポートに変更。ちなみに22222はあまり良くないと思う # rootユーザのログインを拒否 #PermitRootLogin prohibit-password ↓ PermitRootLogin no # 公開鍵方式を有効化 #PubkeyAuthentication yes ↓ PubkeyAuthentication yes # 公開鍵の保存場所を有効化 #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 ↓ #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 # パスワードでの接続の無効化・空パスワードを無効化 #PasswordAuthentication yes #PermitEmptyPasswords no ↓ PasswordAuthentication no PermitEmptyPasswords no 自分はサーバに置く公開鍵のファイル名をミスってSSH接続できなくなりかなり焦りました。。。 piユーザの無効化 ラズパイのpiユーザはあまりに有名なので、無効化(削除)します。 $ sudo userdel pi 上記コマンドで「pi」ユーザを削除 下記コマンドで「no such user」が出ればOK! $ id -a pi id: `pi': no such user 削除コマンドを実行したときにエラーっぽいメッセージが出ても「no such user」となればよいです。 $ sudo userdel pi userdel: user pi is currently used by process 596 ホスト名を変更 以下の2ファイルを変更します。raspiーconfigでも変更できます。 sudo vi /etc/hostname # デフォルトは「raspberrypi」。好きな名前に raspberrypi ↓ raspberrypi-primary-01 sudo vi /etc/hosts # 以下の一行にhostnameで変えた名前を設定 127.0.1.1 raspberrypi ↓ 127.0.1.1 raspberrypi-primary-01 再起動するとホスト名が変わります。 参考↓ Raspberry Piのホスト名を変更する ※昔はmaster/slaveってよく使いましたが今は使わないです。「ブラックライブズマター」(BLM)から流れが大きく変わっているとのこと。 参考↓ Linuxでも「ブラックリスト」「スレーブ」などの用語を変更へ LANに固定IPを付与 以下のファイルに有線LANの設定を付与する sudo vi /etc/dhcpcd.conf # ファイルの一番下に追記 interface eth0 static ip_address=192.168.192.101/24 static routers=192.168.192.1 再起動することで反映されます。/etc/hostsファイルにもIPの情報を追加しておきましょう。 sudo vi /etc/hosts # 以下の一行にhostnameで変えた名前を設定 127.0.1.1 raspberrypi ↓ 127.0.1.1 raspberrypi-primary-01 192.168.192.101 raspberrypi-primary-01 ←追加 wifiの無効化 # wifiを無効化 $ sudo iwconfig wlan0 txpower off # wifiを有効化 $ sudo iwconfig wlan0 txpower auto その他 aliasの設定 cd ~/ vi .bashrc # 以下を追記 alias ls='ls -FN --color' alias la='ls -aFN --color' alias ll='ls -lFN --color' alias rm='rm -i' alias cp='cp -pi' alias mv='mv -i' 追記後、下記のコマンドで反映 source .bashrc bash_profileにも反映し、ログイン時に自動で反映されるようにする。 ※aliasについては色々な宗教宗派があるみたいですが自分の場合、「ll」を多用するので、それだけ入れておきました。 cd ~/ vi .bash_profile # 以下を追加 source ~/.bashrc まとめ ラズパイの初期設定と言いつつ殆どがLinuxインストール後にすることですね。 AWSやVPSでたびたびLinuxOSの設定を仕事・趣味でしていますが、この記事で書いたことは毎回ググっています。 少し長くなりましたが参考になれば幸いです。 初期設定もまだまだ書くことありますので、時間があれば第2段、第3段と書いていこうと思います。 ラズパイ3台買ったのはKubernetesを使ってみたかったのも理由のひとつなので、これも時間があれば記事にします。 冒頭にも書きましたが他にしたほうが良い書紀作業がありましたらコメントで教えて下さい! よろしくおねがいします。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VIm設定

vimの設定方法 自分のメモ代わりに記載。 vimrcの作成 vim ~/.vimrc "---------------------------------------- " 基本設定 "---------------------------------------- "文字コードをUFT-8に設定 set fenc=utf-8 " バックアップファイルを作らない set nobackup " スワップファイルを作らない set noswapfile " 編集中のファイルが変更されたら自動で読み直す set autoread " バッファが編集中でもその他のファイルを開けるように set hidden "---------------------------------------- " 見た目系 "---------------------------------------- " 行番号を表示 set number " 貼り付けずれない set paste! " 現在の行を強調表示 set cursorline " 現在の行を強調表示(縦) set cursorcolumn " 行末の1文字先までカーソルを移動できるように set virtualedit=onemore " インデントはスマートインデント set smartindent " ビープ音を可視化 set visualbell " コマンドラインの補完 set wildmode=list:longest " 折り返し時に表示行単位での移動できるようにする nnoremap j gj nnoremap k gk " シンタックスハイライトの有効化 syntax enable "メッセージ表示欄を3確保(下のコマンド入力欄) set cmdheight=3 "ウィンドウの幅を設定 :set columns=184 "ウィンドウの高さを設定 :set lines=43 "---------------------------------------- " Tab系 "---------------------------------------- " 不可視文字を可視化(タブが「▸-」と表示される) set list listchars=tab:\▸- " Tab文字を半角スペースにする set expandtab " 行頭以外のTab文字の表示幅(スペースいくつ分) set tabstop=2 " 行頭でのTab文字の表示幅 set shiftwidth=2 "---------------------------------------- " 検索系 "---------------------------------------- " 検索文字列が小文字の場合は大文字小文字を区別なく検索する set ignorecase " 検索文字列に大文字が含まれている場合は区別して検索する set smartcase " 検索文字列入力時に順次対象文字列にヒットさせる set incsearch " 検索時に最後まで行ったら最初に戻る set wrapscan " 検索語をハイライト表示 set hlsearch " ESC連打でハイライト解除 nmap :nohlsearch " ファイルを上書きする前にバックアップを作ることを無効化 set nowritebackup " vim の矩形選択で文字が無くても右へ進める set virtualedit=block " 挿入モードでバックスペースで削除できるようにする set backspace=indent,eol,start " 全角文字専用の設定 set ambiwidth=double " wildmenuオプションを有効(vimバーからファイルを選択できる) set wildmenu "---------------------------------------- " 表示設定 "---------------------------------------- " エラーメッセージの表示時にビープを鳴らさない set noerrorbells " Windowsでパスの区切り文字をスラッシュで扱う set shellslash " 対応する括弧やブレースを表示 set showmatch matchtime=1 " インデント方法の変更 set cinoptions+=:0 " メッセージ表示欄を2行確保 set cmdheight=2 " ステータス行を常に表示 set laststatus=2 " ウィンドウの右下にまだ実行していない入力中のコマンドを表示 set showcmd " 省略されずに表示 set display=lastline " タブ文字を CTRL-I で表示し、行末に $ で表示する set list " 行末のスペースを可視化 set listchars=tab:^\ ,trail:~ " コマンドラインの履歴を10000件保存する set history=10000 " コメントの色を水色 hi Comment ctermfg=3 " インデント幅 set shiftwidth=2 " タブキー押下時に挿入される文字幅を指定 set softtabstop=2 " ツールバーを非表示にする set guioptions-=T " yでコピーした時にクリップボードに入る set guioptions+=a " メニューバーを非表示にする set guioptions-=m " 右スクロールバーを非表示 set guioptions+=R " 検索にマッチした行以外を折りたたむ(フォールドする)機能 set nofoldenable " タイトルを表示 set title " ヤンクでクリップボードにコピー set clipboard=unnamed,autoselect " Escの2回押しでハイライト消去 nnoremap :nohlsearch " シンタックスハイライト syntax on " すべての数を10進数として扱う set nrformats= " 行をまたいで移動 set whichwrap=b,s,h,l,<,>,[,],~ " バッファスクロール set mouse=a " auto reload .vimrc augroup source-vimrc autocmd! autocmd BufWritePost *vimrc source $MYVIMRC | set foldmethod=marker autocmd BufWritePost *gvimrc if has('gui_running') source $MYGVIMRC augroup END " auto comment off augroup auto_comment_off autocmd! autocmd BufEnter * setlocal formatoptions-=r autocmd BufEnter * setlocal formatoptions-=o augroup END " HTML/XML閉じタグ自動補完 augroup MyXML autocmd! autocmd Filetype xml inoremap </ </ autocmd Filetype html inoremap </ </ augroup END " 編集箇所のカーソルを記憶 if has("autocmd") augroup redhat " In text files, always limit the width of text to 78 characters autocmd BufRead *.txt set tw=78 " When editing a file, always jump to the last cursor position autocmd BufReadPost * \ if line("'\"") > 0 && line ("'\"") <= line("$") | \ exe "normal! g'\"" | \ endif augroup END endif 参考サイト https://qiita.com/iwaseasahi/items/0b2da68269397906c14c https://qiita.com/morikooooo/items/9fd41bcd8d1ce9170301
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

現場でよく使われるLinuxコマンド

現場でよく使うわれるLinuxコマンドについて touch 新しいファイルを新規作成する →その後vimなどのエディタを使用してファイルの編集などを行う ls -lで確認するとわかるが、ファイル作成時には実行権限がないため、 $chmod + x ファイル名 で実行権限を付与する必要がある lsコマンドのオプション ①ls -lt ファイルが持つ権限や所有者など詳細情報(-lオプション)を更新時間(-tオプション)ごとに並べる $ls -lt ②ls -la lsコマンド →ファイル名が.ではじまるものは隠しファイルとみなして表示しない しかし、-aオプションを付与することで隠しファイルも全て表示される なおかつ詳細な表示がされる $ls -la ③ls -lit ①にさらにノード番号(データに割り当てられる番号)を表示するiコマンドを付与したもの $ls -lit mkdir 深いディレクトリの作成 mkdirでディレクトリを作成する際、階層が複数あるディレクトリを作りたいという場合もある →しかし、普通の場合だと $mkdir testdir/hogehoge とした場合、ディレクトリ'testdir/hogehoge'を作成できません という表示になってまう そこで使用されるが $mkdir -p &&の使用 mkdirでディレクトリを作ってすぐにcdコマンドで移動することが多い そんな時に $mkdir testdir $cd testdir と打ってもできるが、できれば一回の処理で終わらせたい。 そんな時は2つのコマンド間にに&&を使用することで連続して処理することができる。 $mkdir testdir && cd testdir mv -v mvコマンドは ディレクトリー間でのファイルやディレクトリの移動を行うコマンド 現場では mv -vとして ファイル名やディレクトリ名の変更を行うことが多い cat -n cat -n としてnオプションを付与して 行番号を表示することが多い $cat -n testfile1 1hogehoge 2fugafuga 3hogehoge 4fugafuga まとめ 以上のものは使用頻度が高いのでaliasを使ってすぐに使用できるようにするのがおすすめである。 #aliasの設定 alias ls='ls -F' alias la='ls -a' alias ll='ls -l' #慎重な操作を行いたいコマンドの実行確認 alias rm='rm -i' alias cp='cp -i' alias mv='mv -I' #深いディレクトリを一気に作成 alias mkdir='mkdir-p'
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxコマンドについて

Linuxコマンドについて touch 新しいファイルを新規作成する →その後vimなどのエディタを使用してファイルの編集などを行う ls -lで確認するとわかるが、ファイル作成時には実行権限がないため、 $chmod + x ファイル名 で実行権限を付与する必要がある lsコマンドのオプション ①ls -lt ファイルが持つ権限や所有者など詳細情報(-lオプション)を更新時間(-tオプション)ごとに並べる $ls -lt ②ls -la lsコマンド →ファイル名が.ではじまるものは隠しファイルとみなして表示しない しかし、-aオプションを付与することで隠しファイルも全て表示される なおかつ詳細な表示がされる $ls -la ③ls -lit ①にさらにノード番号(データに割り当てられる番号)を表示するiコマンドを付与したもの $ls -lit mkdir 深いディレクトリの作成 mkdirでディレクトリを作成する際、階層が複数あるディレクトリを作りたいという場合もある →しかし、普通の場合だと $mkdir testdir/hogehoge とした場合、ディレクトリ'testdir/hogehoge'を作成できません という表示になってまう そこで使用されるが $mkdir -p &&の使用 mkdirでディレクトリを作ってすぐにcdコマンドで移動することが多い そんな時に $mkdir testdir $cd testdir と打ってもできるが、できれば一回の処理で終わらせたい。 そんな時は2つのコマンド間にに&&を使用することで連続して処理することができる。 $mkdir testdir && cd testdir mv -v mvコマンドは ディレクトリー間でのファイルやディレクトリの移動を行うコマンド 現場では mv -vとして ファイル名やディレクトリ名の変更を行うことが多い cat -n cat -n としてnオプションを付与して 行番号を表示することが多い $cat -n testfile1 1hogehoge 2fugafuga 3hogehoge 4fugafuga まとめ 以上のものは使用頻度が高いのでaliasを使ってすぐに使用できるようにするのがおすすめである。 #aliasの設定 alias ls='ls -F' alias la='ls -a' alias ll='ls -l' #慎重な操作を行いたいコマンドの実行確認 alias rm='rm -i' alias cp='cp -i' alias mv='mv -I' #深いディレクトリを一気に作成 alias mkdir='mkdir-p'
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む