- 投稿日:2020-02-05T21:47:25+09:00
初心者向け!基本的なLinuxコマンドと使い方!
みなさんこんにちわ!
こちらはhttps://nokonoko1203.qrunch.io/entries/dSVhxUEcdi3WsU1Vの再投稿になります
このページを見に来てくれた方で、「Linuxを知らない」という方は少ないと思いますが、Linuxのコマンドを熟知している、という方はかなり少ないのではないかなと思います。
全貌はわかりませんが、こちら(Linux コマンド 一覧表(manページ一覧))をざっと見ただけでも無数のコマンドが存在することがわかります。
これらを全て把握し、使いこなすのは容易ではありません。
しかし、実際に日常的に使うコマンドはごくわずかで、全て覚える必要はありません!
今回は「最低限必要なコマンド」を厳選して紹介します!
基本的なLinuxコマンド一覧
①最低限使える必要があるコマンド
- cd:現在のディレクトリの変更
- pwd:現在のディレクトリの表示
- mkdir:ディレクトリの作成
- ls:ファイル・ディレクトリの一覧の表示
- rm:ファイルやディレクトリの削除
- touch:引数で渡された名前のファイルが存在しなかった場合には、空ファイルを作成し、存在した場合には、そのファイルやディレクトリの更新日時を更新
- cp:ファイルやディレクトリのコピー
- mv:ファイルやディレクトリの移動
②使えたら便利なコマンド
- find:ファイル・ディレクトリの検索
- nano:CUIに慣れていない方でも使いやすい初心者向けエディター
- cat:複数のファイルの中身を結合して、標準出力に出力
- less:ファイルの中身をページ送りしながら表示
- grep:ファイルや標準入力の中から特定の単語を検索
- chmod:ファイル権限を変更
- echo:第一引数で与えられた文字列を、そのまま標準出力に出力
- read:第一引数で与えられた名前の変数に、標準入力で与えられた文字を代入
- tmux:1つのコンソールで、複数のコンソールを操作したり、コンソールの状態を維持したままにする
- crontab:プログラムを自動実行するスケジュールを設定する
これらのコマンドを2回に分けて解説していきます!
cd:現在のディレクトリの変更
cd
はChange Directoryの略で 「現在のディレクトリ(カレントディレクトリ)を変更する」コマンドです。cdコマンドを使って、MacにVagrantでLinuxを入れてSSHで接続する方法で作成した
/Users/{Macのログイン名}/vagrant/ubuntu/workspace
に移動してみましょう。local:~ {あなたのユーザー名}$ cd ~/vagrant/ubuntu/workspace local:workspace {あなたのユーザー名}$
local:○○
の部分の表示が変更されたと思います。これでカレントディレクトリが変更になりました。これを別なコマンドで確認してみましょう。
pwd:現在のディレクトリの表示
pwd
はPrint Working Directoryの略で、名前の通りカレントディレクトリを表示します。実際にカレントディレクトリを表示してみましょう。
$ pwd /Users/{あなたのユーザー名}/vagrant/ubuntu/workspaceこのように、
pwd
コマンドは絶対パスが表示されます。ワンポイント用語解説
パス:ファイルやディレクトリの位置のこと
絶対パス:ルート(最上位)ディレクトリからのパス
相対パス:カレントディレクトリからのパス
.
はカレントディレクトリ、..
はひとつ上のディレクトリを表します。このため、先ほどの例でカレントディレクトリがubuntu(
/Users/{あなたのユーザー名}/vagrant/ubuntu
)の場合に、workspace
ディレクトリを示したいとき# 絶対パス /Users/{あなたのユーザー名}/vagrant/ubuntu/workspace # 相対パス ./workspaceとなります!
mkdir:ディレクトリの作成
mkdir
はmake directoryの略でディレクトリを作成することが出来ます。試しに
ubuntu
ディレクトリにdemo
ディレクトリを作成してみましょう。# 現在のディレクトリを表示 $ pwd /Users/{あなたのユーザー名}/vagrant/ubuntu/workspace # cdコマンドで一つ上のディレクトリに移動 $ cd .. # 再度確認 $ pwd /Users/{あなたのユーザー名}/vagrant/ubuntu # ubuntuディレクトリにdemoディレクトリを作成 $ mkdir demoこれでdemoディレクトリが作成されました。
ls
コマンドで確認してみましょう!ls:ファイル・ディレクトリの一覧の表示
ls
はListの略でカレントディレクトリのファイル及びディレクトリを表示します。早速使ってみましょう。
$ ls demo workspaceと表示されると思います。
ubuntuディレクトリには先ほど作成した
demo
ディレクトリと、最初からあったworkspace
ディレクトリの2つが存在することが確認できますね!ちなみに、Linuxのコマンドにはオプションをつけることができます。
オプションは何種類もあるのですが、lsコマンドでは
-a
というオプションをつけることで「隠しファイル(ドットファイル)」を見ることができます。実際に試してみましょう!
# ホームディレクトリ(チルダ:~)に移動 $ cd ~ # ホームディレクトリにあるファイル・ディレクトリが色々表示される $ ls Applications Users Desktop home Documents ・・・ # -aオプションをつけると「.」のついたファイル・ディレクトリが表示される $ ls -a . .. .Trash .bash_history .ssh .bash_profile .bashrc .config .bundle ・・・ Applications Users Desktop home Documentsこのように-aオプションをつけると、「.」のついたファイル・ディレクトリが表示されます。
ドットで始まるファイルはソフトの設定ファイルや一時ファイルであることが多く、
.bash_profile
や.bashrc
は環境変数の設定、.ssh
はsshの接続の際に必要な情報等が入っている重要かつ頻繁に修正を加えるものなので覚えておきましょう!rm:ファイルやディレクトリの削除
rm
はremoveの略で、コマンドではファイル及びディレクトリを削除することができます。しかし、ディレクトリを削除する際には
-r
オプションをつける必要があります。$ pwd /Users/{あなたのユーザー名}/vagrant/ubuntu $ ls demo workspace # -rオプションなし $ rm demo # エラーが出る rm: demo: is a directory # -rオプション有り $ rm -r demo $ ls workspaceこのようにdemoディレクトリが削除されて、workspaceのみが表示されるはずです。
-r
オプションは「再帰的に」という意味で、ディレクトリの中身を含めて全て消してしまいたい時に使うのですが、ファイルが入っていないディレクトリにもオプションを指定してあげる必要があります。touch:引数で渡された名前のファイルが存在しなかった場合には、空ファイルを作成し、存在した場合には、そのファイルやディレクトリの更新日時を更新
touch
はchange file access and modification timesの略で、ファイルの最終アクセス日時と最終更新日時を変更するコマンドだが、存在しないファイル名を指定することでファイルの新規作成も行える。今回はubuntuディレクトリにファイルの新規作成を行っていきます。
# カレントディレクトリを確認 $ pwd /Users/{あなたのユーザー名}/vagrant/ubuntu # tmpファイルを作成 $ touch tmp $ ls tmp workspaceこれでファイルの新規作成ができました。
cp:ファイルやディレクトリのコピー
cp
はcopyの略で、
ファイルやディレクトリをコピーすることができます。第一引数にコピー元のファイル・ディレクトリを、 第二引数にコピー先のファイル・ディレクトリを指定してあげます。上で作成した、tmpファイルをworkspaceディレクトリに移動しましょう!
# 第一引数でコピーしたいtmpファイルを指定、第二引数でコピーしたいパスと、新規作成するファイルの名前(tmp)を指定 $ cp tmp ./workspace/tmp # workspaceに移動 $ cd ./workspace # ディレクトリの中身を確認 $ ls tmpパスの指定など、少し操作が面倒ですがこれでファイルのコピーが出来ます!
ディレクトリをコピーする際には-rオプションを指定して再帰的にコピーする必要があります。
mv:ファイルやディレクトリの移動
mv
はmoveの略で、ファイル・ディレクトリを移動することができます!ubuntuディレクトリでファイルを新規作成して、workspaceに移動させてみましょう!
# ディレクトリの中身を確認 $ ls tmp workspace # tmp2ファイルを作成 $ touch tmp2 $ ls tmp tmp2 workspace # workspaceに移動 $ mv tmp2 ./workspace $ cd ./workspace $ ls tmp tmp2mvコマンドはこの他にも、名前を変更するのに使えます。
$ ls tmp tmp2 # tmp2のファイル名をdemo_fileに変更 $ mv tmp2 demo_file $ ls demo_file tmpこのようにファイルの移動・修正を行うことができます。
どちらも同じコマンドで出来てしまうので注意が必要ですが、非常に便利なコマンドです!
以上、計8個のコマンドの説明をしてきました。
これらはターミナルを使った操作の中でも基本中の基本ですので、ぜひ使ってみて、覚えてみましょう!
紹介した以外にも多数のオプションが存在しますので、色々調べて、試してみてくださいね!
次回はこの他に、使えたら便利なコマンドを紹介していきます!
- 投稿日:2020-02-05T19:39:51+09:00
Debian で vmware horizon client を動かす
Debian Linux (AMD64) に VMware horizon client をインストールして、firefox から起動するための手順。当てはまるのは、うちの会社だけかも。
Linux から、Windows のリモートデスクトップにつなぐための手段。VMware horizon のインストール
- Web browser で https://my.vmware.com/jp/web/vmware/info/slug/desktop_end_user_computing/vmware_horizon_clients/4_0 (version は変わっていくと思われる) に行く。
- 表示されたページの 64 bit linux のところの[ダウンロードする]ボタンから、ダウンロードページへ飛ぶ。
- ダウンロードする。
- /bin/su - で root になる。
- echo $PATH で /sbin や /usr/sbin が PATH に含まれることを確認。これがないと、インストール途中でエラーに。
- ダウンロードしたディレクトリに移動し、 VMware-Horizon-Client-5.3.0-15208949.x64.bundle というような名前のファイルを sh で実行。
- 質問には、 yes と答えておく。
- /tmp/vmware-root 中の vmware-installer-*.log のファイルのうち、一番新しいものを less で見る。
- 深刻なエラーが起こっていないことを確認。
- /usr/bin/vmware-view が存在し、 /usr/lib/vmware 中に library files やディレクトリが生成されていることを確認する。
- 環境にもよるが、一度ログアウトして、入り直したほうがいいかも。
firefox から起動
- 社内の Workspace One のページを firefox で開く。
- 認証を済まして、デスクトップを開くためのアイコンを出す。
- アイコンをクリックする。
- 多分、立ち上がらないので、firefox の設定画面を出す。
- プログラムのところに、「ファイルの種類」が vmware-view となっていて、「取り扱い方法」が「毎回確認する」になっていたら、「毎回確認する」をクリック。
- ファイルを選べるはずなので、/usr/bin/vmware-view を指定する。
- 一度、firefox を立ち上げ直したほうがいいかも。
- 再度 Workspace One を開いて、アイコンをクリックすると、きっと立ち上がる。
スマートカードを使う
- apt install pcscd で debian にソフトウェアを入れたら動いたようす。他にも、 gnome-keyring-pkcs11 libpkcs11-helper1 opensc-pkcs11 を入れたが、関係ないかも。
- 投稿日:2020-02-05T18:01:05+09:00
LinuxでAnacondaインストール中に固った場合
はじめに
CentOSにAnacondaをインストール中にトラブったのでメモ
環境
- CentOS 7
- Anaconda 2019.10-Linux-x86_64.
現象
Anaconda3-2019.10-Linux-x86_64.shでインストール中に以下のUnpacking payloadのところで固まった状態になった。
Anaconda3 will now be installed into this location: /home/kimisyo/anaconda3 - Press ENTER to confirm the location - Press CTRL-C to abort the installation - Or specify a different location below [/home/kimisyo/anaconda3] >>> PREFIX=/home/kimisyo/anaconda3 Unpacking payload ...対応
シングルコアの場合に発生するらしい。仮想環境の場合は仮想マシンのCPUのコア数を2以上にするとうまくいった。
参考
- 投稿日:2020-02-05T18:01:05+09:00
LinuxでAnacondaインストール中に固まった場合
はじめに
CentOSにAnacondaをインストール中にトラブったのでメモ
環境
- CentOS 7
- Anaconda 2019.10-Linux-x86_64.
現象
Anaconda3-2019.10-Linux-x86_64.shでインストール中に以下のUnpacking payloadのところで固まった状態になった。
Anaconda3 will now be installed into this location: /home/kimisyo/anaconda3 - Press ENTER to confirm the location - Press CTRL-C to abort the installation - Or specify a different location below [/home/kimisyo/anaconda3] >>> PREFIX=/home/kimisyo/anaconda3 Unpacking payload ...対応
シングルコアの場合に発生するらしい。仮想環境の場合は仮想マシンのCPUのコア数を2以上にするとうまくいった。
参考
- 投稿日:2020-02-05T18:01:05+09:00
LinuxでAnacondaインストール中に固まった場合の対処
はじめに
CentOSにAnacondaをインストール中にトラブったのでメモ
環境
- CentOS 7
- Anaconda 2019.10-Linux-x86_64.
現象
Anaconda3-2019.10-Linux-x86_64.shでインストール中に以下のUnpacking payloadのところで固まった状態になった。
Anaconda3 will now be installed into this location: /home/kimisyo/anaconda3 - Press ENTER to confirm the location - Press CTRL-C to abort the installation - Or specify a different location below [/home/kimisyo/anaconda3] >>> PREFIX=/home/kimisyo/anaconda3 Unpacking payload ...対応
シングルコアの場合に発生するらしい。仮想環境の場合は仮想マシンのCPUのコア数を2以上にするとうまくいった。
参考
- 投稿日:2020-02-05T15:20:51+09:00
Apache環境でLaravelの環境構築の時に重要だったコマンド(備忘録)
Apach環境下でLaravelのAPI認証回りの設定を行った
・Passportのインストール
Consoleconposer require laravel/passport
・PassportをLaravelに登録する
Console'providers' => [ : Laravel\Passport\PassportServiceProvider::class, ],・キーの生成とレコード挿入
Consolephp artisan passport:install
・全部のデータベースマイグレーションを最初にロールバックし、それからmigrateコマンドを実行
Consolephp artisan migration:reflesh
・シードの実行
Consolephp artisan db:seed
・「Personal Access Client」の生成
Consolephp artisan passport:client --personal ->クライアント名を入力よく訪れたディレクトリ
・このディレクトリの所有者権限をLaravelアプリの所有者に変更しないと、「Service Unavailable」エラーに陥ってた
Console$ ls -l /run/php-fpm/www.sock #権限の確認 $ chown www:www /run/php-fpm/www.sock #権限の変更・Laravel環境のエラーログを見たい!ここで代替エラーの原因がわかる(かも)
Console#アプリのRootディレクトリにて $ vi storage/logs/laravel・ここでよくApache環境のエラーを確認した
Console$ cd / $ vi /var/log/httpd/error_log参考サイト
- 投稿日:2020-02-05T14:33:26+09:00
Apacheでの環境構築におけるいろいろなコマンド
ファイル関連
・ローカル環境からリモート環境へファイル(フォルダ)を転送する
Terminal$ scp -r 送りたいファイル名 root@ホスト名:送りたいリモートのディレクトリ(Ex.)/home/www)・ファイルの所有者権限の確認など
Console$ ls -l 確認したいファイル名・ディレクトリにあるすべてのファイルの権限を確認したいとき
Console確認したいディレクトリに移動ののち $ ll・ファイルの所有者権限の設定など
Console$ chown -R 所有者:グループ所有者 ファイル名-Rを付与することで、ディレクトリ内全体の所有者の設定を変更する
・viでファイルを開いた際に、文字化けしていて、日本語が表示されないとき
Console:set enc=utf-8
・viでログを確認するときに最新のエラーログを確認したいとき
Console:$・Apacheエラーのログを確認する
Console$ cd / $ vi /var/log/httpd/error_logMySQLに関するコマンド
・MySQLでユーザーを作成する際などに、求められるパスワードのセキュリティレベルの設定に関するコマンド
Console-> global validate_password_policy="LOW or MEDIUM or HIGH"・MySQLでパスワードのセキュリティレベル一覧を表示するコマンド
Console-> show global variables like '%validates%';・MySQLのステータス確認
Console$ systemctl status mysqld.service・MySQL ログ
Console$ cd / $ cat /var/log/mysql/mysqld.log・MySQLのユーザー一覧
Console-> SELECT user, host from mysql.user・MySQLのユーザー作成
Console-> create user 'ユーザー名'@'ホスト名' identified by 'パスワード';・MySQLのユーザーの削除
Console-> drop user 'ユーザー名'@'ホスト名';・特定のユーザーにすべての権限を付与
Console-> grant all privileges on データベース名.* to 'ユーザー名'@'ホスト名';・MySQLで行った変更の反映
Console-> FLUSH PRIVILEGES;
- 投稿日:2020-02-05T12:54:29+09:00
改行コード変換で悩まない、簡単変換
経緯
改行コード変換で調べるとtrがよく出てくるが、改行コード指定するのだるい&変換うまくいかない場合があった
もっと簡単なの無いかと探したらnkfで簡単に出来るやんやってみる
環境がMacなのでデフォが改行コードLF
$ file sample sample: ASCII text $ od -c sample 0000000 a a a a a a \n b b b b b b \n c c 0000020 c c c c \n 0000025CRLFに変換(Windows)
$ nkf -c sample > sample_CRLF $ file sample_CRLF sample_CRLF: ASCII text, with CRLF line terminators $ od -c sample_CRLF 0000000 a a a a a a \r \n b b b b b b \r \n 0000020 c c c c c c \r \n 0000030LFに変換(Linux)
$ nkf -d sample_CRLF > sample_LF $ file sample_LF sample_LF: ASCII text $ od -c sample_LF 0000000 a a a a a a \n b b b b b b \n c c 0000020 c c c c \n 0000025
- 投稿日:2020-02-05T11:21:39+09:00
「OZV勉強会LT」「Linux」niceコマンドで知るプロセスと優先順位
社内勉強会LT資料です。
Niceとは
変更したスケジューリング優先度でプログラムを実行する
man page : https://linuxjm.osdn.jp/html/GNU_coreutils/man1/nice.1.htmlnice [OPTION] [COMMAND [ARG]...] -n, --adjustment=N 優先度に整数値 N を加える (デフォルト: 10) --help この使い方を表示して終了する --version バージョン情報を表示して終了する
Niceの使い方
# -n [niceness value] オプション必須 # nicenessの範囲は, 19 ~ -20 ※nicenessが低いほど、優先順位は高くなる nice -n /something/default_nicevalue_is_10 nice -n 0 /batch_sh/something.sh #niceness valueを0 nice -n 5 zgrep "something text" very_huge_data.log.gz nice -n 10 mysqldump -u user -p DBNAME TABLE_NAME > OUTPUT_FILE nice -n -10 /something/this_is_high_priority_execution
プロセスの優先順位確認
psで確認
# PRI, NIを確認 [vagrant@comics ~]$ ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 0 1000 22121 22120 20 0 124924 4256 - Ss pts/0 0:00 -bash 0 1000 22647 22121 20 0 160236 2204 - R+ pts/0 0:00 ps l
topで確認
# PR, NIで確認 [vagrant@comics ~]$ top top - 18:36:27 up 2:22, 1 user, load average: 1.15, 0.77, 0.66 Tasks: 167 total, 3 running, 90 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.4 us, 2.9 sy, 0.0 ni, 94.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1009004 total, 263660 free, 337808 used, 407536 buff/cache KiB Swap: 0 total, 0 free, 0 used. 508032 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22255 apache 20 0 523200 30656 11248 R 20.6 3.0 0:00.69 httpd 3018 mysql 20 0 2050332 121596 19976 S 0.7 12.1 0:11.54 mysqld 8 root 20 0 0 0 0 R 0.3 0.0 0:03.04 rcu_sched 3217 root 20 0 236900 22764 4652 S 0.3 2.3 0:02.13 fluentd 22867 vagrant 20 0 171112 4592 3896 R 0.3 0.5 0:02.46 top
PRとNI
NIとは
プロセスのniceness値、優先順位補正値(ユーザースペース設定値)
PR(PRI)とは
カーネルススケジューラーで参考する、実際のプロセス優先順位
一般プロセスのPRの計算式 : 20 - NI※ niceを指定せず実行する一般プロセスのPRは20になる。
※ リアルタイムプロセス(rt)の説明はここではしない。
プログラムとプロセス
プログラムとは?
コンピューターが解釈し実行できる命令語コードの集合。
一般的にはファイル形式で保存されている状態。プロセスとは?
プログラムに対し、実行命令がくだされたタイミングから、生成される資源。
一般的人はプロセス資源はメモリーにロードされ、
OSのプロセススケジューリングのコントロールの制御下で、
上位のメモリと演算装置によって命令が処理される。
プログラムとプロセスの関係
プロセス優先順位の必要性
なぜ、OSは多数のプログラムを実行・処理できるのか?
基本的に、1CPU(1CORE)は1回1個の命令しか処理できない。(1回 = 1hz, 3Ghz = 1秒で30億回、命令を処理できる)
この制約条件下で、プログラムが同時に処理されていると感じる理由は
- OSの「プロセススケジューラー」のプロセスコントロール
- プロセスのステータス変化(Life Cycle)
の概念があって、成り立っている。
プロセススケジューリング
大体のOSは、複数のプロセスを処理するためにいろんなアルゴリズムを採用しているが、基本的にTime Sharingの概念を使っている。複数のプロセスが、優先順位によって、自分の順番で処理可能な時間が設定される。
プロセスの状態変化(Life Cycle)
- creation : あらたらプロセスの生成
- dispatch : OSスケジューラーがCPUの計算時間を割り当て、処理を実行させること。Running状態に移行
- timeout : 割り当てられた計算時間の切れ。リソースを返却し、Ready状態に移行
- blocking/unblocking : プロセスのIO作業発生時にIO処理を待つためblock状態で待機、プロセサで制御
優先順位とスケジューリングがなかったらどうなるか?
複数のプロセスが、同じ時間の割当で、プロセスが増えるほど、全体の処理時間が遅延される。
問題は、重要なプロセス・システムプロセスにも影響が響きシステムの制御命令系が働かなくなること。
実務では
OS環境で何かを実行することは、プロセスになるということを意識する
サーバーで何らかのコマンド、プログラムを実行するということは、コンピューターの限られたリソースの一部を時間という形で占有することを意味する。
一般プロセスの優先順位は指定しない限りは、同じ比率のリソースを当て貼れられるので、プロセスが増えれば増えるほど他のプロセスの処理時間にも影響を及ぼすことになる。
niceは、この時間占有程度を指定し、プロセスごとの処理優先順位を制限的にコントロールできる。
# ありえる? 本番ウェブサーバーで、バッチ処理を追加したら、ウェブサイト全体の応答速度が落ちた。 >>> APACHE(prefork setting)の場合、1リクエストがプロセスになるので、当然プロセス優先順位の影響を受ける。 >>> バッチ処理が、時間に重要な処理じゃなければ、優先順位を下げて実行するようにする(サーバーを分けるまでではない場合) 本番バッチサーバーで、何らかのバッチを手動実行したら、 何時まで絶対周り終わらなきゃいけない、他のバッチの処理時間が遅延された。 >>> 手動で実行するバッチは特別な理由がない場合は、適切に優先順位を下げて実行する
niceの活用例
前提としては、リアルタイムの必要性が低く、重い処理を前提としている。
本番のバッチサーバーで、手動バッチ実行作業が必要
nice -n 10 /batch_sh/huge_time_and_low_priority.shmysqldumpで、大容量データのダンプ
nice -n 10 mysqldump -u xxxx -p DBNAME > all_db_dump.sql
本番のウェブサーバー、本番ログサーバーのgrep
nice -n 10 zgrep -E `^\d+$` 1GB_FILE.log.gz # zgrepと正規表現の処理はCPUに負荷がすごくかかる作業
phpの中でのシステくコールによるバイナリ実行
exec('nice -n 10 /something/command', $result, $ret); # バッチ処理の中でのシステムコールか、非同期処理の中で必要な場合 # システムコールを使うのに対しては推奨しないため、参考までに見ておくこと結論
- APACHEも、バッチも、Shell Commandも、何ら化を実行したら、それはプロセス。
- プロセスは、限られた時間内で処理・待機を繰り返す。
- プロセスが増えるほど、全体プロセスの待機時間が伸び、処理自体が遅延される。
nice
コマンドで、プロセスに当てる時間を制限的にコントロールできる- 実行するプログラムの優先度・サーバーへの影響度を考え、
nice
を活用してみよう※PS : プログラムの軽量化も大事。
補足:
renice
既存のプロセスのnicenessを変更