Linuxのプログラミングの基礎

A、Uディスクローディング

  現在、ルートディレクトリの下に、ユーザーのログイン/メディアの下にマウントするには、デフォルトへのUディスク。
  それでは、どのように手動でUディスクをマウントするのですか?

Uのディスク名を取得します。1.

  最初のU-knowがLinuxでの呼び出し、使用にどのような名前のsudoのfdisk -lあなたはチェックして、次のmntディレクトリにマウントすることができます。通常は/ dev / sdb1などと呼ばれます。

2.マウントを/ mnt

  / dev / sdb1が/ mntにマウントし、次MNTディレクトリOKにマウントsudoを使用。

3.アンインストールUディスク

  umountのアンUディスクを使用しますが、UディスクUディスクをアンインストールしないように注意してください、あなたはprompted're忙しくなります。出口Uディスクは、他のディレクトリにアンロードされました。

別のディレクトリにマウント4

  どのように基本的には下の/ mntディレクトリにマウントされ、当然のことながら、別のディレクトリ、同じ操作に取り付けることができます。別のディレクトリにマウントされたときにだけ、Uディスクの内容がディレクトリにアンロードU-コンテンツを復元のみ、このディレクトリに「一時的に」上書きファイルになります、それはシステムディレクトリの操作に影響を与えます。しかし、Uディスクは空のディレクトリのものに取り付けることができます。

第二に、プロセス管理

1.psは、プロセスを表示します

  (1)のPS A:全て現在のユーザ情報システム
  (2)PS AU:に基づいて有する前面に表示されたコンテンツリッチ
  (3)PS AUX:表示処理は、grepのと併せて一般的な使用を終了しません

2.killプロセス

  -l殺す:チェック信号
  殺す-9 pidを:プロセスを殺します

3.envトップ

  ENV:ビュー現在のプロセスの環境変数
  トップ:プロセス管理のウィンドウに似て

第三に、ユーザー管理

1.ユーザー追加

  (1)のsudo adduserのユーザ名。このスクリプトは、多くのことを行うために私たちを助ける
自動的にホームディレクトリ情報、および他のグループを追加します。ユーザー名は大文字にすることはできません
  (2)sudo useraddを-s / binに / bashの-g TEST2 -d /ホーム/ test2は-m test2の
  使用は、ユーザーを作成するにはuseraddを、ユーザーが使用するシェルを指定します-s、ユーザーおよびグループを指定する-g、指定-d TEST2ディレクトリホームは、それが作成されたときにホームディレクトリは、-mが指定されていません。
  注:1.この時点で、あなたが求められることがありTEST2グループが存在しない、それは最初TEST2グループを作成する必要があり、sudoのgroupaddのTEST2。
     ユーザー2.この方法では、パスワードなし、なし初期パスワードを作成しません。passwdのユーザ名パスワードの変更

2. [削除]ユーザー

sudo deluser username;只删除了用户,但没有删除家目录,得收到那个删除。
sudo userdel –r username;用户和家目录都删除。

四、FTPサーバの設定

  LinuxのFTPサーバーだけでなく、非常にシンプルを設定するには多くの方法があります。ビルドのftp ftpサービスに選挙をインストールするには、vsftpdのソフトウェアをインストールすることです。

一般的なFTPサーバ:
  Windowsの場合:サーバ= U FTPサーバ
  のLinux:ProFTPDの:(プロフェッショナルFTPデーモン)FTPサーバプログラムのUnixプラットフォーム上で、または(などのLinux、FreeBSDの、など)Unixライクなプラットフォーム上で。
  VSFTPはUnixライクな名前から見ることができ、非常にセキュアなFTPの略システムのGPLのリリースで使用されるFTPサーバソフトウェアをベースに、コンパイラの本来の意図は、安全なコードです。

1.設定

(1)ダウンロードvsftpdは
  sudoのAPT-GETにvsftpdをインストール

(2)配置/etc/vsftpd.conf
  local_enable = YES
  WRITE_ENABLE = YES
  anon_upload_enable = YES
  anon_mkdir_write_enable = YES

