Linux的目录结构
在Linux上面和windows上是不一样的,只有一个盘,每个不同功能的文件都存放在不同的文件夹上面,并且访问的权限也是不同的,大致的文件目录有如下图:
图片1.png
下面分别简单介绍每个文件夹的用途:
- /bin,/usr/bin:该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。
- /boot: 该目录中存放系统的内核文件和引导装载程序文件,/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可。
- cdrom:光盘目录,如果插入光盘会出现光盘内容(这个已经很少用了,被时代淘汰的功能)
- /dev: 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等,常用的是挂载光驱mount /dev/cdrom/mnt。
- /home: 系统默认的用户宿主目录,新增用户账号时,用户的宿主目录都存放在此目录下,表示当前用户的宿主目录,test表示用户test的宿主目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据。
- /lib,/usr/lib,/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,该目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令,目录/lib/modules包含了可加载的内核模块,/lib目录存放了所有重要的库文件,其他的库文件则大部分存放在/usr/lib目录下。
- /lib64:64位支持库,我的是32位的,里面只有一个文件。
- /mnt,/media: mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如floppy,cdrom。这样当挂载了一个设备如光驱时,就可以通过访问目录/mnt/cdrom下的文件来访问相应的光驱上的文件了。
- /opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下。
- /proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等。
- /root:系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
- /run :保存从系统诞生到当前的关于系统信息的文件。
- /sbin:存放系统管理员可执行的命令。里面也是二进制文件。一般不给普通用户执行,除非必要的时候,普通用户获取超级管理员权限可执行部分命令。
- /snap:snap应用框架的程序文件
- /srv:一般是系统存储的服务相关数据。服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内。
- /sys:系统中的设备和文件层次结构。文件夹中存储系统信息,用户需要的信息也从中调用。
- /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
- /usr:应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,/usr/local 存放软件升级包,/usr/share/doc 系统说明文件存放目录。
- /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log。/var/log/message: 所有的登录文件存放目录。/var/spool/mail: 邮件存放的目录。 /var/run: 程序或服务启动后。建议单独分区,设置较大的磁盘空间。
Linux的命令基本格式
我们打开命令行目录,输入一个命令,如下图:
图片2.png
起始符
wang@wang-VirtualBox:~普通用户提示符,#表示超级用户提示符。
命令格式
基本格式:命令 [选项] [参数]
-
需要注意的是个别命令不遵从这种格式,当有多个选项时,可以写在一起,简化选项与完整选项 -a 等同于 --all
-
比如:查询目录选项 ls命令: ls [选项] [文件或者目录]
选项:
-a 显示所有文件,包括隐藏文件
-l 显示详细信息
-d 查看目录属性
-h 人性话显示文件大小
-i 显示inode
-rwxrwxr-x 解释:
第一列10个字符表示权限,第一个字符代表文件类型(在Linux中不是靠文件后缀名来识别文件的),最常用的有三种如下:
- 表示文件,d表示一个目录,l表示一个软链接文件。
接下来9位字符分为三组,rwx,rwx,r-w分别代表三个用户的权限,他们分别是 u 所有者,g所属组,o其他人,其中r读,w写,x执行。
命令行常用快捷键
Ctrl +c 强制终止当前命令
Ctrl + l 清屏,等价clear命令
Ctrl +a 光标移动到行首
Ctrl + e 光标移动到行末
Ctrl + u 快速删除当前行
Ctrl + z 把命令放入后台,但是并未终止命令
Ctrl + r 在历史命令中搜索
Linux 查看帮助文档
- command --help
一般是Linux 自带的帮助信息。如 ls --help 。 -
man (有问题,找男人 manual)
man是linux提供的一个手册,包含了绝大部分的命令,函数使用说明。该手册分为很多章节,使用man时可以指定不同的章节来浏。例:man ls 。
man设置了如下的功能键:
图片4.png
- 历史信息
当系统执行一些命令后,可按上下键查看以前的命令,history将执行过的命令列举出来。下图打入history后,显示从1一直到999个命令,截图为部分,之后输入!996 ,显示了home文件夹下的列表。 - 自动补全
在敲出命令的前几个字母时,按下tab键,系统会自动帮我们补全命令。注:该命令需要唯一确定。
Linux下的cd命令
cd==change directory==切换目录
Linux中用cd命令来切换路径
- pwd 查看当前目录
- cd (若无参数,默认使用当前HOME环境变量作为参数)
- == cd $HOME
- == cd ~
- == cd /home/username
这里应该提一下,$HOME指的是当前用户的HOME目录,且~与$HOME等价(与之对应的是,/代表根目录,~代表用户的HOME目录) - cd - 表示:切换到上一次所在的目录。
- cd .. 表示:切换到上级目录(linux中,'.'代表当前目录,‘..’代表上级目录)
Ps:-P选项将目录切换到了实际的目录,而-L选项则将目录切换到了符号链接目录,缺省时默认为-L。
Linux下的mkdir命令
在Linux系统中,mkdir命令用来创建一个目录或一个级联目录。
- 命令格式
mkdir [选项] 目录名 - 命令选项
-m=mode:为目录指定访问权限,与chmod类似。
-p:如果目录已经存在,则不会有错误提示。若父目录不存在,将会创建父目录。该选项常用于创建级联目录。
-v:每个目录显示提示信息。
mkdir命令不加任何选项默认在当前目录下创建目录,目录的默认权限为777-umask。如果目录已经存在将会提示错误。 - 常用命令
- mkdir baklog:在当前目录创建baklog目录。
- mkdir cep dod testlog(mkdir {cep,dod,testlog}):创建多个目录。或者多个目录用大括号({})括起来,并用逗号分隔。逗号前后不能有空白。
- mkdir -p baklog/{bin,lib,log/{cep,dod,testlog}}:创建级联目录。同一目录下的子目录放在大括号中,并用逗号分隔。
- mkdir -m=r a -- 只读
mkdir -m=w b -- 只写
mkdir -m=rw c -- 读写
mkdir -m=rx d -- 读可执行
mkdir -m=rwx e -- 读写可执行
为目录指定权限,指定的权限为mode-umask。例如,mode=rx,umask=2,则最终权限为555-2=554,即rw-rw-r--。- mkdir -vp baklog/{bin,lib,log/{cep,dod,testlog}}:查看创建目录的过程信息
rmdir和rm命令
rmdir
删除一个空的目录
- -v选项:提示
mkdir -v dirname
结果: 操作成功后都会有提示信息。
一次删除两个目录,用空格分开
空目录1、2
rmdir 1 2
结果:一次删除了空目录1、2
- -p选项:级联删除
目录1122/1
rmdir -p -v 1122/1
结果:先删除1122/1,再删除1122。
目录1122/1 1122/2
rmdir -p -v 1122/1
结果:删除1122/1,再删除1122时错误,因为此时1122不是空文件夹。
rm
删除文件或者目录
- .-f选项:不管目录下的文件存在不存在,都不给予提示
目录1122/1/a,1122/1为目录,a为文件
rm -f 1122/1
结果:提示1122/1为目录,不能删除
rm 1122/1/a
结果:成功,但是没有任何提示
rm 1122/1/b
结果:没有任何提示
- -r:删除此目录下的所有文件,但是此目录不删除
目录:1122/1 1122/2
rm -r -v 1122
结果:删除1122/1 1122/22
- 组合删除:删除该目录以及该目录下的所有文件
目录1122/1/a 1122/2
rm -rf -v 1122
Linux软连接和硬连接
软连接
- 命令: ln -s 原文件 目标文件
- 特征:
1.相当于windows的快捷方式
2.只是一个符号连接,所以软连接文件大小都很小
3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行
4.所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的
5.原文件丢失,软连接无法访问,会报找不到的错误
6.ls -al以后,软连接后面箭头指向的是原文件
硬连接
- 命令: ln 原文件 目标文件
- 特征:
1.原文件和连接文件的属性完全一样
2.连接文件和原文件的关系类似于:复制+同步更新
3.当原文件丢失,硬连接文件还可以访问
4.不能跨分区,不能针对目录使用
5.原理:原文件和硬链接文件的i节点号是相同的(ls -i),1个文件名对应一个i节点,1个i节点可以通过多个文件名访问,所以,他们的属性完全相同,并且修改了其中一个的内容另一个也会跟着修改
重定向
简单的说就是将某样东西重新输入或者赋值给另外一个东西。以下就是常用的重定向符号:
- 重定向符号
> 输出重定向到一个文件或设备 覆盖原来的文件
>! 输出重定向到一个文件或设备 强制覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
< 输入重定向到一个程序
- 标准错误重定向符号
2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell
2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
& 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 c-shell
|& 将一个标准错误 管道 输送 到另一个命令作为输入
- 命令重导向示例
在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:
- 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <
- 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
- 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
[test @test test]# ls -al > list.txt
将显示的结果输出到 list.txt 文件中,若该文件以存在则予以取代!
[test @test test]# ls -al >> list.txt
将显示的结果累加到 list.txt 文件中,该文件为累加的,旧数据保留!
[test @test test]# ls -al 1> list.txt 2> list.err
将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err
[test @test test]# ls -al 1> list.txt 2> &1
将显示的数据,不论正确或错误均输出到 list.txt 当中!错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成其它格式!
[test @test test]# ls -al 1> list.txt 2> /dev/null
将显示的数据,正确的输出到 list.txt 错误的数据则予以丢弃! /dev/null ,可以说成是黑洞装置。为空,即不保存。
- 为何要使用命令输出重导向
- 当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
- 背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
- 一些系统的例行命令(例如写在 /etc/crontab 中的文件)的执行结果,希望他可以存下来时;
- 一些执行命令,我们已经知道他可能的错误讯息,所以想以『 2> /dev/null 』将他丢掉时;
- 错误讯息与正确讯息需要分别输出时。
Linux中grep命令
这个命令是搜索用的。下面详细介绍一下常用的方法
- 基础格式
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
- 将filename中包含w的行输出来
[root@zhoucentos log]# grep w filename
wo ai wo jia
wo hen hao
da jia hao wo shi yi ge hao ren
- 把行号显示出来
[root@zhoucentos log]# grep -n w filename
1:wo ai wo jia
3:wo hen hao
4:da jia hao wo shi yi ge hao ren
- 有多少行含有匹配的模式
[root@zhoucentos log]# grep -c wo filename
3
- 与正则表达式结合
字符类的搜索:搜寻 test 或 taste 这两个单字, [] 里面不论有几个字节,他都谨代表某『一个』字节
[root@zhoucentos log]# grep t[ae]st filename
test is meng
tast is huan
反向搜索-- 字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下
[root@zhoucentos log]# grep -n '[^g]oo' filename
8:root is a super
行首与行尾字节 ^ $
- 注意:
^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!
只要行首是wo的行
[root@zhoucentos log]# grep -n ^wo filename
1:wo ai wo jia
3:wo hen hao
找出空白行----只有行首跟行尾 (^$)
[root@zhoucentos log]# grep -n '^$' filename
6:
9:
10:
任意一个字节 . 与重复字节 *
这两个符号在正则表达式的意义如下:
. (小数点):代表『一定有一个任意字节』的意思;
* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态
[root@zhoucentos log]# grep -n 'g..d' filename
8:good is a gread
Linux的cp命令
- 命令格式
cp 【选项】 【源】【目录】或cp -t 【目录】 【源】 - 示例
cp -r dir dir2 //复制dir目录到dir2
cp a b c d dir2 //复制文件a、b、c、d到dir2。
cp -i /usr/men m*.c /usr/zh // 交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中。
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。
Linux下的mv命令
- 命令格式
mv [选项] 源文件或目录 目标文件或目录
- 命令功能
视mv命令中第二个参数烈性的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移动至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移动至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
- 命令参数
-b 若需覆盖文件,则覆盖前先行备份
-f force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 这个 -f 参数,大多都是指的 force, 简直就是不打招呼就壁咚
-i 若目标文件destination已经存在,就会询问是否覆盖, -i, interactive,交互式。 斯文的壁咚,一般你这么问,都没啥好结果,
-u 若目标文件存在,且source比较新,才会更新, -u, update, 更新
-t --target -directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时,目标目录在前,源文件在后。
- 命令实例
mv test.log test1.txt // 把test.log 文件改名成test1.txt 文件
mv test1.txt test3 // 把test1.txt文件移动到test3, test3是一个文件夹,别问我为什么
mv log1.txt log2.txt log3.txt test3 // 将log1.txt log2.txt log3.txt 移动到 test3文件夹
mv -t /opt/soft/test/test4 log1.txt log2.txt log3.txt // 将log1.txt log2.txt log3.txt 移动到 /opt/soft/test/test4路径一个目录在后,一个目录在前
mv -i log1.txt log2.txt // 它会询问你,是否覆盖log2.txt?
mv -f log3.txt log2.txt // 不管log2.txt是不是已经存在,都会被log3.txt覆盖掉了
mv dir1 dir2 // 如果目录dir2不存在,就将目录dir1改名为dir2;否则,将dir1移动到dir2中
mv * ../ // *这个星号是通配符,匹配任意字符 ; ../ 这个是上级目录
mv test3/*.txt test5 // 把当前目录的一个子目录里的文件移动到另一个子目录里
mv log1.txt -b log2.txt // 文件被覆盖前做简单备份,前面加参数-b
-b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。
--backup 该选项指定如果目标文件存在时的动作,共有四种备份策略:
1.CONTROL=none或off 不备份
2.CONTROL=numbered或t数字编号的备份
3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1...n:
执行mv操作前已存在以数字编号的文件log2.txt txt.1,那么在此执行将产生log2.txt2,以此类推。如果之前没有以数字编号的文件,则使用下面降到的简单备份。
4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。
find命令
tar压缩和解压缩
Linux中which命令的用法
- 命令格式
which 可执行文件名称 - 命令功能
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。 - 命令功能
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息 - 使用实例
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ which pwd
/bin/pwd
网友评论