20210419のLinuxに関する記事は7件です。

スクショなどのファイル名のスペースやカッコなどをPythonで一括置換した

モチベーション macOSやLinuxでスクリーンショットを撮ると、スクリーンショット 20××-11-22 33.44.55.pngやScreenshot from 2021-04-19 14-19-39.pngなどのようにスペースが含まれてしまう。 また同じ名前のファイルをダウンロードすると、test (1).pngなどのようにスペースとかっこが含まれていて、コマンドでの操作が非常にやりにくい。 そこで、そのディレクトリにあるファイル名のスペースやかっこなどの記号を一括置換するプログラムをPythonで書きました。これを~/Downloadsやら~/Picturesやら~/Desktopのディレクトリに1個置いておくだけで、かなり便利になると思います。(updated) なおmacOSの場合の、スクリーンショット 20××-11-22 33.44.55.pngのスクリーンショットという日本語の部分は「Macのスクリーンショットの保存先と名前を変更する」でも排除できます。 コード import os import shutil def get_filenames(path): files_and_dir = os.listdir(path) # get a list of names of files and directories files = [i for i in files_and_dir if os.path.isfile(os.path.join(path, i))] # a list of names of only files return files def replace_a_with_b(path, a, b): files = get_filenames(path) for f in files: # For example, if f="test 1.pdf", we want to replace a=" " with b="_". if a in f: # g = f.replace(a, b) # g = "test_1.pdf" shutil.move(f, g) # mv 'test 1.pdf' test_1.pdf def main(): path = "." # current directory replace_a_with_b(path, " ", "_") replace_a_with_b(path, "(", "") replace_a_with_b(path, ")", "") # ここに追加したいものを書いてください if __name__ == "__main__": main() Ubuntuの~/Picturesで実行 Pictures $ ls total 360K -rw-rw-r-- 1 <user> <group> 158K Apr 18 22:17 'Screenshot from 2021-04-18 22-17-40.png' -rw-rw-r-- 1 <user> <group> 140K Apr 19 14:19 'Screenshot from 2021-04-19 14-19-39.png' -rw-r--r-- 1 <user> <group> 783 Apr 19 23:24 renamefiles.py Pictures $ python renamefiles.py Pictures $ ls total 360K -rw-rw-r-- 1 <user> <group> 158K Apr 18 22:17 Screenshot_from_2021-04-18_22-17-40.png -rw-rw-r-- 1 <user> <group> 140K Apr 19 14:19 Screenshot_from_2021-04-19_14-19-39.png -rw-r--r-- 1 <user> <group> 783 Apr 19 23:24 renamefiles.py 問題点 置換したい文字を追加すればするほどforの回数が多くなってしまって、あまり効率がよくない気がします。「もっとこうしたらいいよ」というのがありましたらぜひ教えてください。 改善 パス名を引数として渡すことで、コマンド的に使えるようにしました。 renamefiles.py import os import shutil import sys def get_filenames(path): files_and_dir = os.listdir(path) # get a list of names of files and directories files = [i for i in files_and_dir if os.path.isfile(os.path.join(path, i))] # a list of names of only files return files def replace_a_with_b(path, a, b): files = get_filenames(path) for f in files: # For example, if f="test 1.pdf", we want to replace a=" " with b="_". if a in f: # g = f.replace(a, b) # g = "test_1.pdf" shutil.move(f, g) # mv 'test 1.pdf' test_1.pdf def main(): if len(sys.argv)!=2: print("Usage: renamefiles <path_to_files>") sys.exit(1) else: # path = "." # current directory path = sys.argv[1] replace_a_with_b(path, " ", "_") replace_a_with_b(path, "(", "") replace_a_with_b(path, ")", "") if __name__ == "__main__": main() これをホームディレクトリなどに置いておき、~/.bashrcに以下を追加してください。 alias renamefiles="python ~/renamefiles.py" 終わったら source ~/.bashrc を実行すれば準備完了。 実行例は $ renamefiles /path/to/files $
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】初めてのLinux - シェルスクリプトを使いこなせるようになるまで