(3)サービスを開始する
  サービスvsftpdの開始を

(4)起動状態確認
  サービスvsfptdのステータスを

2.エラーメッセージ

ftp:connet refuse…. 将listen_ipv6注释掉就行

五、SSHサーバ

リモートホストへの1.sshログイン

ssh 用户名@ip,然后输入用户密码。如ssh [email protected]

2.scpファイルのコピーに加え、Aフォルダ-r

(1)上传本地文件到远程主机:scp 本地文件绝对路径 远程用户名@IP:绝对路径
(2)从远程主机下载文件:scp远程用户名@IP:绝对路径本地文件绝对路径

六、vi

カーソルを移動1

リアの前にHJKL
0:行の
行の末尾:$の
ファイルを起動:GGの
ファイルの最後:G
ラインジャンプ:な行として行+ G、200Gに200回のジャンプ

2. [削除]

削除自然は削除さが、カットされていません。
X:現在のカーソル1文字を削除した後
前に----------------------- -------------:X
の単語を削除します:DW(カーソルが単語の前に移動する必要があります)
D0:銀行の前にカーソルの内容を削除し
、削除銀行の後にカーソルの内容を:DのD $をまたは
行全体を削除します:ddは
現在の行を削除し、現在の行の後に数行:NDD。 nは整数である
リボケーション:U
抗失効:Ctrlキー+ R&LT
3コピー&ペースト
コピーライン:YY
重複行に:NYY
ペースト:Pを

テキストモードに切り替え4.

カーソル位置からA-は、スタートの後ろに挿入される
端部で現在のカーソルの行から始まるA-
前のカーソル位置から挿入されたI-
I-カーソルが行の先頭から挿入された
カーソルの下の行に新しい行を開くO-
O ----------------- --------------------------上の
Aの後ろにS-削除カーソル挿入の先頭にある文字
の削除開始挿入にラインS-カーソル

ラインモード

1。置換検索
検索:
/トムトム検索
あるいは:
Sは、文字列を表し
、S /トム/ジャック/ gで現在のマウスジャックで置換されている全ての行トム前記
S /トム/ジャック------------- -----------------------------最初のトム
行3-12ジャック3,12s /トム/ジャック/ G交換すべてのトムは
、保存して終了2.
Q発射
Qを!打ち上げに強制的に
保存wは
WQ、X、ZZ保存して終了

3.ファイル名を指定して実行
などPWD、LS、などのコマンドを追加し、Enterキーを押して戻ります!!。

4.画面分割
SP:この文書水平分割画面
VSP:縦画面ファイル
CTRL + WW別のファイル分割画面への切り替え、ファイルパスに続いて、このようVSP〜/ホーム/ test.txtのよう

七、GCCコンパイラ4つの段階

ここに画像を挿入説明
  4つのステップは、上述した実行ファイルであってもよいし、さらに実行することができる:GCCのhello.c -oこんにちは自動的に4つのステップを実行します。

八、生産と静的ライブラリの使用

1.ネーム

1)lib+库名+.a
2)libmytest.a

2.製造工程

1)生成对应的.o文件,gcc xx.c –c –o xx.o
2)将生成的.o文件打包 ar rcs +静态库的名字(libmytest.a)+生成的所有.o

公開および静的ライブラリを使用して3

1)发布静态库
	给别人发布libmytest.a和头文件
2)使用静态库

  たとえば、次の二つの方法、静的ライブラリを使用してmain.cのファイルを記述します。

  ファイルパス1.gcc main.cの-I生成されたパスのlib -o指定ライブラリの名前(大I、がheader.h)が含ま
GCCのmain.c -o -I聞いlibmytest.a MainAppに
  2.gccのmain.cを-私は、ヘッダファイルのパス-Lライブラリパスは、-o -lライブラリ名は、生成の名前を指定するに
  はgccのmain.c -I聞い-Lライブラリパス-lのMyTest -o mainapp2
  注:なし.Hヘッダーファイルはありません

ナインの制作、共有ライブラリ

ここに画像を挿入説明

1.ネーム

Lib+名字+.so

2.生産

1)生成与位置无关的代码

