Linuxの基礎知識(4)

環境変数ファイルを探します

環境変数

  1. 変数

環境変数を説明するために、あなたは最初の変数が何であるかを理解する必要があり、と言うことは正確でなければならないシェル変数は、これらのシンボル、いわゆる変数は、シンボルの値(必ずしも値が、それは文字または文字列を使用できません)を記録するために使用するコンピュータで、各種の演算処理のため。変数は、一般に、1つの関係値を一つに、その値は式によって読み取られ、指定された直接に任意の変数値に割り当てることができる他の変数に割り当てることができるされています。計算や処理を容易にするため、プログラミング言語のほとんどは、各レコード番号、文字やデータ型などの文字列の変数の型を区別します。基本的に同じでシェル変数は、計算に関与し得る異なる種類(ただし、具体的に指定されたタイプ名)があり、そこにされているスコープ

可変範囲すなわち可変有効範囲同じ名前の1つの変数のみの範囲内(例えば、ソースファイルまたはグローバルスコープの関数として)*、。有効な変数を出ると、この変数は、一般的なとして存在しません。*

あなたは、declareコマンドを使用することができ、変数を作成:TMPという名前の変数を$ declare tmp(実際には、あなたは変数の前の宣言、直接使用すなわち創造を宣言することはできません)(変数名のみ、文字、数字またはアンダースコア、およびデジタル始まりとして使用することはできません。 )。使用=回数代入演算子、変数TMP に割り当てられた 123: $ tmp=123

変数の値を読み取る用いて、echoコマンドおよび$記号(変数の値を表すために使用される$符号を)$ echo $tmp

  1. 環境変数

環境変数のスコープカスタム変数よりは、シェルの環境変数は、独自およびその子に作用するよう、大きくすることができます。すべてのUNIXおよびUNIX系のシステムでは、各プロセスは、独自の環境変数の設定があり、デフォルトでは、プロセスが作成されたときに、明示的に指定作成プロセスに加えて、それはその親プロセスの必須を継承します環境設定のほとんど。シェルプログラムは、オペレーティングシステムの上でプロセスとして実行され、ほとんどのコマンドは、シェルシェルの子プロセスで実行されている方法が実行されます。

私たちは、変数の型は、通常、三つの方法を伴います。

  • 現在のシェルは、我々は現在のシェルでのみ有効作成し、上記のような民間のTMP変数ユーザー定義変数を、処理します。
  • シェル自体は、内蔵された変数。
  • 環境変数から派生したカスタム変数。

3つの変数の環境に関連する三つのコマンドもあります:set,env,export;
set:現在のシェルに内蔵された環境変数(外観シェルに関連する)を含む、すべての変数を表示し、ユーザ定義の変数と環境変数が派生しました。
env:ユーザーに関連付けられている現在の環境変数を表示するだけでなく、コマンドは、指定された環境で実行することができます。
export:環境変数に、シェルから派生変数に表示、それはまた、環境変数のカスタム変数としてエクスポートすることができます。

使用することがより直感的にすることができvimdiff、それらの間の違いを比較するためのツールを:

$ temp=123
$ export temp_env=123
$ env|sort>env.txt
$ export|sort>export.txt
$ set|sort>set.txt

上記操作コマンド導管を介して出力|用いてsort、コマンドキューイング、およびテキストファイル内のオブジェクトにリダイレクト。

$ vimdiff env.txt export.txt set.txt

ここで、変数は、環境変数が、それは単に現在のプロセスに比べてサブ効果的に環境変数として解釈されない、またはすることができますされているかについてのexport味へのコマンド、シェル変数を設定するtemp=shiyanlouし、新しいサブ作成Shellビューのtemp変数を値:
ここに画像を挿入説明
注:通常の変数と区別するために、通常は大文字で、環境変数名を設定するために使用されます。

  1. 恒久

しかし、問題の後にシャットダウン後に来たとき、または現在のシェル、環境変数なくなっああを閉じます。どのように永続的な環境変数作るには?
変数によってライフサイクル除算に、Linuxの変数は、2つのカテゴリに分けることができます。

  • 常設:設定ファイルを変更する必要があり、変数永久;
  • 一時的:あなたはシェルを閉じるときに使用輸出へのコマンドラインステートメントは、変数は失敗します。

二つの重要な文書は、/etc/bashrc(一部のLinuxは、この文書を持っていない)と/etc/profile、彼らは、シェル変数と環境変数に格納されていました。また、注目すべきで各ユーザーのディレクトリ内に隠されたファイルの違いは次のとおりです。

.profile 可以用 ls -a 查看
cd /home/shiyanlou
ls -a 

.profile現在のユーザーにのみ永続的な効果。書かれた/etc/profileあなたは永久的な環境変数、ちょうどオープンを追加したいのであれば、すべてのユーザーのための恒久的な存在である/etc/profile、あなただけの罰金を追加したい、最終的な環境変数を追加します。

