20211127のLinuxに関する記事は9件です。

SSH接続時のパーミッションエラー解消方法について

事象 SSHにてサーバに秘密鍵ファイルを用いてリモート接続しようとすると、下記エラーが出力される。 エラーメッセージ [ec2-user@ip-10-0-0-187 tmp]$ ssh -i test-keypair.pem ec2-user@10.0.2.79 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'test-keypair.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "test-keypair.pem": bad permissions Permission denied (publickey,gssapi-keyex,gssapi-with-mic). エラーの内容を読んでみると、パーミッションが「0644」となっており、同じグループや他ユーザーから秘密鍵ファイルの読み込みができてしまうため、セキュリティ上問題があると言っているようだ。 解決方法 パーミッションを確認 [ec2-user@ip-10-0-0-187 tmp]$ ls -l test-keypair.pem -rw-r--r-- 1 ec2-user ec2-user 1704 Nov 27 08:42 test-keypair.pem 上記のように「0644」となっている。 ここで、秘密鍵ファイルのパーミッションを「0400(自分のみ読み取り可能)」に変更してみる。 [ec2-user@ip-10-0-0-187 tmp]$chmod 400 test-keypair.pem [ec2-user@ip-10-0-0-187 tmp]$ls -l test-keypair.pem -r-------- 1 ec2-user ec2-user 1704 Nov 27 08:42 test-keypair.pem 再実行すると、ちゃんと繋がるようになりました。 [ec2-user@ip-10-0-0-187 tmp]$ ssh -i test-keypair.pem ec2-user@10.0.2.79 __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-2-79 ~]$ 終わりに 自分に読み取り権限が無ければ接続できないのは勿論ですが、グループや他ユーザーに読み取り権限がある場合でも接続できないんですね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

作成したスクレイピングツールをHTTPで呼び出したかった