静的ライブラリを公開3

1)gcc –fPIC -c name.c –I 头文件目录
	-fPIC:生成与路径无关的.o
如:gcc –fPIC –c *.c –I include

2)gcc –shared –o name.so *.o –I 头文件目录
如:gcc –shared –o libMyCalc.so *.o –I include

4.ダイナミックライブラリを使用します

1)gccのmain.cのlibのパス名-I -o生成されたヘッダファイルの名前を呼びます

gcc main.c  ./lib/libmycalc.so –o app –I include

2)ライブラリの依存関係を表示します

ldd 库名

この問題を解決する5.動的ライブラリをロードに失敗しました

  1)のlibディレクトリ内の動的ライブラリ、許可されていません。
  2)一時的試験:端末故障を閉じた後、試験のために、パスデータベースに格納されている一時変数。
輸出LD_LIBRARY_PATH =ライブラリパス(相対、絶対DO)
  3)を設定(永久設定)に使用されていません:
〜でファイルのホームディレクトリを.bashrcに追加:輸出LD_LIBRARY_PATH =絶対パスは、端末の再起動
  4)の設定は/ etc / LDを。 so.conf
  ファイルに書き込まれた動的ライブラリの絶対パス、sudoのにldconfig -v設定ファイルを更新するには
  よう:/ホーム/ Ubuntuの/プログラム/ libに、sudoをldconfigを-v

十、makefile

ここに画像を挿入説明
1.makefile的编写
  1)makefile的命名:makefile或Makefile
  2)makefile的规则:

规则中的三要素:目标,依赖,命令
即: 目标:依赖条件
  命令

如:app:a.c b.c c.c
gcc a.c b.c c.c –o app

  但这样将会编译所有的.c文件,当只是某个源文件本更改,而不需要编译其他文件时,应该怎样写:

app:a.o b.o c.o
		gcc a.o b.o c.o –o app 
a.o:a.c
		gcc –c a.c
b.o:b.c
		gcc –c b.c
c.o:c.c
		gcc -c c.c

2.makefile工作原理
  Makefile的原理是在生成目标时,比较目标与依赖的时间,若依赖的项比目标时间早,则更新依赖项。

3.makefile中的变量
1.实例:

obj=calculator.o main.o
target=main
$(target):$(obj)
	gcc $(obj) -o $(target)
%.o:%.c          #模式规则匹配
	gcc -c $< -o $@

2.变量规则:

1)makefile的变量不用声明类型,直接赋值使用。
2)使用:$(变量名)
3.自动变量
	$< : 规则中的第一个依赖
	$@: 规则中的目标
	$^ : 规则中的所有依赖

4.makefile中的函数
  所有函数都有返回值
常用函数:

1) wildcard函数:
  获取指定目录下某个类型的所有文件
参数:wildcard 参数;

2) patsubst 函数:
  模式匹配替换
  参数:patsubst 原字符串,被替换字符串,源字符串路径

3) 伪目标:没有依赖
  可以执行命令,必须在前用.PHONY:伪目标 声明
  如在make前需要清除.o等文件,可以这样写:

.PHONY:clean
Clean:
rm *.o –f(没则强制删除,提示没找到文件)

4)在命令前加-:
  表示若该命名执行不成功,则忽略这条命令,继续向下执行。

调用:make clean