はじめに 本記事を読むことで、Linuxとコマンドを使いこなせるようし、最終的にはシェルスクリプトを使って業務を楽にすることができるようになるレベルになることを想定して書きました。 目次 1.Linuxの概要 2.ファイルとディレクトリ 3.ユーザーグループと権限 4.シェルの基本とシェルスクリプト 1. Linuxの概要 Linuxとは? macOSやwindowsなどと同じOS。 OSとは、operating systemの略で、コンピューター全てを管理しているソフトウェアのこと。 Linuxの歴史 Linuxは1990年代に当時学生だったリーナス・トーバルズが一人で開発したOS。 その後、多くの開発者がLinuxの開発に参加したことにより、急速の発展をとげ無料かつ安定して動作するのOSとして、現在は多くのサーバーのOSで利用されている。 ちなみに、リーナスさんはバージョン管理システムのGitも開発した人。 LinuxとUNIXとの違いは何か? UNIXはアメリカの企業が開発した歴史上もっと古いOS。現在もUNIXは健在で、現在のmacOSの原型となったり、カーナビなどのOSとして使われている。 LinuxはこのUNIXを参考に作られたOSでソースコード自体は全く別物。 また、UNIXは企業が開発して、知的財産権が企業に属しているが、Linuxはオープンソースなので、無料かつ改変や配布も自由となっている。 Linuxは基本的にサーバーのOSとして使われる サーバーのOSとして、以下の条件をクリアする必要がある。 - インターネット上で高速かつ多くのアクセスに対応可能 - 安定している(バグが少ない) - ライセンスフリー(複数台のサーバーで利用ができる) - メンテナンスが容易 - 品質の高い多くのアプリケーション(ソフトウェア)を利用することができる これらの条件をLinuxはクリアしている。そのため、現在ではサーバーのOSとして多くのシェアを持っている。 - 脱線 - LinuxはサーバーのOSとして使われるイメージだが、一般的なPCのOSとしても利用することができる。 Linuxのシステム構成 今までの説明でのLinuxは基本的にLinux kernelのことを説明いる。なので、狭義の意味としてLinux(Linux kernel)はOSでありコンピュータを制御するソフトウェアのこと。 しかし、近年ごく一般的にLinuxという言葉を使用する場合、Linux karnelに加え、コマンド群などのアプリケーションも含めたパッケージ(Linuxディストリビューション)を広義の意味としてLinuxと言われている。 Linuxディストリビューションの種類 よく聞くのが、以下二つ RedHat系 > CentOS Debian系 > ubuntu 2. ファイルとディレクトリ LinuxのFileとディレクトリ構造について Linuxはシステムを含む全てのデータはファイルとして扱われる。 Linuxを使用していく上で、必要なファイルがどこに配置されているか、どこに配置すべきかを把握するために、ディレクトリ構造についても理解する必要がある。 Linuxのディレクトリ構造にはFHS(Filesystem Hierarchy Standard)規約が採用されている。FHSとは標準的なディレクトリ構造を定めたもの。 覚えておきたいディレクトリの役割 ディレクトリ 役割 / 最上のディレクトリであるルートディレクトリを意味 /bin 一般ユーザー・管理者ユーザーが利用するコマンドの実行ファイルを置くためのディレクトリ /dev デバイスファイルを置くためのディレクトリ。 デバイスファイルとは、ディスクやキーボードなどのハードウェアをファイルとして扱えるように用意された特殊ファイル /etc 設定ファイルを置くためのディレクトリ。 /home ユーザーごとに割り当てられるホームディレクトリを置くためのディレクトリ。 /lib 標準的なライブラリを置くためのディレクトリ /media CD/DVDなどのデータを置くためのディレクトリ /sbin /binディレクトリと同様に実行ファイルを置くためのディレクトリ。 ただし、/sbinは管理者ユーザー向けのもの /tmp 一時的なファイルを置くためのディレクトリ。このディレクトリ内のファイルを定期的に削除するように設定されることが多い /usr 各ユーザーが共通して利用するアプリケーション(プログラムやライブラリ)などが置かれるディレクトリ。内部にルートディレクトリ配下と似た構造を持っている /var システム運用中に動的に変化するデータファイルを置くためのディレクトリ。ログなど ファイル・ディレクトリの基本操作 別の記事にてまとめありますのでそちらを参照ください。 3. ユーザーグループと権限 Linuxのすべてのファイルやディレクトリには、ユーザー(所有者)とグループの情報を必ず持っています。また、そのユーザーとグループが【読み取り・書き込み・実行】の権限情報も必ず登録されています。 確認方法 ls -l コマンドを使って、ファイルの詳細を確認します パーミッションの見方 記号 意味 r Read権限(読み取り)ファイル・ディレクトリの中を見ることができる w Write権限(書き込み)ファイル変更・保存ができる。ディレクトリ内操作ができる x eXecution権限(実行)shell/Ruby等のプログラムの実行ができる - 上記3つの権限のどれも持たない パーミッションの変更コマンド chmod = change mode パーミッション を変更する 使用例 terminal chmod 777 hogehoge.rb 数字の正体 記号 数字 意味 r 4 Read権限(読み取り)ファイル・ディレクトリの中を見ることができる w 2 Write権限(書き込み)ファイル変更・保存ができる。ディレクトリ内操作ができる x 1 eXecution権限(実行)shell/Ruby等のプログラムの実行ができる - 0 上記3つの権限のどれも持たない rwx権限を与える場合 = 4 + 2 + 1 = 7 よって、使用例の777は全ユーザー・グループに対して rwx権限を付与したことがわかる 4. シェルの基本とシェルスクリプト シェルとは? ユーザーがコマンドを入力し、実行した際に処理を行うのはLinux kernelで、Linux kernelは直接ユーザーからの操作を受け付けることはできません。 そこで、シェルというソフトウェアを利用して、ユーザーとkernelの間のインタフェースの代役してくれます。 シェルの種類はいくつかあり、聞いたことがあるのは、bash・zshなどは耳にしたことがあると思います。 bashはlinuxの標準シェルです。 最近のmacはzsh(bashを拡張した物)が採用されています。 シェルの動作について 例えば、ユーザーが dateコマンドを実行したとします。 ユーザーからのコマンド命令を受けたシェルはdateコマンドをLinux kernelに伝わるように変換し、命令を出す。 Linux kernelは命令を受け取り処理をし、処理結果をshellに渡す。 shellはLinux kernelから結果を受け取りユーザーに伝わるように変換し、結果を出力する。 イメージ シェルスクリプトとは ターミナル等にコマンドを実行してシェルを操作する方法をインタラクティブ操作といいます。 対して、実行したい一連のコマンドのプログラムを記述したファイルのことをShell Script(シェルスクリプト)と言います。 今まで、説明してきたコマンドをインタラクティブ操作です。 そのコマンド群がシェルスクリプトです。 例えば次のスクリプト hello.sh #!/bin/sh user=$(users) echo 'Hello ' $user echo 'What is the current date?' echo $(date) これでも立派なシェルスクリプトと言えます。 terminal $ sh hello.sh => Hello user name => What is the current date? => 2020年 1月 1日 金曜日 10:00:00 UTC シェルは外部コマンドを、シェルの環境変数PATHに登録されたディレクトリ配下を探して実行します。 シェルスクリプト構文 シバン シバン(#! から始まる1行目のこと。 起動してスクリプトを読み込むインタプリタを指定する) #!/bin/bash 変数 定義 variable='value' 注意 =の間にスペースを入れるとエラーになる 呼び出し echo $variable 文字列内で変数を使う echo "variableの値は: $variable" 条件分岐(if - else / case) value=0 if [ $value -eq 0 ]; then echo 'OK' else echo 'NO' fi 数値の比較演算子 -eq :equal(イコール) -ne :not equal(notイコール) -gt :greater than (◯◯より大きい) -ge :greater than or equal (◯◯以上) -lt :less than (◯◯より小さい) -le :less than or equal (◯◯以下) 文字列の比較演算子 = : equal != : not equal -a : and -o : or ! : is not 繰り返し(while) i=0 while :; do # :を使うと常に0(正常終了)を返すので、無限ループになる i=`expr $i + 1` # expr 「式」を評価するコマンド if [ `expr $i % 2` -ne 0 ]; then continue fi if [ $i -gt 10 ]; then break fi echo $i 入力受付 echo 'please enter yes or no' while read value; do case "$value" in "yes") echo "Hello World" break ;; "no") echo "yesが入力されるまで終わりません" ;; esac done 最後に 最後まで読んでいただきありがとうございます。 この情報がためになると嬉しいです。 シェルスクリプトの学習の成果としてシェルスクリプトじゃんけんゲームを作ってみました。 また、これ以外にも実際の業務で使用する環境構築を自動化シェルスクリプトも作ってみました。 シェルスクリプトを学習することで、業務を自動化することができるかもしれません。皆さんもぜひ何か作ってみてください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux備忘録】shellの便利なショートカット