前回までのあらすじ 前回の記事 メルカリのスクレイピングツールはできたけど、 ローカル環境でコマンド実行するだけなのはちょっともったいない。 なので今回は、対象URLをURLパラメータとして付与して、 ブラウザからWebサーバ(Apache)にリクエストを投げたら 実行結果が表示されるように改修とか環境構築とかやってみたよ。 やらなきゃいけないこと サーバの用意 初期設定 firewalld、SELinuxの無効化 諸々インストール Python3 google-chrome Apache(httpd) 資材配置 httpd.confの確認、必要に応じて修正 作成資材を規定の場所に配置 実行結果確認 ツール修正 ローカルPCから接続確認 ※セキュリティ的な点は全く考えてないので、必要に応じて対策してね。 1.環境構築 サーバはVMWare Workstation上に、CentOS8を用意。 初期ユーザとかrootパスワードとか作って firewalldとSELinuxを無効化して準備完了。 ちょっと久々すぎてココを忘れてしばらく詰まった…( ˘ω˘ ) 2.諸々インストール yumリポジトリをアップグレードしたら、環境整備。 実行環境はpython Version3.x、 Apacheで待ち受けてリクエストが来たらchromedriver使って実行する感じで。 Apacheならば、特に何の設定もなくPythonツールを動かせるので便利。 ChromeってCLI環境のLinuxでも入るんですね~… 諸々インストールしたりサービス起動したり # yum update ↓必要なパッケージのインストール # yum install python3 # yum install google-chrome # yum install httpd ↓スタートアップ起動有効化したりサービス起動したり。 # systemctl enable httpd # systemctl start httpd 3. 資材配置 作成したツールを実行するにはcgi-binディレクトリ配下で そのツールが実行権限を持ってる必要があるので、 サーバにアップロードしたら、所定の場所に配置して権限変更。 デフォルトのcgi-binディレクトリはconf/httpd.confを参照 よほど変な入れ方していなければ大丈夫だろうけど無ければ追記。 conf/httpd.conf <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> 資材配置 # mv <作成ツール> /var/www/cgi-bin/ # chmod 755 /var/www/cgi-bin/<作成ツール> ツールの配置場所と同じところにchromedriverも一緒に置いておく。 4. 実行結果確認 まずは、Linux環境上でちゃんと動くことを確認しておく とりあえず確認 # python3 /var/www/cgi-bin/<作成ツール> <スクレイピング対象URL> 何も考えなくてもとりあえずは動くはず。 しかしブラウザからは↑のようなコマンドは叩けないので、 URLパラメータから取得する仕組みを組み込んであげる必要がある。 作成ツールの上から変更点 # ~↓リクエストを受けたときPythonで実行するように指定~ #!/usr/bin/env python3 # ~↓cgiをインポート~ import cgi import cgitb cgitb.enable() # ~↓文字コード注意~ print("Content-Type: text/html; charset=UTF-8\n\n") print("") def getMercari(argURL): # ~↓chromedriverはツールと同じところに配置しておく。違うところに置く場合はパスに注意して指定する。~ browser = webdriver.Chrome('./chromedriver',options=options) # ~getMercari関数終わり。特に変更点っぽいところはない~ def main(): # ~主な変更点:URLパラメータからスクレイピング対象URLを取得~ argURL = cgi.FieldStorage() getMercari(argURL=argURL["url"].value) print("done!") if __name__ =='__main__': main() main関数において、FieldStorage()関数を使って URLパラメータ(URLの?以降に並んでいる文字列)を取得している。 参考:cgi --- CGI (ゲートウェイインターフェース規格) のサポート この関数によって取得される値は下記URL例でそのままリクエストすると、 変なところでぶつ切りにされてしまう。 ※別の検証用コードを使って実行結果を確認しておく。 URLパラメータ確認(とりあえずそのまま突っ込む) http://<サーバIP>/cgi-bin/<作成ツール>?url=https://jp.mercari.com/search?status=on_sale&page=1&t1_category_id=5&category_id=5 ↓ FieldStorage(None, None, [MiniFieldStorage('url', 'https://jp.mercari.com/search?status=on_sale'), MiniFieldStorage('page', '1'), MiniFieldStorage('t1_category_id', '5'), MiniFieldStorage('category_id', '5')]) Key-Valueでつながってるから、単純にURLパラメータとして取得して それぞればらばらに処理したいならなんか大丈夫そうだけど、 文字列自体をそのまま使いたい今回の趣旨にはちょっとそぐわない。 そこでURLエンコード。今回はそこを自動化する必要はないので Google先生のおチカラを借りることにして、サクっと変換する。 参考:URLエンコード・デコード 日本語URLを扱うときには便利どころか、 アドレスバーでよく使われる記号も変換した文字列として返してくれるので便利。 そこも頼ることができないシチュエーションだとすると… 一覧から取得してエンコードして実行も自動化…みたいなシーンなら 別途調べる必要がありそうなので、次回Updateするなら今度はその辺ですかね…? URLパラメータ確認(エンコード実施) http://<サーバIP>/cgi-bin/<作成ツール>?url=https%3A%2F%2Fjp.mercari.com%2Fsearch%3Fstatus%3Don_sale%26page%3D1%26t1_category_id%3D5%26category_id%3D5 ↓ FieldStorage(None, None, [MiniFieldStorage('url', 'https://jp.mercari.com/search?status=on_sale&page=1&t1_category_id=5&category_id=5')]) Key-Valueのセットが一つになった! …でもって、次の行のスクレイピング関数にそいつを引数として渡せば あとは実行結果の一覧がブラウザに表示される。 ↑のルールに従って変換できていればCurlでも 呼べるっぽいからとりあえず大丈夫そうですかね。 そんなこんなで、今回のところはこれにて。 今まで点々とばらけていた知識が線になっていくところがなんだか楽しいですね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ジョブの種類についてまとめる