コマンドと秩序へのパスを探します

私たちは、シェルのコマンドを入力し、シェルはどこコマンドを見つけ、それを実行するために知っている方法ですか?これは、環境変数によって行われているPATH検索します。PATH内部は、シェル内に保存されたコマンド実行の検索パス

チェックPATH環境変数の内容を:

$ echo $PATH

あなたは、デフォルトでは次の出力を参照してください。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

通常、地方分権ディレクトリのこの種は、実行可能ファイルには、我々はシェルでコマンドを実行するときのように、システムは、検索するディレクトリのためのパスの設定PATHの合わせに従うことフルーツの同じ名前のコマンドがあり、その後、最初の検索を実行します

何が簡単な実行可能なシェルスクリプトを作成するために行使するとC言語での「Hello World」プログラムの使用は作成しました:

シェルスクリプトファイルを作成します。

$ cd ~
$ touch hello_shell.sh
$ gedit hello_shell.sh

、スクリプトで次の行を追加し、保存して終了(最初の行を省略しないように注意してください、これはコメントではありません):

#!/bin/bash

for ((i=0; i<10; i++));do
    echo "hello shell"
done

exit 0

ファイルの実行権限を追加します。

$ chmod 755 hello_shell.sh

スクリプトを実行します。

$ cd ~
$ ./hello_shell.sh

:「こんにちは世界」プログラムを作成するためのC言語

$ cd ~
$ gedit hello_world.c
#include <stdio.h>

int main(void)
{
    printf("hello world!\n");
    return 0;
}

GCCを使用して実行可能ファイルを保存した後(gccは変更する必要、バイナリ実行ファイルは、デフォルトのアクセス権を持って発生しません):
$ gcc -o hello_world hello_world.c

Mybinホームディレクトリは、ディレクトリを作成し、それにhello_shell.shとhello_worldファイルを移動します:

$ cd ~
$ mkdir mybin
$ mv hello_shell.sh hello_world mybin/

それは今2つのプログラムがちょうどmybinディレクトリに作成された実行できます。

$ cd mybin
$ ./hello_shell.sh
$ ./hello_world

戻るホームディレクトリである親ディレクトリに、するときにこれらの2つのプログラムの実行が考えるコマンドのフルパスと相まってない限り、あなたは、見つけることができませんコマンドプロンプト缶を見つけるだろうが、それはシステムを使用するように行うか、非常に便利ですあなたはそれを作成することを、スクリプトファイルやプログラムなどのコマンドを実行しますか?その後、PATH環境変数にパスを指揮します。

「PATH」環境変数にカスタムパスを追加します

私たちは、目の前に注意すべきPATHパスの内部で:、我々はカスタムパスを追加することができますので、区切り文字:

$ PATH=$PATH:/home/shiyanlou/mybin

**私たちは絶対パスを使用しなければならないことに注意してください。**今、あなたは(前に除去する必要性への関心の任意のディレクトリに2つのコマンドを実行することができます./)。

パスを追加するには、PATH環境変数、それが現在のシェルでのみ有効である私は、端末を終了した後、オープン、その後、あなたは効果的でないでしょう。地球環境変数が有効に追加する方法はありませんか?またはシェルの起動時に上記のパスコマンドにカスタムパスを追加するたびに自動的に実行さ?ここでは、後者のアプローチことを懸念している-それを自動的に。

各ユーザーのホームディレクトリで、シェルがあり、各ユーザー定義はいくつかの環境変数を追加するなど、環境を初期化するために、起動時にデフォルトのコンフィギュレーションスクリプトを実行し、というようになりますzshの設定ファイルはさ.zshrcバッシュのプロファイルに対応します.bashrc彼らはetcまた、1つまたは複数のグローバル・コンフィギュレーション・ファイルを持っているが、我々は、一般的にのみ、ユーザーディレクトリに設定ファイルを変更します

単純にコンテンツを直接追加するには、次のコマンドを使用.zshrcして:

$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc

>>さらに、ファイルに標準的な方法リダイレクト出力を示し、>ファイルをカバーするようにリダイレクトされます。指定したファイルが存在しない場合は、新しいファイルを作成します。

