Linux系统简介(中)

四、Linux目录结构及文件基本操作
1)Linux目录结构
Linux是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作的骨架。

2)FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)
FHS定义了两层规范,第一次是/下面的各个目录应该要放什么文件数据,例如/etc应该放置设置文件,,/bin与/sbin则应该放置可执行文件等。第二层则是针对/usr及/var这两个目录的子目录定义,例如/var/log放置系统日志文件,/usr/share放置共享数据等。

3)目录路径
3.1. 路径:
 使用cd命令可以切换目录
 .表示当前目录,..表示上一级目录(注:以.开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,可以使用ls -a命令查看隐藏文件)
 -表示上一次所在目录,~通常表示当前用户的home目录,使用pwd命令可以获取当前所在路径(绝对路径)

3.2. 绝对路径:以“/”目录为起点的完整路径
/usr/local/bin 表示根目录下的usr目录中的local目录中的bin目录

3.3. 相对路径:以当前目录“.”为起点,以所要到的目录为终点
usr/local/bin (这里假设你当前目录为根目录,.省略(因为usr目录是/目录下的子目录),如果是当前目录的上一级目录,则需要使用..)

进入/usr/local/bin(目录):以home目录为起点
绝对路径:$cd /usr/local/bin
相对路径:$cd ../../usr/local/bin

4)新建:
4.1. 新建空白文件
使用touch命令创建空白文件

4.2. 新建目录(可以理解为windows的文件夹)
使用mkdir(make directories)命令可以创建一个空目录,使用-p参数,同时创建父目录
$ mkdir -p father/son/gradson
$ cd father/son/gradson #打开目录
$ pwd #显示当前绝对路径
显示: /home/shiyanlou/father/son/gradson

5)复制
5.1. 复制文件
使用cp(copy)命令复制一个文件到指定目录
将test文件复制到/home/shiyanlou/father/son/grandson目录中
$ cp test father/son/grandson

5.2. 复制目录
$ mkdir family #创建目录
$ cp -r father family #复制目录(-r或-R表示递归复制),把father目录复制到family目录下

6)删除
6.1. 删除文件
使用rm(remove files or directories)命令删除一个文件
$ rm test
强制删除 $ rm -f test

6.2. 删除目录
$ rm -r family 

7)移动文件与文件重命名
7.1. 移动文件(mv 源目录文件 目的目录)
使用mv(move or rename files)命令移动文件(剪切)
$touch file1
$mkdir Documents
$mv file1 Documnets

7.2. 重命名文件(mv 旧的文件名 新的文件名)
$mv file1 file2

7.3. 批量重命名 rename
$touch file{1..5}.txt #使用通配符批量创建5个文件
$rename 's/\.txt/\.c/' *.txt #批量将.txt重命名为.c
$rename 'y/a-z/A-Z/' x.c #批量将5个文件,文件名改为大写

8)查看文件
使用cat、tac和nl命令查看文件
8.1. 前两个命令都是用来打印文件内容到标准输出(终端),其中cat为正序输出,tac为倒序输出
$cat passwd
$cat -n passwd #加上-n显示行号
$nl passwd #比cat -n更专业的行号打印命令

8.2. 使用more 和less命令分页查看文件
$more passwd
显示一屏内容,可以使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出

8.3. 使用head和tail命令查看文件
只查看文件的头几行和尾几行(默认为10行,不足10行则显示全部)
$tail /etc/passwd
$tail -n 1 /etc/passwd #只显示一行(-n参数)

9)查看文件类型
$file /bin/ls

10)编辑文件

五、环境变量与文件查找
1)使用declare命令创建一个变量名为tmp的变量
$delare tmp
$tmp=shiyanlou #使用=赋值
#使用echo命令和$符号读取变量的值,($符号用于表示引用一个变量的值)
$echo $tmp

2)环境变量
环境变量的作用域比自定义变量的要大,如shell的环境变量作用于自身和它的子进程
set 显示当前shell所有变量
env 显示与当前用户相关的环境变量
export 显示从shell中导出成环境变量的变量
/etc/bashre 与 /etc/profile 分别存放的是shell变量和环境变量