ジョブとは ターミナルが実行している作業のこと。 localhostサーバーを動かす、ログを出力する、ファイルをコピーするなどの操作は全てジョブと呼ばれる。 ジョブの種類 ジョブには大きく分けて3つの種類があり、それぞれフォアグラウンドジョブ、バックグラウンドジョブ,サスペンドジョブと呼ばれる。 フォアグラウンドジョブ フォアグラウンドジョブは出力結果がターミナル上に表示されるもののことを言う。 例えばファイルの中身を表示するcatコマンドは結果がターミナルに表示されるのでフォアグラウンドジョブにあたる。 オプションを指定せずに実行したジョブは基本的にフォアグラウンドで処理される。 ターミナルを用いた出力を行うという都合上、処理が完了するまでは他のジョブを実行できないという欠点がある。 バックグラウンドジョブ 処理は行われているものの結果はターミナルに表示されず、裏側で動き続けているジョブのこと。 -dオプションをつけてサーバーを起動した場合などがこれにあたる。 サスペンドジョブ 一時的に処理が中断されているジョブのこと。 再開されるまでの間は処理が止まった状態になるが、それまでターミナルを占有していたジョブがなくなるので他の処理を実行できるようになる。 サスペンドジョブに関するコマンド一覧 現在実行しているジョブの停止 % Ctrl + z サスペンド中のジョブの一覧表示 % jobs # 結果 [1] Stopped ping 172.17.0.3 [2]+ Stopped ping 172.17.0.3 [3]- Stopped ping 172.17.0.2 左端はジョブのID ジョブの再開 % fg ジョブID # ID省略時は+となっているものが実行される ジョブのバックグラウンド再開 % bg ジョブID # ID省略時の挙動はfgと同じ fgやbgで指定されたジョブが起動中だった場合には起動方法の変更のみが行われる(bg⇄fg)。 ジョブの停止に関する注意点 フォアグラウンドジョブに関してはCtrl + zで停止可能。 バックグラウンドジョブに関してはCtrl + zで停止することはできないので、一旦fg IDでフォアグラウンドに切り替えた後にCtrl + zで停止させる。 ジョブの実行方式の切り替えに関する注意点 最後に停止またはフォアグラウンドで起動したジョブに関しては+状態となり、ID指定なしでも起動ができるようになる。 しかしバックグラウンド起動したジョブに関しては最終起動ジョブであっても+状態とならない(既に+のジョブをbg起動した場合は除く)。 このため、bg起動しているジョブを停止させる目的でfgとID指定なしで入力すると、bg起動ジョブが+でなかった場合にはジョブの二重起動となってしまうことになる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】知っておくと便利なcdコマンドの使い方

はじめに 初投稿となります! 現場で得た知識を忘れないうちに残しておこうと思いQiitaを始めてみました。 記念すべき初回はよく使われるcdコマンドについてまとめてみようと思います。 cdコマンド ディレクトリ移動をするコマンドです。今回は使っていて便利だなと思ったものを紹介していこうと思います。 $ pwd /home/user1/test1/test2/test3 pwdコマンドを打って現在のディレクトリを確認します。今いるディレクトリはtest3です。 cd ../ 一つ上のディレクトリに移動するコマンドです。(今回の場合はtest2のディレクトリに移動します。) $ cd ../ $ pwd /home/user1/test1/test2 cd - 一つ前にいたディレクトリに移動するコマンドです。(今回の場合はtest3に移動します。) $ cd - /home/user1/test1/test2/test3 cd ~ ホームディレクトリに移動するコマンドです。 $ cd ~ $ pwd /home/user1 cd / 一番上のディレクトリに移動するコマンドです。 $ cd / $ pwd / おわりに いかがでしたでしょうか? 絶対パスを指定せずにディレクトリ移動できるのは便利なので、覚えておいて損はないと思います。 参考 ・パスの説明とcdコマンドについて
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ファイルの圧縮と展開についてまとめてみた