#obj=calculator.o main.o
target=main
src=$(wildcard ./*.c)           #获得所有.c
obj=$(patsubst ./%.c,./%.o,$(src)) #获得所有.o
$(target):$(obj)
	gcc $(obj) -o $(target)
%.o:%.c
	gcc -c $< -o $@
.PHONY:clean
clean:
    rm $(obj)  $(target)  -f

十一、文件操作

1.查询系统函数帮助文档
  man man知道系统调用函数在第二章,然后使用man 章节 函数名 查看此函数的定义等。如:man 2 open

2.vi中函数跳到定义处的快捷键
  将光标放到系统函数上,shift + k会跳转到函数定义处。

3.lseek
(1)获取文件的大小
int size = lseek(fd,0,SEEK_END);

(2)移动文件指针
lseek(fd,0,SEEK_SET);//移动到文件开头

(3)文件拓展
  比如当前文件有14 byte,lseek(fd,2000,SEEK_END);则在14字节后面又加了2000字节。
  应用在如迅雷多线程下载一个文件时,先根据文件的大小创建相同大小的文件,用空洞填充,然后各程往不同段写入数据,直到下载完成

十二、系统函数

1.获取文件的存储信息stat函数
stat 文件名:获得该文件的详细属性信息
实例获取文件的详细信息:

#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<time.h>
#include<pwd.h>
#include<grp.h>
#include<unistd.h>

int main(int argc,char* argv[]){

	if(argc < 2){
		exit(1);
	}

	struct stat st;
	int ret = stat(argv[1],&st);
	if(ret == -1){
		perror("stat");
		exit(1);
	}
	char params[11] = {0};
	
	//file type
	switch(st.st_mode & S_IFMT){
		case S_IFSOCK:
			params[0] = 's';
			break;
		case S_IFLNK:
			params[0] = 'l';
			break;
		case S_IFREG:
			params[0] = '-';
			break;
		case S_IFBLK:
			params[0] = 'b';
			break;
		case S_IFDIR:
			params[0] = 'd';
			break;
		case S_IFCHR:
			params[0] = 'c';
			break;
		case S_IFIFO:
			params[0] = 'p';
			break;
		default:
			params[0] = '?';
			break;
	}
	//owner
	params[1] = (st.st_mode & S_IRUSR) ? 'r':'-';
	params[2] = (st.st_mode & S_IWUSR) ? 'w':'-';
	params[3] = (st.st_mode & S_IXUSR) ? 'x':'-';
	//group
	params[4] = (st.st_mode & S_IRGRP) ? 'r':'-';
	params[5] = (st.st_mode & S_IWGRP) ? 'w':'-';
	params[6] = (st.st_mode & S_IXGRP) ? 'x':'-';
	//other
	params[7] = (st.st_mode & S_IROTH) ? 'r':'-';
	params[8] = (st.st_mode & S_IWOTH) ? 'w':'-';
	params[9] = (st.st_mode & S_IXOTH) ? 'x':'-';
	
	int linkNum = st.st_nlink;
	char *fileUser = getpwuid(st.st_uid)->pw_name;
	char *fileGroup = getgrgid(st.st_gid)->gr_name;
	int fileSize = (int)st.st_size;
	
	char *time= ctime(&st.st_mtime);
	char mTime[512] = {0};
	strncpy(mTime,time,strlen(time) - 1);

	char buf[1024] = {0};
	sprintf(buf,"%s	%d %s %s %d %s %s",params,linkNum,fileUser,fileGroup,fileSize,mTime,argv[1]);
	
	printf("%s\n",buf);
	return 0;
}

2.其他系统函数

chmod:获取文件权限
strtol:将字符转换为指定的进制数
chown:更改文件是所有者
truncate:更改文件的长度
link:创建一个硬链接
symlink:创建一个软连接
readlink:读取软链接对应的文件名,不是读取内容
unlink:删除一个文件的目录并减少它的链接数,调用者必须有写和执行被删除文件的权限。

  1. 如果是符号链接,删除符号链接
  2. 如果是硬链接,硬链接键1,当减少到0时,释放数据块和inods
  3. 如果文件硬链接数为0,但有进程已经打开该文件,并持有文件描述符,则等该进程关闭时,kernel才真正的去删除该文件。可用于制作缓存文件,当进程结束,文件被自动删除。

目录操作函数:

chdir
getcwd
rmdir
opendir
readdir
closedir

dup,dup2:文件描述符的复制
dup2(old,new):

  1. old -> new 如果new是一个被打开的文件描述符,在拷贝前先关掉new
  2. old和new同一个文件描述符,不会关掉new,直接返回old
    fcntl:
    改变已经打开文件的属性;
    打开文件的时候:只读,然后可以修改添加写,追加等属性。
发布了21 篇原创文章 · 获赞 10 · 访问量 1万+

おすすめ

転載: blog.csdn.net/psl1234554321/article/details/104561182