3)命令的查找路径与顺序
PATH里面保存了shell中执行的命令的搜索路径
查看PATH环境变量的内容
$echo $PATH

3.1. 创建一个shell
$gedit hello_shell.sh
#为文件添加可执行权限
$chmod 755 hello_shell.sh
#执行脚本
$./hello_shell.sh

3.2. 创建一个c语言“hello world”程序
$gedit hello_world.c
#保存后使用gcc生成可执行文件
$gcc -o hello_world hello_world.c #gcc生成二进制文件默认具有可执行权限,不需要修改
#在shyanlou家目录创建一个mybin目录,并将上述hello_shell.sh和hello_world文件移动到其中
$mkdir mybin
$mv hello_shell.sh Hello_world mybin/
#运行程序
$cd mybin
$./hello_shell.sh
$./hello_world

4)添加自定义路径到“PATH”环境变量
PATH里面的路径以:作为分割符的
$PATH=$PATH:/home/shiyanlou/mybin #注:这里一定要使用绝对路径
#现在可以在任意目录执行上述两个命令(注:要去掉前面的./)
自动执行添加自定义路径
在每个用户的home目录中有一个shell每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。
zsh的配置文件是.zshrc,相应Bash的配置文件为.bashrc
$echo "PATH=$PATH://home/shiyanlou/mybin" >> .zshrc
上述命令中>>表示将标准输出以追加的方式重定向到一个文件中

5)修改和删除已有变量
5.1. 变量修改
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串

$path=$PATH
$echo $path
$path=${path%/home/shiyanlou/mybin}
#或使用通配符,*表示任意多个任意字符
$path=${path%*/mybin}

5.2. 变量删除
$unset tmp

6)让环境变量立即生效
前面在shell中修改了一个配置脚本文件之后(比如zsh的配置文件,home目录下的.zshrc),每次都要退出终端重新打开甚至重启主机后其才能生效
可以使用.source命令来立即生效
$source .zshrc
source命令还有一个别名就是.,上面的命令可以写成:
$../.zshrc

7)搜索文件
7.1. whereis简单快速
$whereis who

7.2. locate快而全
$locate /etc/sh

查找/usr/share/下所有jpg文件
$locate /usr/share/\*.jpg
注:要添加*号前面的反斜杠转义

7.3. which小而精
$which man

7.4. find精而细
$sudo find /etc/ -name interfaces
注1:find的第一个参数是要搜索的地方
注2:基本命令格式为find[path][option][action]
-atime 最后访问时间
-ctime 最后修改文件内容的时间
-mtime 最后修改文件属性的时间
-mtime n n为数字,表示为在n天之前的“一天之内”修改过的文件
-mtime +n 列出在n天之前(不包含n天本身)被修改过的文件
-mtime -n 列出在n天之内(包含n天本身)被修改过的文件
-newer file file为一个已存在的文件,列出比file还要新的文件名

六、文件打包与解压缩
介绍Linux上常用的压缩/解压工具,主要讲解zip、rar、tar的使用
1)zip压缩打包程序
$zip -r -g -o shiyanlou.zip /home/shiyanlou
$du -h shiyanlou.zip
$file shiyanlou.zip
上面命令将目录 /home/shiyanlou打包成一个文件,并查看了打包后文件的大小和类型

第一行命令中,-r参数表示递归打包包含子目录的全部内容
-q参数表示为安静模式,即不向屏幕输出信息
-o表示输出文件,需在其后紧跟打包输出文件名
后面使用du命令查看打包后文件的大小

2)创建加密zip包
使用-e参数可以创建加密压缩包
$zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou

3)使用unzip命令解压缩zip文件
将shiyanlou.zip解压到当前目录
$unzip -q shiyanlou.zip -d ziptest #使用安静模式,将文件解压到指定目录

4)rar打包压缩命令
4.1. 安装rar和unrar工具
$sudo apt-get update
$sudo apt-get install rar unrar

4.2. 从指定文件或目录创建压缩包或添加文件到压缩包
$rm *.rar
$rar a shiyanlou.rar