今回のお題 今回のお題はファイルの圧縮と展開です。 Linuxコマンドを用いてファイルの圧縮・展開を行う方法、及びそれらを取り巻く細かな仕様について調べた範囲でまとめます。 なお、ファイルの圧縮・展開に関してはたくさんのオプションがあるようですが、今回は基本となるcvzfとxvzfにしか触れません。 その点についてはご了承ください。 ファイルの圧縮の方法 # tar cvzf "作成する圧縮ファイル名" "元にするファイル" % tar cvzf test1.php.tar.gz test.php ファイルの展開方法 # tar xvzf "展開するファイルのパス" % tar xvzf test1.php.tar.gz ファイルの展開先 ファイルを展開した際には、圧縮作業を行ったディレクトリではなく、その時点でのカレントディレクトリに展開後のファイルが作られる。 ディレクトリ例 |-- dir1 | |-- test1.txt | |-- dir2 % cd dir1 % tar cvzf test1.txt.tar.gz test1.txt % ls >> test1.txt test1.txt.tar.gz # dir2に移動 % cd ../dir2 # dir2で展開作業を実行 % tar xvzf test1.txt.tar.gz % ls # 展開を行ったdir2にtest1.txtが作成される >> test1.txt % ls ../dir1 # 展開を行っても圧縮ファイルは削除されない >> test1.txt test1.txt.tar.gz 展開後のファイル名について # 展開後のファイル名は圧縮前と同じ % cd dir1 % tar cvzf test1.txt.tar.gz test1.txt % ls >> test1.txt test1.txt.tar.gz # dir2に移動 % cd ../dir2 # dir2で展開作業を実行 % tar xvzf test1.txt.tar.gz % ls # 展開を行ったdir2にtest1.txtが作成される >> test1.txt # ファイル名は圧縮前と同じ # dir1に移動 % cd ../dir1 % ls >> test1.txt test1.txt.tar.gz # dir1内でtest1.txtを展開 % tar xvzf test1.txt.tar.gz % ls # 展開後のtest1.txtで元々あったtest1.txtが上書きされるので、見た目上は同じ(もしtest1.txtに何か変更が加わっていた場合には、圧縮前の状態に戻る)。 >> test1.txt test1.txt.tar.gz 圧縮ファイルの作成先 # 圧縮ファイル名を単純にファイル名にした場合にはカレントディレクトリに圧縮ファイルが作られる % tar cvzf test1.txt.tar.gz test1.txt # カレントディレクトリにtest1.txt.tar.gzが作られる # 圧縮ファイル名としてパスを与えた場合にはそのパスに対応した箇所に圧縮ファイルが作られる % tar cvzf /var/www/html/test1.txt.tar.gz test1.txt # /var/www/html/にtest1.txt.tar.gzが作られる # パスは相対・絶対のどちらも可能だが、存在しないディレクトリは指定不可(=圧縮ファイルと同時に親ディレクトリを作成することはできない)。 カレントディレクトリ以外のファイルを圧縮する場合 元にするファイル名の代わりにパスを指定することでカレントディレクトリに存在しないファイルを圧縮することも可能だが、その場合には末端のファイルだけではなくパス全体が展開される。 % cd .. # dir1のtest1.textを圧縮し、dir2に保存 % tar cvzf dir2/test1.txt.tar.gz dir1/test1.txt # dir2に移動 % cd dir2 # ファイルを展開 % tar xvzf test1.txt.tar.gz # dir2の中にdir1が、その中にtest1.txtが作られる % ls >> dir1 % ls dir1 >> test1.txt
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxコマンドを用いたシンボリックリンクの作り方

シンボリックリンクとは 他のファイルやフォルダを参照するためのショートカットのようなもの(というかwindowsOSのショートカットとほぼ同じ)です。 同じような意味合いの用語としてハードリンクというものもあり、場合によってはフォルダはシンボリックリンク、ファイルはハードリンクという使い分けがなされることもあるようです。 ただ、どちらに対するショートカットも同じコマンドで作成可能という性質上、本記事ではまとめてシンボリックリンクとして扱います。 コマンド # ln -s リンク元の絶対パス リンクの作成先のパス % ln -s /var/www/html/dir1/test.html /var/www/html/dir2 # dir2の中にtest.htmlへのリンクが作成される % ls /var/www/html/dir2 >> test.html 注意点 リンク先の作成先のパスは相対・絶対のいずれでもOKです。 リンク元に関しては絶対パスしか受け付けないので注意してください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

linuxのlsコマンドについてまとめる

