Linux 系统编程-开发环境(一)

这篇具有很好参考价值的文章主要介绍了Linux 系统编程-开发环境(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 shell

1.1 shell 家族

1.2  bash

1.3 命令和路径补齐     

1.4 历史记录

1.5 主键盘快捷键

 2 目录和文件

2.1 类Unix系统目录结构

2.2 用户目录

2.2.1 相对路径和绝对路径

2.3 ls

2.4 cd

2.5 which

2.6 pwd

2.7 mkdir

2.8 rmdir

 2.9 touch

2.10 rm

rm file

 2.11 mv

 2.12 cp

 2.13 cat

2.14 more

2.15 less

2.16 head

 2.17 tail标题二

2.18 ln

 2.19 tree

2.20 wc

2.21 od

2.22 du

 2.23 df

3 文件属性和用户用户组

3.1 whoami

3.2 chmod

 3.3 chown

3.4 chgrp

4.查找与检索

4.1 find

4.2 grep

4.3 xargs

5. 安装卸载软件

5.1 apt-get

5.2 deb包安装

5.3 原码安装(redis 的安装就是如此安装的)

6.磁盘管理

6.1 mount

6.1.1 挂接光盘镜像文件

 6.1.2 挂载U盘

 6.2 umount

6.3 dd  

1 shell

1.1 shell 家族

        shell:命令解释器,根据输入的命令执行相应命令。 察看当前系统下有哪些shell:

   cat /etc/shells      

        察看当前系统正在使用的shell
echo $SHELL

 常见shell:

/bin/sh (已经被 /bin/bash 所取代)
/bin/bash (就是 Linux 默认的 shell)
/bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)
/bin/tcsh (整合 C Shell ,提供更多的功能)
/bin/csh (已经被 /bin/tcsh 所取代)
/bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

1.2  bash

   bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)bash是许多 Linux平台的内定 Shell,事实上,还有许多传统 UNIX上用的 Shell,像tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用。
 bash是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟口。此外,它也被DJGPP项目移植到了MS-DOS上。

1.3 命令和路径补齐     

  在bash下敲命令时,Tab键可以补全已经敲了一部分的文件名和目录名。如果是Ubuntu系统,系统默认启用了bash completion,还可以补全命令的某些参数、Makefile目标等等。如果是系统,可以用以下命令启用bash completion:
        $ source /etc/bash_completion
    建议将这一行加入 /.bashrc启动脚本中。比如使用sudo后面接命令,如果没有bashcompletion则只有sudo可以补全,后面的命令不能补全。如果启用了bash completion,则后面的命令,包括命令的某些参数(比如aptitude命令的install)都可以补全了。比如在主目录下要列出桌面目录的内容,输入(不回车)。
        $ ls De
        然后敲Tab键,如果以De开头的文件或文件夹只有Desktop一个,就自动补全为:
$ ls Desktop

 否则,再敲一次Tab键,将会把所有以De开头的文件或文件夹列在下面供你选择(在这里我们手动创建另外一个以De开头的文件)

$ touch Death
$ ls De
Death Desktop/
你可以再补敲一个s再Tab,这次Desktop就会补全到命令后面了。有的人是从 DOS时代过来的,留下一个很不好的习惯就是在找一个文件时反复地cd、ls、cd、ls。。。等找到了要找的文件时再想回到先前的目录,已经不记得先前是从哪个目录转到这里来的了。我们从上面可以看出,Tab补全本身就具备了ls的功能,上面的Tab补全相当于ls -Fd De*命令。所以我们完全不必反复地cd到别的目录然后ls去找文件,多按几次Tab就可以一条命令完成了,这样的好处是我们的当前目录不用变,不需要找完了文件再cd回来,同时省去了大量的按键次数。更重要的是,自动补全同时兼具了检查拼写错误的功能,如果前面几个字母拼写错了,就补全不出东西来,用户就知道拼写错了,如果前面几个字母没有拼写错,那么由系统补全出来的文件名肯定也不会有拼写错误,避免了用户在敲很长的文件名时易犯的拼写错误。

1.4 历史记录