変更し、既存の変数を削除します

  • 変数を変更します
    ${变量名#匹配字串}:最初の試合から戻って起動し、最短一致文字列と行の削除データは
    ${变量名##匹配字串}:スクラッチ一致、最長の文字列一致に沿って削除データからバック開始
    ${变量名%匹配字串}最短一致文字列に沿って、削除データを前方尾の試合から起動します
    ${变量名%%匹配字串}:試合が前方尾からのスタート、データの最長一致文字列と行を削除
    ${变量名/旧的字串/新的字串}:古い文字列に合致する最初の文字列を新しい文字列に置き換えられ
    ${变量名//旧的字串/新的字串}ます。新しい文字列に古い文字列を置き換えるために、すべての文字列を満たしています

追加するには、フロントを変更するにはPATH、環境変数を。コマンドにつながっ操作ミスを避けるために、新しいカスタム変数のパスに割り当てられた最初のPATHを見つけることができません。

$ path=$PATH
$ echo $path
$ path=${path%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多个任意字符
$ path=${path%*/mybin}
  • 削除の変数が
    使用できるunset環境変数を削除するコマンドを:
$ unset temp

環境変数をすぐに有効にするみよう

シェル(ホームディレクトリに、このようなコンフィギュレーション・ファイルの下のzshでファイルを変更する前の構成スクリプトの後.zshrc)は、使用することができますsource、それはすぐには反映させるためのコマンドを、例えば:

$ cd ~
$ source .zshrc

sourcealiasコマンドがあります.上記のコマンドは交換した場合、.方法は次のようになります。

$ . ./.zshrc

使用に際しては.、ときに、パスの現在の独立した領域を示している点に注意を払う必要があります。最初のポイントは、スペースが続き、完全な絶対または相対パス名を指定しなければならない文書の背面は、ソースが必要とされないことに留意されたいです。

ファイルの検索

  • whereis シンプルで速いです
$ whereis who
$ whereis find

whereis findそれは見つけるためにあなたのハードドライブから電源を入れますが、データベースから直接照会していないため、すぐに3つのパス、2つの実行パスと男のオンライン・ヘルプ・ファイルのパス、検索を見つけました。whereisは唯一のバイナリファイル(-b)、男のヘルプファイル(-m)とソースコードファイル(-s)を検索することができます。あなたがしたい場合は、より包括的な検索結果を使用して得ることができるlocateコマンドを。

  • locate高速かつオール
    「/var/lib/mlocate/mlocate.db」データベース検索が、このデータベースはリアルタイムで更新されていないを通じて、システムが使用して毎日自動的にスケジュールされたタスクを実行しますupdatedbので、時々追加したばかりのファイルを更新コマンドを、それがかもしれません手動で実行する必要が見つけることができませんupdatedbコマンドを。このような発見として指定したディレクトリにあるファイルの種類、見つけるために使用することができる/etcとともに、すべてのsh(それだけで/ etcディレクトリ、サブディレクトリは自動的に再帰検索して見ていないことに注意してください)起動ファイル:
$ sudo apt-get update
$ sudo apt-get install locate
$ locate /etc/sh

(追加するノートの下にあるすべてのJPGファイルを/ usr / share /検索*数のバックスラッシュエスケープの前で、それ以外の場合は検出されませんが)。

$ locate /usr/share/\*.jpg

あなたが追加できる数をカウントする場合-cのパラメータを、-iパラメータを見つけるためにケースを無視することができます。

  • which小さいながらも
    which、それ自体ビルトインコマンドシェル、我々は通常使用されるwhichので、それだけで、特定のソフトウェアのインストールかどうかを判断するためにPATH、パス検索コマンドに指定された環境変数:

  • findファイン、ファインは、
    findファイル(ファイルのタイムスタンプ、ファイルのアクセス権など)は、いくつかのコマンドを最も強力であるべきであり、それはファイル名でファイルの種類を見つけることができないだけで、と属性を検索することができます。

$ sudo find /etc/ -name interfaces

このコマンドは、/ etc /ディレクトリに示し、検索インタフェースは、ファイルまたはディレクトリの名前を呼びました。これはfindコマンドの最も一般的な形態であり、最初の引数は**検索する場所を見つけます。

なお、第1のパラメータ、コマンドの基本フォーマットとしてfindコマンドパスfind [path] [option] [action]

時間関連のコマンドパラメータ:
-atime:最終アクセス日時
-ctime:最後の時間は、ファイルの内容変更
-mtime時間最終変更ファイル属性:

実施例-mtimeパラメータ:
-mtime n:Nファイル「の日」の前にN改変日数として表さ数、である
-mtime +n:前リストN日(N日自体を含まない)がファイル修正される
-mtime -nリストを。 (n日自体を含む)日のn内のファイルに変更され
-newer fileたファイルは、ファイル名のリストよりも新しい、既存のファイルにファイルを:

(24時間以内)例えば、リストホームディレクトリ、同じ日には、ファイルを変更しました:

$ find ~ -mtime 0

栗:ファイル検索

目的:1)を見つけるためにsources.listファイルを、2)の代わりにzhangsanファイルの所有者で、自分だけで読み書きするために、それを修正する3)許可。

sudo find /etc -name sources.list
sudo chown zhangsan /etc/apt/sources.list
sudo chmod 600 /etc/apt/sources.list

出典:実験棟

公開された33元の記事 ウォンの賞賛1 ビュー1244

おすすめ

転載: blog.csdn.net/weixin_44783002/article/details/104627973