今回のお題 タイトルの通り、LinuxOSのlsコマンドについてまとめます。 初心者用(自分含む)です。 基本 オプションなしの場合には、カレントディレクトリの中身を一覧表示。 [root@1db2f41f69b3 /]# ls # 結果 anaconda-post.log dev home lib64 mnt proc run srv tmp var bin etc lib media opt root sbin sys usr ディレクトリの指定 ディレクトリまでのパスを指定することで、カレントディレクトリではなくそのディレクトリの中身を表示することも可能。 [root@1db2f41f69b3 /]# ls var/www/html/ # 結果 test.php オプション達 # . で始まるディレクトリやファイルも含めて表示 [root@1db2f41f69b3 /]# ls -a . .dockerenv bin etc lib media opt root sbin sys usr .. anaconda-post.log dev home lib64 mnt proc run srv tmp var # 詳細表示 [root@1db2f41f69b3 /]# ls -l # 結果 total 56 -rw-r--r-- 1 root root 12114 Nov 13 2020 anaconda-post.log lrwxrwxrwx 1 root root 7 Nov 13 2020 bin -> usr/bin drwxr-xr-x 5 root root 360 Nov 27 01:47 dev drwxr-xr-x 1 root root 4096 Nov 27 01:47 etc drwxr-xr-x 2 root root 4096 Apr 11 2018 home lrwxrwxrwx 1 root root 7 Nov 13 2020 lib -> usr/lib lrwxrwxrwx 1 root root 9 Nov 13 2020 lib64 -> usr/lib64 drwxr-xr-x 2 root root 4096 Apr 11 2018 media drwxr-xr-x 2 root root 4096 Apr 11 2018 mnt drwxr-xr-x 2 root root 4096 Apr 11 2018 opt dr-xr-xr-x 176 root root 0 Nov 27 01:47 proc dr-xr-x--- 1 root root 4096 Nov 27 01:49 root drwxr-xr-x 11 root root 4096 Nov 13 2020 run lrwxrwxrwx 1 root root 8 Nov 13 2020 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Apr 11 2018 srv dr-xr-xr-x 13 root root 0 Nov 27 01:47 sys drwxrwxrwt 7 root root 4096 Nov 13 2020 tmp drwxr-xr-x 13 root root 4096 Nov 13 2020 usr drwxr-xr-x 1 root root 4096 Nov 26 06:23 var ログの意味については後述。 # 更新日時順に表示 [root@1db2f41f69b3 /]# ls -t root proc etc anaconda-post.log tmp lib sbin home mnt srv dev sys var run bin lib64 usr media opt # ファイル・ディレクトリの種類を区別して表示 [root@1db2f41f69b3 /]# ls -F anaconda-post.log dev/ home/ lib64@ mnt/ proc/ run/ srv/ tmp/ var/ bin@ etc/ lib@ media/ opt/ root/ sbin@ sys/ usr/ -Fオプションにより末尾に付加される記号の意味については以下を参照。 記号 意味 @ シンボリックリンク / ディレクトリ * 実行可能ファイル(.exe)など # サブディレクトリの中身も含めて表示 [root@1db2f41f69b3 /]# ls -R # 結果(一部抜粋) ./usr/lib64/python2.7/lib2to3/fixes: __init__.py fix_getcwdu.py fix_metaclass.py fix_repr.py オプションについては複数を組み合わせることも可能。 [root@1db2f41f69b3 /]# ls -F -R # 結果(一部抜粋) ./usr/lib64/python2.7/site-packages: README libxml2.pyo _dbus_bindings.so* libxml2mod.so* _dbus_glib_bindings.so* lzma.so* _sqlitecache.so* pycurl-7.19.0-py2.7.egg-info curl/ pycurl.so* dbus/ pygobject-3.22.0-py2.7-linux-x86_64.egg-info ls -lの出力結果の見方 ls -lコマンドの結果は以下のようになっている。 # 結果の一例 drwxr-xr-x 5 root root 360 Nov 27 01:47 dev # 10桁の英字(詳細は以下)" "ハードリンクの数" "作成者" "所属グループ" "容量" "最終更新日時" "プログラム名(リンクの場合はリンク先も)" 最初の10桁のアルファベットはプログラムの種類とユーザーごとのアクセス権を表している。 先頭の1文字はプログラムの種類であり、ファイルなら-, ディレクトリならd, リンクならlになる。 また、その後の9文字については、作成者、グループユーザー、その他のユーザーのアクセス権限を表す記号(以下参照)が3文字ごとに繰り返されており、例えば上記例のdrwxr-xr-xであれば プログラムの種類: ディレクトリ 作成者の実行権限: 読み込み・書き込み・実行全て可能 グループの権限: 読み込みと実行は可能。書き込みは不可。 その他のユーザーの権限: 読み込みと実行は可能。書き込みは不可。 となる。 【参考:アクセス権限を表す記号】 | 記号 | 意味 | |:-:|:-:| | r | 読み込み可能 | | w | 書き込み可能 | | x | 実行可能 | | - | 権限なし |
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ncコマンドを用いてポートスキャンニング(疎通確認)を行う

ncのmanページの引用です。ncコマンド便利ですね。 コマンド ホストhost.example.comの20~30番ポートの内、どのポートがどんな用途で開いているか確認する。 $ nc -z host.example.com 20-30 output Connection to host.example.com 22 port [tcp/ssh] succeeded! Connection to host.example.com 25 port [tcp/smtp] succeeded! ref
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxコマンド一覧表