history
  历史记录是另外一个非常方便的功能。按上下移动光标键(或者Ctrl-p、Ctrl-n)可以一条一条浏览以前输过的命令。如果有需要重复输入的命令就不用输第二次了。如果你能记住以前输过的某条命令中的某个关键字,可以按Ctrl-r,然后输入关键字,随着你每输入一个字母,bash会做增量式(increasingly)查找,也可以反复按Ctrl-r或Ctrl-s向前向后查找。如果找到了,按左右移动光标键或Home键(Ctrl-a)或End键(Ctrl-e)将该命令带回提示符下进一步修改,或者直接按Enter键原封不动地执行该命令。

1.5 主键盘快捷键

  bash的快捷键和emacs保持一致,用惯其中之一再用另一个程序会很顺手的。请记住一条原则:尽量使用主键盘快捷键而不使用移动光标键和编辑键。因为手不必离开主键盘是效率最高的,这样在你一生之中所节省的来回移动手的时间绝对可以用星期来计算,是绝对值得你花十分钟的时间记住这些快捷键的。

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 2 目录和文件

2.1 类Unix系统目录结构

        ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面

/ 根目录
bin
//系统可执行程序,如命令
boot //内核和启动程序,所有和启动相关的文件都保存在这里
grub //引导器相关文件
dev //设备文件
etc
//系统软件的启动和配置文件,系统在启动过程中需要读取的文件都在这个目录。如LILO参数、用
户账户和密码。
home //用户的主目录。下面是自己定义的用户名的文件夹
lib
//系统程序库文件,这个目录里存放着系统最基本的动态链接共享库,类似于Windows下的system32
目录,几乎所有的应用程序都需要用到这些共享库。
media //挂载媒体设备,如光驱、U盘等
mnt //目录是让用户临时挂载别的文件系统,如挂载Windows下的某个分区,ubuntu默认还是挂载在/media
目录。
opt //可选的应用软件包(很少使用)
proc //这个目录是系统内存的映射,我们可以直接访问这个目录来获取系统信息。也就是说,这个目录
的内容不在硬盘上而是在内存里。
sbin //管理员系统程序
selinux
srv
sys //udev用到的设备目录树,/sys反映你机器当前所接的设备
tmp //临时文件夹
usr //这是个最庞大的目录,我们要用到的很多应用程序和文件几乎都存放在这个目录下。
bin // 应用程序
game //游戏程序
include
lib //应用程序的库文件
lib64
local //包含用户程序等
sbin //管理员应用程序

2.2 用户目录

位于/home/user,称之为用户工作目录或家目录,表示方式:

        

/home/user
~

2.2.1 相对路径和绝对路径

绝对路径
从/目录开始描述的路径为绝对路径,如:
cd /home
ls /usr
相对路径 从当前位置开始描述的路径为相对路径,如: 
cd ../../
ls abc/def
.和..
每个目录下都有.和..
. 表示当前目录
.. 表示上一级目录,即父目录
根目录下的.和..都表示当前目录

2.3 ls

ls [OPTION]… [FILE]…
ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。 对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。 主要的OPTION有:
-a 列出隐藏文件,文件中以“.”开头的均为隐藏文件,如:~/.bashrc
-l 列出文件的详细信息
-R 连同子目录中的内容一起列出

 用ls -l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:

- 普通文件
d 目录
l 符号链接
b 块设备文件
c 字符设备文件
s socket文件,网络套接字
p 管道
后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。各权限如下所示:
r 读
w 写
x 可执行。对于目录,表示进入权限。
s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。t 设置标志位(sticky bit)。如果是有sticky bit的目录,在该目录下任何用户只要有适当的权限即可创建文件,但文件只能被超级用户、目录拥有者或文件属主删除。如果是有sticky bit的可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。- 没有相应位置的权限。
访问权限后面的数字表示与该文件共享inode的文件总数,即硬链接数(参见下面ln命令)。

2.4 cd

change dir 改变当前所在路径

cd ~
cd dir1/dir2
cd ..

2.5 which

查看指定命令所在路径
which ls

2.6 pwd

查看当前所在路径

pwd

2.7 mkdir

        

mkdir [OPTION] DIRECTORY…创建目录DIRECTORY,可以一次创建多个。OPTION如果是-p,表示可以连同父目录一起创建。

2.8 rmdir