4.3. 从指定压缩包文件中删除某个文件
$rar d shiyanlou.rar.zshrc

4.4. 查看不解压文件
$rar | shiyanlou.rar

4.5. 使用unrar解压rar文件
$unrar x shiyanlou.rar #全路径解压
#去掉路径解压
$mkdir tmp
$unrar e shiyanlou.rar tmp/

5)tar打包工具
在Linux上面更常用的是tar工具,同时还支持7z,gzip,xz,bzip2等工具的支持
5.1. 创建一个tar包
$tar -cf shiyanlou.tar ~
tar:从成员名中删除开头的“/” #自动去掉路径开头的“/”,避免解包到根目录
tar:/home/shiyanlou/shiyanlou.tar:文件是归档文件,未输出;(成功创建归档文件:没有输出打包过程)

$du -h shiyanlou.tar
54M shiyanlou.tar #可以看到文件大小和目录实际大小一致表示没有压缩,只是打包

-c 表示创建一个tar包文件
-f 用于指定创建的文件名

5.2. 解包一个文件(-x参数)到指定路径的已存在目录(-c参数)
$mkdir tardir
$tar -xf shiyanlou.tar -c tardir

5.3. 只查看不解包文件(-t参数)
$tar -tf shiyanlou.tar

七、文件系统操作与磁盘管理
1)使用df命令查看磁盘的容量
$df
物理主机上的/dev/sda2是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母a表示第几块硬盘(也可能是可移动硬盘),如果主机上有多块硬盘可能还会出现(dev/sbd,/dev/sbc这些磁盘设备都会在/dev目录下以文件的存在形式)

2)使用du命令查看目录的容量
$du
$du -h

-d参数指定查看目录的深度
#只查看1级目录的信息
$du -h -d 0 ~ 输出:262M /home/shiyanlou
#查看2级
$du -h -d 1 ~ 输出:shiyanlou下所有目录的大小

3)创建虚拟磁盘
使用dd命令创建虚拟镜像文件
以/dev/zreo设备创建一个容量为256M的空文件
$dd if=/dev/zero of=virtual.img bs=1m count=256
$du -h virtual.img

4)使用mkfs命令格式化磁盘
将虚拟磁盘镜像格式化为ext4文件系统
$sudo mkfs.ext4 virtual.img

5)使用mount命令挂载磁盘到目录树
$sudo mount #查看主机已挂载的文件系统
mount命令的一般格式:
mount [options][source][directory]
常用操作
mount [-o [操作选项]][-t 文件系统类型][-w | --rw | --ro][文件系统源][挂载点]
挂载点刚创建的虚拟磁盘镜像到1mnt目录
$mount -o loop -t ext4 virtual.img 1mnt
$mount -o loop --ro virtual.img 1mnt #以只读方式挂载
$mount unmount 1mnt

5)使用fdisk为磁盘分区
$sudo fdisk -l #查看硬盘分区表信息
$sudo fdisk virtual.img #进入磁盘分区模式

6)使用losetup命令建立镜像与回环设备的关联
$sudo losetup /dev/loop0 virtual.img
$sudo losetup -d /dev/loop0
$sudo kpartx -av /dev/loop0 #建立虚拟设备的映射(用kpartx工具)
$sudo kpartx -dv /dev/loop0 #取消映射
$sudo mkfs.ext4 -q /dev/mapper/loop0 p1 #用mkfs格式化为ext4
$mkdir -p /home/virtualdisk_{1..3}
$sudo mount /dev/mapper/loop

八、Linux下的帮助命令
1)help命令
2)man命令
章节数 说明
  1 stand commands(标准命令)
  2 system calls(系统调用)
  3 library functions(库函数)
  4 special devices(设备说明)
  5 file formats(文件格式)
  6 games and toys(游戏和娱乐)
  7 misell aneous(杂项)
  8 adminstrative commands(管理员命令)
  9 其他(Linux特定的),用来存放内核例行程序和文档

3)info命令

猜你喜欢

转载自blog.csdn.net/zhaocen_1230/article/details/80731752