001-文件和目录操作
- linux
- 文件和目录操作
- 命令解析器
- Linux快捷键
- Linux目录结构
- 用户目录
- 绝对路径
- 相对路径
- 文件和目录操作
- mv命令
- 软连接的创建
- 硬链接的创建
- 文件或目录属性:(非重点,理解)
- which 命令
- 文件权限、用户、用户组
- 查找和检索
- 安装和卸载
- 在线安装
- deb包安装
- 源码安装
- 磁盘管理(U盘)
- 挂载:mout
- 卸载:umout
linux
从unix演变过来,是类unix计算机操作系统的统称,linux操作系统的内核名字也叫"linux"。是一个文件系统。
版本有:
- redhat系列
RHEL(专业商业版本)
CentOS(RHEL的社区克隆版本,免费)
FedoraCore(由原Redhat桌面版本发展来,免费兼容性差) - Debian系列
Debian
Ubuntu
- 命名规则:10(测试版),04(稳定版),单数年,短期支持版,偶数年,长期支持版本。
文件和目录操作
linux文件系统的存储单位是块。找文件的索引在linux下称为inode,也即i结点。保存了一些文件信息,通过inode找到对应的文件。每个文件都有对应的i结点。对于硬连接,多个硬连接映射的都是同一个文件,不占用额外的空间,只是做了一个映射,对文件做了一个备份,修改了一个会影响其他。
命令解析器
- 不是内部命令不会执行,不会解析(date命令能被识别,实际上是个shell命令)
- 作用:根据你敲的名字,去执行对应的程序。命令解析器起调用作用。
shell-unix操作系统终端输入的能被识别的命令
bash-Linux操作系统终端输入的能被识别的命令(伯恩和艾格重写了shell)
shell和bash的学名为:命令解析器
Linux快捷键
- history返回之前敲入过的命令 (配合快捷键**
ctrl+p
实现历史输入记录依次向上滚动,ctrl+n
**为向下滚动) - 光标移动(**
ctrl+b
光标向前走,ctrl+f
光标向后走,ctrl+a
到当前行首,ctrl+e
**到当前行尾) - windows中光标在字符间,但linux下光标前删除为**
ctrl+h
,ctrl+d
删除光标后的字符也就是光标覆盖的字符,ctrl+u
**删除光标前整行的) - 智能提示功能Tab命令,会自动填充命令,以及自动填充路径,按两次显示目录
- cd命令,linux下目录切换
cd/home/his
,按一次tab会补全目录,按两次会显示目录下的子目录。 - 清屏命令:
clear
或者**ctrl+l
**
Linux目录结构
没有盘的概念,目录是树结构。由根目录,下属子目录,有很多节点。
- “/”表示linux的根目录,代表目录的其实位置 (ls命令是查看)
- 记住一些重要的子目录:
/bin
:bin是Binary的缩写。这个目录存放着经常使用的命令。(ls,cp,dir)
- cd /bin进入该目录,ls查看内容。有绿色,cp拷贝。cat查看文件内容。敲下的命令会到bin目录下找,因为自动配置了环境命令。(只有配置了环境变量,exe执行时才会自动加载dir),cd 不在该目录下,cd 是内置命令。
- /boot: 这里存放的是启动linux时使用的一些核心文件(开机启动项),包括一些链接文件以及镜像文件。
- /dev:device的缩写。存的是linux的外部设备文件。注意:linux下一切皆文件。linux会把硬件的设备(鼠标,显卡…)抽象成文件,存到设备目录里。因此,在linux中访问设备的方式和访问文件的方式相同。
/etc
: 这个目录用来存放所有的系统管理和用户所需要的配置文件和子目录。(是linux操作的核心,绝对不要乱修改,可能导致不可挽回后果)- **
/home
**目录:用户的主目录。在Linux系统中,每个用户都有自己的目录。一般的目录名和以用户的账号命名的。 /lib
: 这个目录存放系统最基本的动态链接共享库,其作用类似Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。- /lost+foundL: 这个目录一般是空的,非法关机后,存放了一些碎片文件。
- /media :linux系统会自动识别一些设备,例如u盘、光驱,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt
:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。- /opt: 第三方软件的存在目录。个别软件放在这里。
- /proc: 是一个虚拟的目录,他是系统内存的映射,可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上,而在内存里,可以直接修改里面的某些文件。比如可以通过如下命令屏蔽其他主机的ping命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- /root: 系统管理员,也称超级用者的用户主目录。
- /sbin: s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /selinux:Selinux是一个安全机制,类似windows的防火墙。该目录存放selunix的相关文件。
- /src: 存放一些服务启动之后需要被提取的数据。
- /tmp: 存放一些临时文件。
/usr
: 不是用户目录!本质是:user software resource
,用户软件资源目录。很重要。用户的很多应用程序和文件都存放在该目录下,类似windows下的program files目录。- /usr/bin: 系统用户使用的应用程序。
- /usr/scr: 内核源代码默认的放置目录。
/var
: 这个目录存放着在不断扩充者的东西,我们习惯将那些常被修改的目录放在这个目录下,包括各种日志文件。
用户目录
绝对路径
从根目录(/)开始写起:/home/itcast/aa
执行pwd
命令可立刻得知目前所在的工作目录的绝对路径名称。
相对路径
- 相对于当前工作目录,exe可执行文件所在的目录。
.
->代表当前目录 ./就是当前目录
..
-
>在临近两个目录间切换 用法:cd -
- 注意输入命令时提示字符串的含义:
itcast@ubtuntu:~$
// root@linux :~#
-
itcast/root
:当前登录用户 @
: at 在
-
ubtuntu/linux
:安装时的主机名,自己设置或默认设置的
- ~:用户的家目录(宿主目录) 也即**/home/用户**,添加用户时,每个用户就对应了一个家目录。如果执行过切换目录命令,这里就是/’目录‘或者是/home/itcast/‘目录’。因为就相当于**/home/itcast/**。
- 切换到家目录的方法:已知用户名,可以用执行
cd /home/'用户'
,也可以执行cd ~
,甚至cd
$
/#
末尾如果是$则说明是普通用户,如果是#则说明是超级用户root
- 普通用户切换超级的方法:执行命令
sudo su
- 提示输入密码for itcast(当前普通用户):,之后就登陆到了root用户。exit就又退回了普通用户。
文件和目录操作
- 查看我的资产(目录)
tree
--必须安装软件,不是自带 使用安装命令:sudo apt-get install tree
,查看目录具体方式:tree 1Day
(以树状展开)颜色区别不同文件属性
- 白色-普通文件 studio.h,或者没有后缀
- 蓝色-目录
- 绿色-可执行文件
- 红色-压缩包
- 青色-链接文件(相当于windows下的快捷方式)
- 黄色-设备文件,block 块(类比为windos下硬盘抽象成的文件),char 字符(类比为键盘的文件), fifo 管道
- ls命令。
-
ls -a
查看目录下全部文件(可以把文件名字前带.的也显示出来:隐藏的)包括.[当前目录]
和.. [当前目录的父目录]
-
ls -l
显示目录文件下的详细信息,不显示隐藏文件,结合上述两个,ls -la(al也行)
,列出详细信息包括隐藏文件的。 - 下述
ls -l
列出文件详细信息的组成
- 文件类型。
- 普通文件
d 目录
l 链接符号(软链接,快捷方式)
b 块设备
c 字符设备
s socket文件
p 管道文件
。第一个。 - 所有者。权限。
r -- read
,w -- wirte
,x -excute
。第二个到第四个。 - 同组用户。文件所属的组的权限。
-
表示没有。 有r和x权限。 - 其他人。既不是所有者,也不是其他同组,只有read权限。
- 文件的硬链接数
- 该文件或目录的所有者
- 该文件或目录所属的组
- 文件或目录占用的存储空间。如果文件类型是- ,也就是普通文件,它的文件大小是自身大小。如果是目录,他就是当前目录占用的空间,不包括其内的东西。目录是大小是4096。
- 文件最后创建或修改的时间
- 文件名
- 在情人和前妻之间徘徊(返回路径)
-
cd 情人目录
(绝对或者相对路径) - 回家方式:
cd /home/aaa
cd ~
-
cd
w
- 退出原门的方式:
cd ..
cd -
- 查看当前到底在哪
-
pwd
(看路径) - 或者看"
:
“和”$
"之间的内容,即是当前路径
- 给情人买房子(创建目录)
- 一间小屋子:
mkdir girlfriend
- 一套别墅:
mkdir dir/dir1/dir2 -p (需要附加参数 -p 写在目录前后都无所谓)
- 趁前妻不在卖掉前妻的一间房子(删除空目录)
-
rmdir aa(目录名)
如果不是空目录会提示删除失败(不实用)rm意为remove -
rm aa
,提示是目录,无法删除,无论空不空。添加参数**-r
** 才行。意为递归,遍历删除。如果觉得危险,修改-r
参数为参数-ri
。会进行删除提示,会一个个问,回答y会确认删除。但注意删除以后文件就没有了。不进回收站!! - 没收情人所有财产(删除)。删文件也是使用
rm
,如果需要提示只需要添加参数-i
,不需要其他参数
- 给前妻买一个手镯(创建文件)
-
touch Luffy
(文件可以不带后缀,不带后缀会被视为普通文件),创建一个不存在的文件。有时操作失败,因为没有管理权限,暂时借用需要命令前加上sudo
- 如果touch 一个已经存在的文件会执行成功,作用是修改文件的时间。
- 给妻子置办一份财产,跟情人的一样(拷贝)
cp hello.c(要拷贝的文件) temp(要拷贝到的不存在文件)
cp OnePiece.txt temp(拷贝到已经存在的文件)
,会覆盖原来的内容cp mytest newdir
拷贝目录,会提示掠过newdir目录,是因为没有遍历。需要参数 **-r
** ,遍历操作都要-r
实际是把mytest目录放到了newdir目录里。cp mytest/* newdir
把mytest里的全部内容(用到了/*
)拷贝到newdir目录里
- 妻子产看清单内的内容(5种方式,查看文件中的内容)
-
cat 文件名
会把文件内容展示到屏幕上。一般用于查看小文件,大文件无法查看 -
more 文件名
会显示一部分内容 按回车会一行行显示内容,如果想分页看按空格,每次切换一屏。缺陷:无法回去看,不实用。 - 从 more命令退出,按
ctrl + c
-
less 文件名
按回车一次一行显示,按空格一页翻。另外支持功能:ctrl + b
往前翻页 ;ctrl+ n
往下翻页。 按q
推出浏览 -
head -x 文件名
从文件头部开始查看前x行内容。如果没有指定行数,默认10行(包含空行)。 -
tail -x 文件名
从文件尾部开始查看后x行内容。
mv命令
-
mv 文件名1 文件名2
把文件1名字改为名字2。前提是文件1存在,且文件2名字不存在。 -
mv 文件名 目录名
把文件移动到目录下。前提是目录名存在。 - 综上:影响mv命令实际功能操作究竟是移动还是命名,取决于后一个参数名字是否存在。
软连接的创建
-
ln -s 目录文件名1 文件名2
为文件名1创建一个软连接文件名2,也即一个快捷方式。实际上这不是一个复制文件。 - 如果用相对路径创建后,直接移动,则不能再使用。就需要能在全文件系统内使用,就需要用绝对路径创建软链接,没有文件就用不了。此时查找就会从根目录查找。此时里面就有了内容。
- 给目录创建软连接
ln -s 绝对路径1 软链接名字
(后缀不限) 也是一个复制
硬链接的创建
- 不需要指定绝对路径(区别于软链接)
ln 文件名1 文件名2
,给文件1创建一个硬连接2。没有了参数 -s 。本质原理是没有拷贝,硬链接并补占用磁盘空间,只是增加硬链接基数。当硬连接基数为0,也即全部都删除后,该i结点对应的位置是个无效的位置。所以就被释放了。如果不放新文件还可以恢复,否则无法恢复。- 把 touch 理解为创建一个软连接。
touch file ,ln file file1
。此时file 和 file1 的硬链接基数都是2。file 和 file1本质用的是同一个i 结点。如果修改file,file1会被同步修改。 - 不能给目录创建硬链接,只有文件才能创建硬链接。
文件或目录属性:(非重点,理解)
-
wc 文件名
获取一个文本文件的信息,获取行数和单词的个数(以空格作为分隔区分),获取行数,获取文件的名字。 od 路径/文件名
查看2进制文件(可执行文件也是2进制文件 )
- -t 指定数据显示形式,t后附加的可选参数如下
- c -> ASCII字符
- d -> 有符号十进制数
- f ->浮点数
- o ->八进制数
- u ->无符号十进制数
- x -> 十六进制数
du
查看当前目录的大小 加参数能看懂
- -h 以人类能看懂方式表示,实际上做了个大小转换
df
说明磁盘使用情况 加参数能看懂
- -h 显示具体情况 ,实际上做了个大小转换,以G为单位
which 命令
- 查看内建命令所在的目录是哪一个
- 例如:
which cp
显示出命令解析器搜索到cp.exe 的目录,即/bin/cp
which cd
没有结果。因为cd 命令是shell的内建命令,不是引用的外部的。
文件权限、用户、用户组
- 查看当前登录用户
- 直接通过命令行
- 执行命令
whoami
,我是谁
- 修改文件的权限
- 从ls -l 查看文件具体的权限
- 如何修改?(chmod表示change mod 改变权限)
- 文字设定法:
chmod [who] [+|-|=] [mode]
- who : 文件所有者 u 同组用户(文件所属组) g 其他人 o 所有者 a (缺省)
- +增加权限 - 减少权限 = 覆盖原来的权限
- mode : 即权限 读 r 写 w 执行 x
- 实例:
chmod o+w temp(文件名)
对于文件temp,给其他人增加写的权限chmod a=w temp
对于文件temp,给所有人的权限府改为写的权限
- 数字设定法(用的最多):
chmod 777 temp
(对于文件temp,把所有权限弄满,速度快,很暴力,不推荐用)
- ‘-’:表示没有权限
- r ->4
- w ->2
- x ->1
- 1+2=3,如果是3,表示有写和执行的权限。1+4=5,如果是5,表示有读和执行的权限,2+4=6,如果是6表示有读和写的权限,1+2+4=7如果是7表示拥有所有权限
- 765 7代表文件所有者具有所有权限 6 代表文件所属组具有读写权限 5代表其他人具有读和执行的权限
- 减法减去权限 -001 文件所有者和文件所属组权限-0,不变,对其他人-1,减去了他的执行权限
- linux中文件所属的组不一定是文件所有者所在的组
-
cd /home
查看有哪些用户 -
chown 用户名2 文件名
(重要) 把文件的所有者修改为用户2。会提示没有权限,可以用sudo
暂时借用管理权限 ,只有要输入当前用户(而非root)的密码,才能实现 -
chown 用户名2:用户组名2 文件名
把文件的所有者改为用户2,所有组改为用户组2。 记得借用sudo
管理员权限。 -
chgrp 用户组名2 文件名
把文件所属组改为用户组2
- 强调:目录必须要有执行权限,否则无法访问,权限不够。
查找和检索
需要置指明查询方法,-name
还是-size
还是 -type
还是- r
- 按文件属性查找
- 按文件名:
find 要查找的目录 -name "文件的名字"
- 不确定文件名字时,要使用通配符:’*'可代表一个或多个字符 '?'只能代表一个字符
- 例如"hel*" 找到所有以hel打头的,长度不限于4个字符 但"hel?"找到的是help,只能找到4字符的
- 按文件大小:
find 查找目录 -size '+/-' 大小
(+代表大于该大小,-代表小于该大小,大小要用小写k,大写M,不然提示错误)
- 在大小范围内查找:
find 查找目录 -size '+' 大小1 -size '-' 大小2
查找大于大小1,小于大小2的文件
- 按文件类型:find 要查找的目录 -type f(普通文件)/d(目录)/c(字符设备)/p(管道)/l(链接符号)/b(块设备)/s(socket文件) 例如:
find ~ -type f
- 按文件内容进行查找
-
grep -r
(递归查找) “查找内容” “查找路径” 例如:grep -r "stdio.h" ~
安装和卸载
在线安装
- apt-get
- 安装:
sudo apt-get install 文件名字
- 移除:
sudo apt-get remove 文件名字
- 更新:
sudo apt-get update
更新的是软件列表(存放的软件名字和下载地址),而不是软件,从官方服务器里更新,也可以修改为中国的服务器 - 清理所有的安装包:
sudo apt-get clean
具体目录在:/var/cache/apt/archives 目录下的.deb文件。
- aptitude
- 安装:
sudo aptitude install 文件名字
- 重新安装:
sudo aptitude reinstall 文件名字
- 移除:
sudo aptitude remove 文件名字
- 更新:
sudo apt-get update
- 显示状态:
sudo aptitude show 文件名字
deb包安装
- 安装:
sudo dpkg(实际上是:debpackage) -i xxx.deb
- 删除:
sudo dpkg -r xxx.deb
源码安装
- 解压缩源码包 进入到压缩包,执行
.config
文件 - 进入到安装目录
cd dir
- 检测文件是否缺失,创建MakeFile,检测编译环境 :
./configure
- 编译源码,生成库和可执行程序:执行
make
- 把库和可执行程序,安装到系统目录下:
sudo make install
- 删除和卸载软件:
sudo make distclean
- 上述安装步骤非绝对,应先查看附带的readme文件
磁盘管理(U盘)
拿数据的方法是copy命令:cp xxx.txt /home/xxx/xxx/
检测U盘有关信息以及U盘名字的命令:sudo fdisk -l
linux系统硬盘命名:硬盘1 :sda 硬盘2:sdb 硬盘3:sdc 硬盘4:sdd
- 磁盘设备种类: sd->SCSI Device hd ->Hard Disk 硬盘 fd -> Floppy Disk 软盘
- sda下分为
- 主分区:最多四个,sda1,sda2,sda3,sda4
- 扩展分区:第一个逻辑分区从sda5开始,sda6…
挂载:mout
手动挂载命令:sudo mount /dev/sdb1 /mnt
- 系统默认挂载目录:
/media
- 手动挂载目录:
/mnt
如果手动挂载到非/mnt
,会临时覆盖一些内容 ,挂载到空目录即可 - 挂载方式:
mout 设备名 挂载目录
- 设备名是:U盘在linux系统中的名字
卸载:umout
sudo umount /mnt
提示设备忙,是因为自己在当前目录里,需要先退出去才能卸载。