rmdir [OPTION]… DIRECTORY…删除空目录,可以一次删除多个。OPTION如果是-p,表示可以连同空的父目录一起删除。mkdir和rmdir的用法举例:空目录,只包含.和..的目录为空目录。
$ mkdir a
$ mkdir a/b
$ ls a
b
$ rmdir a/b
$ ls a
$ rmdir a
$ mkdir a/b
mkdir: cannot create directory `a/b': No such file or directory
$ mkdir -p a/b
$ rmdir -p a/b

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 2.9 touch

touch [OPTION]… FILE…
* 将每个文件的访问及修改时间都更新为目前的时间。
* 如果文件不存在,则创建一个字节数为0的文件。

2.10 rm

删除文件:

rm file

删除目录:

        rm dir -rf

 2.11 mv

重命名:

 mv file1 file2

 移动文件:

        mv file1 ~/

 2.12 cp

拷贝文件:

cp file1 file2
cp file1 dir/
cp file1 ../

 拷贝目录:

cp dir1 dir2 -r
cp dir1 ~/ -r

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 2.13 cat

        查看文件里内容,输出到终端,如果cat时没跟文件名,则读标准输入,遇到\n后,输出到标准输出,终端下输入Ctrl-d表示结束.

2.14 more

more [OPTION] FILE…
查看文本文件的内容,屏幕显示完一屏就等待用户按下任意键再滚动到下一屏,如果中 途不想继续看下去了,可以按Ctrl+C或q终止显示。

2.15 less

less [OPTION] FILE…
查看文本文件的内容,屏幕显示完一屏就等待用户按键,用户可以向上或向下查看,如果中途不想继续看下去了,可以按Ctrl+C或q终止显示。

2.16 head

        head [OPTION]… FILE…

显示指定文件的前面几行。如果没有指定文件,将从标准输入(键盘)上读取。如果没有指定要显示的行数,则默认显示前10行。如果要显示文件的前5行:
$ head -5 file1

 2.17 tail标题二

tail [OPTION]… FILE…
显示文件的最后几行。若没有指定显示的行或字符数,则默认显示末尾10行。如果要显示文件末5行:
$ tail -5 file1

2.18 ln

硬链接是将一个文件名与一个独立的索引节点(inode)相连。这意味着一个文件可以具有多个硬链接,它们在文件系统中的表现形式是完全相同的。当创建硬链接时,任何一个链接的更改都会反映在其他链接上。硬链接可以跨越文件系统边界,但不能链接到目录。

符号链接是一个特殊类型的文件,其中包含指向另一个文件或目录的路径。它类似于Windows系统中的快捷方式。符号链接提供了对原始目标的间接引用,即使目标文件或目录发生变化,链接仍然有效。符号链接可以链接到文件或目录,并可以跨越文件系统边界。

链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic  Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。如果给ln命令加上-s选项,则建立符号链接。举例如下,注意ls -l列出文件的硬链接数和字节数:
硬链接:
touch hello
ln hello word_hs

 软链接(符号链接):

ln -s hello word_s

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 2.19 tree

这个命令需要下载安装,ubuntu下
sudo apt-get install tree
按结构树的形状显示目录和文件
Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

2.20 wc

 利用 wc 指令我们可以计算文件的 Byte 数、字数、或是列数,若不指定文件名称、或是所给予的文件名为“-”,则 wc 指令会从标准输入设备读取数据。
wc -l ./*
-c 或–bytes 或–chars 只显示 Bytes 数。
-l 或–lines 只显示列数。
-w 或–words 只显示字数。
Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

2.21 od

        od -tcx file1

 -t 指定数据的显示格式,主要的参数有:

c ASCII字符或反斜杠序列
d[SIZE] 有符号十进制数,每个整数SIZE字节。
f[SIZE] 浮点数,每个整数SIZE字节。
o[SIZE] 八进制(系统默认值为02),每个整数SIZE字节。
u[SIZE] 无符号十进制数,每个整数SIZE字节。
x[SIZE] 十六进制数,每个整数SIZE字节。

 Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

2.22 du

查看某个目录的大小:
以M为单位
du -hm /home/itcast/test

以B为单位  

du -hb ./*

 以K为单位,4k的整数倍

 du -hk ./*

总计大小,以M为单位 

du -hc ./*

 2.23 df

df查看磁盘使用情

df --block-size=GB
df --block-size=MB

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

        

3 文件属性和用户用户组

3.1 whoami

        查看当前登陆用户

3.2 chmod

        * 文字设定法

        chmod [who] [+|-|=] [mode] 文件名

操作对象who可是下述字母中的任一个或者它们的组合:

u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。

 操作符号可以是:

+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。

 设置mode所表示的权限可用下述字母的任意组合:

r 可读。
w 可写。
x 可执行。

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

*数字设定法 

chmod [mode] 文件名 我们必须首先了解用数字表示的属性的含义:
0表示没有权限,
1表示可执行权限,
2表示可写权限,
4表示可读权限,
然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g) (o)。 例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)= 6(读/写)。 比如设置一个文件允许所有用户可写。
$ chmod a+w file1

 设置一个文件允许所有用户可读、可写、不可执行

       

$ chmod 666 file1
user group other
r w x r w x r w x
4 2 1 4 2 1 4 2 1
5
6
3

 3.3 chown

chown [OPTION]… [OWNER:GROUP] FILE…
chown [OPTION]… –reference=RFILE FILE…
更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户A, 为了让用户A能够存取这个文件,root用户应该把这个文件的属主设为A,否则,用户A无法存取这个文件。
OPTION的主要参数:
* -R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
* -v 显示chown命令所做的工作。 比如把一个文件改为itcast用户和nogroup用户组所有。
$ sudo chown itcast:nogroup file1

       注意:

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

* chown需要特权用户才能执行
* 一个文件的owner和owning group是没有关联的。一个文件属于用户A,也属于用户组B,并不表示用户A属于用户组B。

3.4 chgrp

chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
该命令改变(指定)指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
OPTION的主要参数:
-R 递归式地改变指定目录及其下的所有子目录和文件的属组。

4.查找与检索

4.1 find

        根据文件名查找

find pathname -options [-print -exec -ok -name -type...]

在目录中搜索文件,path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。Expression 是find命令接受的表达式,find命令的所有操作都是针对表达式的。一条最常用的find命令--在当前目录及子目录下查找所有以file开头的文件名。
$ find . -name 'file*'
$ find / -name 'vimrc'
$ find ~ -name '*.c'
$ find /usr/ -name "*tmp*" -exec ls -l { } \;
find ./ -name "*tmp" -ok rm { } \;

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

4.2 grep

根据内容检索
grep [options] PATTERN [FILE...]
在指定文件中搜索特定的内容,并将含有这些内容的行输出到标准输出。若不指定文件名,则从标准输入读取。
[options]部分包含的主要参数:
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
-R: 连同子目录中所有文件一起查找。
比如到系统头文件目录下查找所有包含printf的文件
$ grep 'printf' /usr/include -R

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

4.3 xargs

从标准输入建立和执行命令行
xargs [OPTION] [command]

    它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。 find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件:

find . -type f | xargs file

查找usr目录下名字以“tmp”开头的文件,将其详细信息列出。 

find /usr -name "tmp*" | ls -l
find /usr -name "tmp*" | xargs ls -l
find /usr -name "tmp*" -print0 | xargs -0 ls -l
-print0表示输出以null分隔(-print使用换行);-0表示输入以null分隔。
查找当前目录下,文件名包含“bin”字串的文件,并在文件中搜索“printf”这个词
find ./ -name "*bin*" | grep "printf"
find ./ -name "*bin*" | xargs grep "printf"
find ./ -name "*bin*" -print0 | xargs -0 grep "printf"

 Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

5. 安装卸载软件

5.1 apt-get

更新源服务器列

sudo vi /etc/apt/sources.list

更新完服务器列表后需要更新下源:

sudo apt-get update 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache search package 搜索软件包
sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall 重新安装包
sudo apt-get -f install 修复安装
sudo apt-get remove package --purge 删除包,包括配置文件等
sudo apt-get build-dep package 安装相关的编译环境
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-cache depends package 了解使用该包依赖那些包
sudo apt-cache rdepends package 查看该包被哪些包依赖
sudo apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖

5.2 deb包安装

安装deb软件包命令: sudo dpkg -i xxx.deb
删除软件包命令: sudo dpkg -r xxx.deb
连同配置文件一起删除命令: sudo dpkg -r --purge xxx.deb
查看软件包信息命令: sudo dpkg -info xxx.deb
查看文件拷贝详情命令: sudo dpkg -L xxx.deb
查看系统中已安装软件包信息命令: sudo dpkg -l
重新配置软件包命令: sudo dpkg-reconfigure xxx

5.3 原码安装(redis 的安装就是如此安装的)

1. 解压缩源代码包
2. cd dir
3. ./configure
检测文件是否缺失,创建Makefile,检测编译环境
4. make
编译源码,生成库和可执行程序
5. sudo make install
把库和可执行程序,安装到系统路径下
6. sudo make distclean
删除和卸载软件

6.磁盘管理

6.1 mount

命令格式:
mount [-t vfstype] -o options device dir
其中:
* -t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
* -o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
* device 要挂接(mount)的设备。
* dir设备在系统上的挂接点(mount point)。

6.1.1 挂接光盘镜像文件

   由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟 光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远 远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。
1.从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
#cp /dev/cdrom /home/sunky/mydisk.iso 或
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/ sunky/mydisk.iso
2.文件和目录制作成光盘镜像文件,执行下面的命令。
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/
home/sunky/mydisk.iso,光盘卷标为:mydisk.
-r 这个选项能够将文件的uid,gid设为0,因为uid与gid只在制作镜像者本身系统上有效,在其它电脑上没有对应的用户,所以留着也只是无效用户;将所有文件设置为可读。如果文件有可执行的权限的话,将继续保持其可执行的权限。去掉所有文件及文件夹可写权限,因为挂载的光盘镜像本身也就为只读系统,可写权限无意义。其它特殊权限都将被清空。
-o 指定被创建的镜像文件名称(包含目录位置)
-V 指定光盘标签,就像windows下面挂载系统盘时会显示系统盘的名字一样。
-J 或-joliet选项表示使用Joliet格式(可使用unicode储存中文档名)由于在ISO 9660中有一些限制,如字符设置限制,文件名长度限制和目录树深度制。这些规定阻碍了用户复制数据,Joliet是ISO 9660的一个扩展,由Microsoft提出和实现。
3.光盘镜像文件的挂接(mount)
mkisofs -r -J -V mydisk -o /home/itcast/mydisk.iso /home/itcast/object/
将/home/itcast/object/目录下的内容生成一个叫mydisk.iso的镜像文件保存在目录/home/itcast/下。
#mkdir /mnt/vcdrom

 注:建立一个目录用来作挂接点(mount point)

#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom

 注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。

 6.1.2 挂载U盘

磁盘设备命名一般规则:
 在Linux中,设备名称通常都保存在/dev里,/dev下的文件是特殊的设备文件,和特定的驱动程序相关联。而这些设备的命名有一定的规则,可以使用“推理”方式把设备名称找出来。例如:/ dev/ sda1,“sd”是 SCSI Device (hd是 Hard Disk硬盘,fd是 Floppy Disk软盘)。其中“a”代表第一块硬盘,如果主机上装有4块硬盘,那么他们应该依次编号sda、sdb、sdc、sdd。而sda1中的“1”代表sda的第一个主分区,sda2代表第二个主分区。由于一块硬盘的主分区最多允许有4个,因此扩展分区的第一个逻辑分区从sda5开始向后依次编号。
1.检测存储设备名称
sudo fdisk -l

Linux 系统编程-开发环境(一),#网络编程,linux,运维,服务器

 

2.挂载存储设备sdb1到挂载点/mnt目录

sudo mount /dev/sdb1 /mnt -o utf8
可以使U盘内的中文正常显示出来。
3.访问/mnt
4.卸载/mnt

sudo umount /mnt 

 6.2 umount

卸载命令

sudo umount 挂在点

6.3 dd  

dd:拷贝
例1:拷贝光碟(注意,你的光碟是标准的 iso9660格式才可以这么做唷!)
dd if=/dev/cdrom of=cdrom.iso
例2:将文件sfile拷贝到文件 dfile中
$ dd if=sfile of=dfile

 例3:创建一个100M的空文件

dd if=/dev/zero of=hello.txt bs=100M count=1

/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件,从里面读出来的数据都是0。使用mke2fs命令将常规文件格式化成分区当成文件系统来使用,使用mount借助loop设备把映像文件当成磁盘分区挂载。
1.以/dev/zero为输入文件,imagefile为输出创建一个2M大小的文件.
$dd if=/dev/zero of=imagefile bs=2048 count=1024

 2.使用mke2fs命令将该文件制作成文件系统。制作期间需输入“y”确认。

$mke2fs imagefile

 3.制作成功后可以将该文件使用mount命令借助loop挂载到/mnt下

$sudo mount -o loop imagefile /mnt

4.可以查看到lost+found缺省目录

$ls /mnt

 5.可以像使用普通磁盘一样,直接在里面创建文件并写入内容。

$sudo vi hello.c

 6.lost+found hello.c

$ls /mnt

7.在/mnt内执行mount命令可以查看该“文件系统”的详细信息。

$mount
如:/home/itcast/mydisk on /mnt type ext2 (rw)

 8.可使用umount命令将该“磁盘”卸载。

$sudo umount /mnt

 

主要参考B站: 黑马linux系统编程。文章来源地址https://www.toymoban.com/news/detail-569999.html

到了这里,关于Linux 系统编程-开发环境(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux网络编程】网络编程套接字二

    喜欢的点赞,收藏,关注一下把! TCP和UDP在编程接口上是非常像的,前面我们说过TCP是面向连接的,UDP我们上篇博客也写过了,我们发现UDP服务端客户端写好启动直接就发消息了没有建立连接。TCP是建立连接的,注定在写的时候肯定有写不一样的地方。具体怎么不一样,我们

    2024年04月15日
    浏览(61)
  • Linux网络编程——UDP编程

    1、UDP通信协议,服务器端和客户端无需建立连接,只需要知道对方套接字的地址信息就可以发送数据 2、UDP通信流程图: 功能:创建套接字并返回套接字描述符 功能:将套接字与IP地址和端口号绑定 功能:发送数据 功能:接收数据 功能:关闭套接字 1、代码功能:两个进程

    2023年04月19日
    浏览(43)
  • Linux网络编程:网络基础

    文章目录: 一:协议   二:网络应用设计模式_BS模式和CS模式 三:网络分层模型(OSI七层 TCP/IP四层) 四:通信过程 五:协议格式  1.数据包封装 2.以太网帧格式和ARP数据报格式  3.IP段格式  4.UDP数据报格式 5.TCP数据报格式 六:TCP协议 1.TCP通信时序(面向连接的可靠数据通

    2024年02月12日
    浏览(81)
  • linux【网络编程】之网络基础

    “协议” 是一种约定 软件设计方面的优势—低耦合 分层依据:功能比较集中,耦合度较高的模块—高内聚 每一层都要解决特定的问题 每一层都有自己匹配的协议,每一层协议都解决自己的问题 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参

    2024年02月04日
    浏览(53)
  • 【Linux网络编程】网络基础一

    从今天开始我们将要从系统横跨到网络的学习了,因此有些书我们就可以读起来了。 操作系统 原理: 《操作系统精髓与设计原理》、《现代操作系统》 Linux原理方面的书 : 《Linux内核设计与实现》–陈莉君、《深入理解Linux内核》(选读–不作为重点) Linux编程方面的书: 《

    2024年04月15日
    浏览(58)
  • Linux网络编程 网络基础知识

    目录 1.网络的历史和协议的分成 2.网络互联促成了TCP/IP协议的产生 3.网络的体系结构 4.TCP/IP协议族体系 5.网络各层的协议解释 6.网络的封包和拆包 7.网络预备知识      Internet-\\\"冷战\\\"的产物 1957年十月和十一月,前苏联先后欧两颗”Spuinik”卫星上天 1958年美国总统艾森豪威尔向

    2024年02月10日
    浏览(44)
  • 【网络编程】Linux网络编程基础与实战第三弹——网络名词术语

    数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。 某个路由节点为数据包选择投递方向的选路过程。 路由器工作原理 路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

    2024年02月08日
    浏览(44)
  • linux 网络编程

    网络通信手段的一种,我们在之前学了进程间通信,包括管道、消息队列、共享内存、信号和信号量,这些通信方式有一个共同的特点,就是他们都是在依赖Linux内核在单机上进行进程的通信,而面对多机之间的通信,这些手段就远远不够了。所以我们引入网络,利用网络来

    2024年02月12日
    浏览(30)
  • Linux网络编程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇

    2024年01月24日
    浏览(36)
  • Linux网络编程02

    UDP 协议处于传输层,是不可靠谱、无连接、消息有边界的协议 TCP 类似于管道, UDP 类似于队列 UDP头部 传输层头部都不需要IP地址,都只需要端口号 Berkeley Scoket 库已经完成了传输层之下的内容,我们只需要再应用层调用下面提供的服务接口即可 Socket :套接字,建立连接时使

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包