知らなかったショートカットしか書かないです 1.1 カーソル移動 コマンド 動作 Ctrl+b(back) 行頭に向かって1文字分移動する Ctrl+f(forward) 行末に向かって1文字分移動する Ctrl+a 行頭に移動する Ctrl+e 行末に移動する 1.2 単語単位でのカーソル移動 コマンド 動作 ※1 Metaキー+b(back) 行頭に向かって1単語分移動する Metaキー+f(forward) 行末に向かって1単語分移動する ※1 Metaキー:メタキー(英語: meta key)とは、一部のコンピュータのキーボードにある修飾キーである。 (Weblio辞書より引用) 昔のキーボードにはあったらしいが、今のキーボードにはほとんど存在しないキーなので AltかEscで代用するらしい(私の環境のTera termではAltをMetaキーとして使えないのでEscでのみ動作しました) 1.3 文字の削除 コマンド 動作 Ctrl+w(word?) 行頭に向かって1単語分削除する 1.4 カット&ヤンク(ペースト) コマンド 動作 Ctrl+k ※2 カーソル位置から行末までを削除する Ctrl+u カーソル位置から行頭までを削除する Ctrl+y カットした文字列をヤンク(ペースト)する ※2:ここで削除した文字列はクリップボードに記録される(カット&ペーストのカットと同じ感じ) 2. 画面を消去する コマンド 動作 Ctrl+l 画面を消去する(Clearコマンドと同じ操作) 3. コマンド履歴関連 Ctrl+rで「インクリメタルサーチ」というコマンド履歴の検索ができる インクリメタルサーチ時の操作 コマンド 動作 (文字列の入力) 検索語を追加して検索する Ctrl+r 1つ前の検索結果に移動する Enter 検索結果をそのまま実行する Esc 検索結果を表示したままコマンドラインに戻る Ctrl+g 検索結果を破棄してプロンプトに戻る 参考文献 新しいLinuxの教科書 (https://www.sbcr.jp/product/4797380941/)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

勉強記録

DNSについて なんでDNS? 経緯は自粛期間中にLinuxの資格を取ろうと思ったのと 職場のリーダー的な人に「webサーバーたててみて」と言われたからである。 そしてDNSの設定がうまくいかず、毎日二時間くらいずっとBINDの設定とにらめっこをしていたからである。 要点 覚えやすい英数字の名前とIPアドレスを一致させるのがDNS。 DNSで使われるドメイン名はドメイン名前空間で管理されている。 ドメイン名とはドメイン名前空間を下から順に書いたもの。 ドメイン名の一番後ろをTLDという。 日本では3種類のドメイン名の方式がある。 ドメイン名を省略せずにすべて書いた場合、完全修飾ドメイン名と呼ぶ. 覚えやすい英数字の名前とIPアドレスを一致させるのがDNS ドメイン名とIPアドレスの対応システムのこと。 例えば、ryu.example.comが存在するとすると example.com という組織(ドメイン)の ryuというコンピュータ(ホスト名)となる。 つまり覚えにくいIPアドレス(192.168.1.1)をryu.example.comと紐づけること。 DNSで使われるドメイン名はドメイン名前空間で管理されている。 ドメイン名前空間… インターネットに接続された各ホストに関する情報を管理する木構造の空間 http://www5e.biglobe.ne.jp/aji/3min/62.html ドメイン名とはドメイン名前空間を下から順に書いたもの。 上の図から読み取ると、、、 www.3min.co.jp ということになる 根の部分(root)は読まないらしい ドメイン名の一番後ろをTLDという。 トップレベルドメイン jp とかcomとか 疲れた きょうはここまで 参照 http://www5e.biglobe.ne.jp/aji/3min/index.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ChromebookのLinuxでgit initすると”Operation not permitted”とエラーメッセージが表示された場合

ChromebookのターミナルでLinux(Debian10.9)を使っているが、あるフォルダをgithubで管理しようとした際に、手間取ったことがあった。 ChromebookのLinuxでは、Chromebook側のディレクトリを共有フォルダにすることができ、/mnt/chromeosからアクセスできる。 この/mnt/chromeos以下にあるディレクトリをgitで管理しようとコマンドgit initを実行すると下記のエラーメッセージが表示された。 error: chmod on /mnt/chromeos/xxx/xxx/xxx/.git/config.lock failed: Operation not permitted fatal: could not set 'core.repositoryformatversion' to '0' どうやら、Chromebook側のディレクトリをLinuxからgitで使うことはできないようだ。 当該ディレクトリをLinux側に移動させてから改めてgit initすると、問題なく実行できた。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】Linuxファイル・ディレクトリの基本操作・コマンドまとめ

エンジニア歴5年の人が基本的かつ個人的によく使うLinuxコマンド(macのターミナルでも使える)をまとめました。 覚えておきたいオプション等は個人の意見であり、他の方からしたらもしかすると、「これもあったほうがいい」「それは別に」という意見もあるかもしれません。 随時コメントいただければ更新していきます。 目次 ワイルドカード lsコマンド = list cdコマンド = change directory pwdコマンド = print working directory mkdirコマンド = make directory touchコマンド = ?? rmコマンド = remove catコマンド = concatenate lessコマンド cpコマンド = copy mvコマンド = move findコマンド grep コマンド = global regular expression print | = パイプライン ワイルドカード ワイルドカードとは、Linuxのコマンドラインで複数のファイルやディレクトリを操作する際に利用する特殊記号 * と ? * 任意の文字列 .rb拡張子のファイルのみを一覧表示 ls *.rb .log ファイルのみを削除 rm *.log ファイル名の中にfileという文字列を含むファイルすべてを一覧表示 ls *file* ? 任意の1文字 拡張子が2文字のファイル一覧を表示 ls *.?? lsコマンド = list ファイルやディレクトリの一覧を表示 覚えておきたいオプション -a 全てのファイルを表示 -A ./ ../を除く全てのファイル -l ファイル・ディレクトリの詳細情報を表示 -h ファイルサイズを見やすくする -R 再帰的にディレクトリの中身を表示 cdコマンド = change directory 指定したディレクトリに移動 pwdコマンド = print working directory 現在位置を絶対パスで表示する mkdirコマンド = make directory ディレクトリの作成 覚えておきたいオプション -p 階層ごとディレクトリを作成することが可能 touchコマンド = ?? タイムスタンプの更新、指定したファイルが存在しない場合、ファイル生成する rmコマンド = remove ファイル・ディレクトリの削除 覚えておきたいオプション -f エラー表示せずに強制的に削除する -i ファイル削除前確認 -r ディレクトリの削除 catコマンド = concatenate ファイルを結合して中身を表示 よく使う使い方 :terminal cat fileA こんなこともできる fileAとfileBを結合してfileABに格納する terminal cat fileA fileB > fileAB ただし、catコマンドは大きいファイルは向いていない その代わりにlessコマンドをよく使う lessコマンド テキストファイルを1画面ずつ表示する 覚えておきたいオプション -N 行数を表示 -S 行を折り返さない(横スクロールできない) +F リアルタイムで監視 lessコマンドの操作方法 key 内容 /文字列 下方向に向かって検索をかける ?文字列 上方向に向かって検索をかける n 次の検索結果へ移動する N 前の検索結果へ移動する q lessコマンドを終了する cpコマンド = copy ファイル・ディレクトリのコピー 覚えておきたいオプション -p ディレクトリを再帰的にコピーする mvコマンド = move ファイル・ディレクトリの移動する 使用例 terminal mv ~/workspace/hogehog.rb ~/workspace/hogehoge.rb 上記のように、ファイル作成時にtypo等がった際に、ファイル名を変更することもできます。 findコマンド ファイルやディレクトリを検索する 使用例 terminal find src/ -type f -name “*list*" 上記の例はキーワードでファイルを検索した例 findコマンドはできることがたくさんあるぶん覚えるのも大変なので、都度検索して利用しています grep コマンド = global regular expression print 指定した文字列を検索する 使用例 terminal grep -r 'HogeHoge' app/ 上記のように、ディレクトリを指定して、指定した文字列が含まれるファイルを検索します。 例えば、あのメソッドどこで定義されてるかなー?と調べるのに効果的です。
 (テキストエディタを使っている人はもしかするとそちらの機能を使うと思います。) 覚えておきたいオプション -r ディレクトリ 内のファイルを検索する -i 大文字と小文字を区別せず検索する -l 検索結果にファイル名のみ出力する -C 検索結果に一致した箇所から前後に指定した行数表示する | = パイプライン コマンドの標準出力を次のコマンドの標準入力へ渡す 例えば、catコマンドとgrepコマンドを使うことで、ファイルないからある文字列を検索して、検索結果のみを出力することができます terminal cat account.txt |grep ‘北野 渚’
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

4行でTwitterアカウントのフォロー/フォロワー情報一覧を取得する

今回は4行でフォロワー一覧を取得してみる。 とはいへいつものTwittroauthを使うだけだが,abraham/twitteroauthを入れてない人はComposerから入れてください。 最近Laravelで構築するまでもないレベルの開発が多めなのでメモ。 APIの制限は1ユーザー当り5000件。それ以上取得したければforでループしたりすればいい。ggrks。尚,oauth_tokenとoauth_token_secretは不要でアクセスできる。 詳しくは↓ composer require abraham/twitteroauth follower一覧取得 require 'vendor/autoload.php'; use Abraham\TwitterOAuth\TwitterOAuth; $connection = new TwitterOAuth("APIKey", "APISecret"); $followers = $connection->get("followers/list",array('cursor' => '-1', 'screen_name' => 'screen_name','count'=>'100')); 単純に 1.オートローディング 2.名前空間のインポート 3.認証情報の設定&インスタンス化 4.取得 以上。 情報はクラスオブジェクトとして返されるので煮るなり焼くなり好きにしてください。 foreach($followers->users as $usr){ echo $usr->screen_name; } follow一覧取得 4行目のfollowers/listをfriends/listに変えるだけ。 My Website&Blog Twitter:@tomox0115
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む