はじめに Linuxで使うコマンドやショートカットキーについてまとめました。 Webエンジニアとして実務に携わっているとLinuxの重要性に気づかされます。 初心者向けに分かりやすくを意識して書いています。 コマンド入力を楽にするショートカットキー ショートカットキーを覚えておくと手入力の手間を省け、作業効率アップにも繋がります。 以下に主に使うショートカットキーの一覧をまとめています。 ショートカットキー 説明 Tabキー コマンドやパスの保管をする Ctrl+A 行の先頭にカーソル移動 Ctrl+E 行の最後にカーソル移動 Ctrl+F 1文字右方向へ移動(矢印キー→と同じ) Ctrl+B 1文字左方向へ移動(矢印キー←と同じ) Ctrl+H カーソルの左を1文字削除する Ctrl+D カーソル部分を1文字削除する Ctrl+W カーソル位置の単語を削除(カーソルの前部分(単語の途中で押すとその前半部分だけ削除される) Ctrl+U カーソルの位置から行頭まで削除 Ctrl+K カーソルの位置から行末まで削除 Ctrl+Y 直前に削除した文字列を貼り付け Ctrl+C 実行中のコマンドを強制終了 Ctrl+L 画面をクリアにする Ctrl+S コマンド入力ができないように画面をロック Ctrl+Q コマンド入力ができるように画面のロックを解除 ↑, ↓, Ctrl+R コマンド履歴の参照 Linuxコマンドについて 基本コマンド Linuxコマンド 説明 オプション ls ファイルやディレクトリの一覧を表示する -a:隠しファイルも含めてすべて表示 -t:最終更新時間によってソートをして表示する -l:ファイルの詳細情報を表示する -r:逆順にソートをして表示する -F:ファイルを種別して表示する pwd 今いるディレクトリをを確認する際に使用する cd カレントディレクトリの移動・変更 mkdir フォルダを作成する -p:必要に応じて親ディレクトリも作成 rmdir 空のディレクトリを削除する -p:指定した階層までのディレクトリを一括で削除する。ただし空の場合のみ touch 空のファイルを作成する -t:[[CC]YY]MMDDhhmm[.ss]形式で指定した日時に変更 mv ファイルの移動、ファイル名の変更を行う -i:ファイルを上書きする前に確認する-f:強制的に処理を実行する rm ファイル・ディレクトリを削除する -r: ディレクトリの中のファイルやディレクトリをまとめて削除する-i:ファイルを削除する前に一度確認する-f:強制的に処理を実行する cp ファイルをコピーする -i:コピーする前に確認する-r:ディレクトリをコピーする-p:ファイルの所有者・属性・更新日時などの情報を保持したまま元ファイルの情報を保存する cat ファイルの中身を表示する -n:行番号を追加して表示する less 長いファイルの中身をスクロール表示する more ファイルをページ単位で表示する tail テキストファイルまたはパイプでのテキスト入力の最後のn行を抜き出す -n:末尾から指定した行を表示する find ファイルを検索する -name:ファイル名を指定して検索-typeタイプ:(d: ディレクトリ、f: ファイル、l: シンボリックリンク) ln リンクを張る(別名をつける) -s:シンボルリンクを作成する(オプションを付けないとハードリンクになる) grep 指定した文字列がテキスト内に存在した場合その行を抽出する -e:文字列を検索パターンとして扱う-i:検索パターンと入力ファイルの双方で英大文字と小文字の区別を行わない-v:検索パターンとマッチしなかった行を選択する chmod ファイルやフォルダのアクセス権限を変更する -R:ディレクトリ内の複数のファイルも変更対象とする chown ファイルやフォルダのオーナーやグループを変更する -R:ディレクトリ内の複数のファイルも変更対象とする sudo スーパーユーザーで権限を実行する -u:指定したユーザーでコマンドを実行する diff ファイルとファイルの内容の違いを表示する history コマンドの履歴を表示する kill ジョブやプロセスを終了させるコマンド ps 実行中のプロセスを表示するコマンド -A:全プロセスを表示する-e:実行しているコマンド名と環境変数を表示する-l:プロセスの状態なども表示する man コマンドのマニュアルを表示する scp リモートマシンとローカルマシン、あるいはリモートマシン同士でファイルをコピーする際に使用するLinuxのコマンド -i:ssh接続に使用する鍵ファイルを指定する-p:コピー元のタイムスタンプやパーミッションを保持する-r:ディレクトリごと再帰的にコピーする lsコマンド # ls [オプション][ファイル] # ls: 現在のフォルダにあるファイルやディレクトリを表示 $ ls test1 test1.txt test2.txt # ls -al: aとlを組み合わせることで隠しファイルとファイルの詳細情報を両方表示する。 $ la -la total 0 drwxr-xr-x 5 user staff 160 11 27 23:30 . drwxr-xr-x+ 94 user staff 3008 11 25 22:43 .. drwxr-x--x 3 user staff 96 11 25 21:55 test1 -rw-r--r-- 1 user staff 0 11 27 23:28 text1.txt -rw-r--r-- 1 user staff 0 11 27 23:28 text2.txt # ls *.txt: 拡張子がtxtのファイルの一覧を表示する $ ls *.txt text1.txt text2.txt # ls ???.txt txtで終わり、5文字で始まるファイルを表示する $ ls ?????.txt pwdコマンド # 現在どの位置にディレクトリがいるかを表示する $ pwd #/Users/ユーザー名/work mkdirコマンド # mkdir ディレクトリ名 # test1ディレクトリの作成を行う $ mkdir test1 # 指定されたディレクトリの上位ディレクトリも作成する # test2/test1/test3ディレクトリの作成を行う $ mkdir -p test2/test1/test3 rmdirコマンド # rmdir ディレクトリ名 # 空であるtest1ディレクトリを削除する $ rmdir test1 # 空であるtest2/test1/test3ディレクトリを一括で削除する $ rmdir -p $ rmdir -p test2/test1/test3 touchコマンド # touch オプション ファイル名 # test1.txtの作成を行う $ touch test1.txt mvコマンド # mv 移動元ファイル(移動元ディレクトリ) 移動先ファイル(移動先ディレクトリ) # ディレクトリを別ディレクトリに移動する # test1の中にtestディレクトリが移動する $ mv test test1 # ファイルを別のディレクトリに移動する # text2.txtがtest1ディレクトリに移動する $ mv text2.txt test1 # ファイル名の変更 # text1.txtがファイル名でtext5.txtが存在しない場合、ファイル名がtext5.txtに変更される $ mv text1.txt text5.txt # ディレクトリ名の変更 # test3が存在しない場合ディレクトリ名がtest1からtest3に変更される $ mv test1 test3 rmコマンド # rm [オプション] ファイル名 #text2.txtを削除する $ rm text2.txt #test3ディレクトリとtest3ディレクトリの中の、ファイルやディレクトリも削除される $ rm -r test3 cpコマンド # cp [オプション] コピー元 コピー先 # cp ファイルをコピーする $ cp text1.txt text3.txt # lsで確認するとtext1.txtをコピーしたtext3.txtが作成される text1.txt text2.txt text3.txt # ディレクトリをコピーする $ mkdir test $ cp -r test test1 test text1.txt text3.txt test1 text2.txt catコマンド # cat [オプション] ファイル名 # text3.txtの中身を表示する $ cat text3.txt # 行番号付与してtext3.txtの中身を表示する $ cat -n text3.txt 1 aaaaa 2 aass 3 ssss 4 ssss moreコマンド # more ファイル名 # 行数が多い場合に、ページャを使って画面に表示する $ more docker-compose.yml # スペース: 次のページに進む # b: 前の一画面に戻る # f: 次の一画面に進む # /単語: 単語を検索する。nキーで検索結果へジャンプする。 # q: ページャコマンドを終了する lessコマンド # less ファイル名 # 行数が多い場合に、ページャを使って画面に表示する $ more docker-compose.yml # スペース: 次のページに進む # b: 前の一画面に戻る # f: 次の一画面に進む # ↑: 前の次に進む # ↓: 次の次に進む # /単語: 単語を検索する。nキーで検索結果へジャンプする。 # q: ページャコマンドを終了する tailコマンド # tail オプション ファイル名 # text3.txtファイルの末尾10行を表示する $ tail text3.txt findコマンド # find パス -name ファイル名 # /Users/ユーザ名/work にあるtext3.txtを探す。 $ find /Users/ユーザ名/work -name text3.txt # ディレクトリを検索する場合 # /Users/ユーザ名/work にあるディレクトリを探す。 $ find /Users/ユーザ名/work -type d # ファイルを検索する場合 # /Users/ユーザ名/work にあるファイルを探す。 $ find /Users/ユーザ名/work -type f chmodコマンド # ファイルのアクセス権を変更する。 $ chmod モード[,モード] ファイルまたはディレクトリ $ chmod 8進数表記のモード ファイルまたはディレクトリ # test1ディレクトリに書き込み権限を追加 $ chmod g+w test1 # test1ディレクトリ内のユーザから読み込み権限を除去して、書き込み権限を追加 $ chmod u-r,o+w test1 chownコマンド # ファイルの所有者を変更する。ルートとグループを変更するには、rootユーザである必要がある。 $ chown ユーザ[.グループ] ファイルまたはディレクトリ # text3.txtの所有者をuser3に変更する $ chown user3 text3.txt # test1ディレクトリ内の所有者をuser4に変更する $ chown -R user4 test1 grepコマンド grepコマンドの正規表現 記号 説明 ^ 行頭を表す。 $ 行末を表す。 . 任意の一字を表す。 * 直前文字の0回以上の繰り返しを表す。 [...] ...の中の任意の1字を表す。 [^...] ...の中の文字が含まれないことを表す。 ¥ 正規表現の記号をエスケープする。 b$ bで終わる行。 a.b aとbの間に1文字入っている。 [ab]ab aもしくはbに続く(aab, bab) [^ab]ab aもしくはbで始まらないでabが続くもの(xab,zab等) # grep [オプション] 検索条件 [指定ファイル] # text3.txtの中にある「aaa」を検索する $ grep aaa text3.txt sudoコマンド # スーパーユーザ(root)権限でコマンドを実行する # sudo cat # text3.txtの中身をrootユーザでみる $ sudo cat text3.txt # text3.txtの中身をuser1でみる $ sudo -u user1 cat text3.txt diffコマンド # diff オプション ファイル名 ファイル名 # text3.txtとtext4.txt ファイルの差分を表示する $ diff text3.txt text4.txt manコマンド # man コマンド名 #lsコマンドのマニュアルを表示する $ man ls scpコマンド # リモートマシンとローカルマシン、あるいはリモートマシン同士でファイルをコピーする際に使用する # scp [オプション] コピー元パス 保存先パス #リモートのファイル(test.txt)をローカルのカレントディレクトリへコピー $ scp user@xxx.xxx.xxx.xxx:~/test.txt ./ #ローカルのカレントディレクトリのファイル(test.txt)をリモートのホームディレクトリ直下へコピー $ scp test.txt user@xxx.xxx.xxx.xxx:~/ 正規表現とパイプについて 今までは、さまざまなコマンドを利用してきましたが、Linuxには「1つの入り口と2つの出入り口があります。 標準入出力の項目 説明 標準入力 プログラムの標準入力でプログラムに入ってくるデータのことを示す。 標準出力 プログラムの標準出力を行う。 標準エラー出力 プログラムのエラーメッセージを出力する。 リダイレクト 標準出力された文字をファイルに書き込むことができる。 #書き込みたいコマンド名 > ファイル名 # lsの出力結果をtest2.txtに書き込む $ ls > test2.txt パイプ コマンドをつなぐ役割を持っている。 # 実行例: /Users/ユーザ名/workの一覧を表示しつつ、lessコマンドを実行する $ ls -l /Users/ユーザ名/work | less viによる操作方法 viとはテキストを編集するためのコマンドやソフトのことで、Linuxでファイルを編集したり、中身を確認したりする際によく使われる。 ファイルを開く場合 # vi ファイル名 # text1.txtファイルを開く $ vi text1.txt ファイルを閉じる場合 # :qコマンドを実行する ファイルの中身を編集して保存する場合 # :wコマンドを実行する ファイルを保存して終了する場合 # :wqコマンドを実行する ファイルを保存せずに終了する場合 # :qコマンドの後に!をつけて実行する :q! ファイルに内容を書き込みたい場合 # インサートモード(i)を押す ファイル編集の際に使用できる便利なコマンド表 コマンド 内容 x 1文字削除 dd 1行削除 yy 1行コピー nyy n行コピー p カーソルの文字の次または次の行にペースト P カーソルの文字の前または前の行にペースト u カット、ペーストを一回取り消し ファイル内検索と置換 コマンド 内容 /検索文字列 文字列の検索 n 下方向へ再検索 N 上方向へ再検索 :対象の行 s/検索文字列/置換文字列/オプション 文字列を置換する ユーザー管理 コマンド 説明 useradd 新規ユーザの作成 usermod ユーザアカウントの変更 userdel ユーザの削除を行う groupadd グループの作成 groupmod グループの登録情報の変更 groupdel グループを削除する passwd ユーザのパスワード登録と変更ユーザのパスワードを登録したり変更したりする su 一時的に他のユーザになるためのコマンド
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む