目录
windows与linux的区别
windows下面有盘符的概念,C盘,D盘,E盘等等。但是在Linux没有盘符的概念。
Linux的目录结构:所有的目录都是从根目录“/”开始,是我们的根目录。
Linux的命令
查看命令的方式,可以使用man + 命令
Linux的下面,输出命令之后,没有反应就是最好的反应。
tab键具有联想补全功能。
用户配置
用户是Linux的使用者:
1.Linux是多用户的系统,一个用户可以多次(同时)登录一个Linux系统,多个用户也可以(同时)登录一个Linux系统。(与Windows桌面版本不一样)
2.使用Linux系统就像是入住一间豪宅。豪宅有它的主人,家人和客人;类似地,Linux系统的用户也分为普通用户和特权用户
3.普通用户有很多个,它们只能使用系统的部分功能,而超级用户只有一个,它的名字是root,它可以使用系统的所有功能--包括删除另外一个用户
4.对于部分普通用户,它们可以使用sudo命令来临时提高自己的权限,从而可以执行一些(而不是所有)特权命令,比如想要使用apt install命令在系统上安装软件,使用shutdown命令关机等等
5.普通用户的shell命令提示符是$,root的shell命令提示符是#
6.每个用户都在一个组当中。组被用于将若干用户集合到项目或部门当中去。组机制允许同组的各个成员可以共享资源
7.为了节约空间,操作在保存用户和组信息的时候,只保存两个整型数字,称为用户ID和组ID。用户ID和组ID和用户名和组名是一一对应的
切换用户
切换到根用户,执行su命令
切换到其他用户,在su命令后面添加用户名即可。从root用户进入其他用户的时候不需要密
码.
退出当前用户
使用exit指令可以退出当前用户。
用户使用su指令会进入其他用户,使用exit指令会回到当前的用户
当嵌套使用su指令来依次进入多个用户时候,多个用户是使用 栈结构 来管理的。执行su指令相当于将新用户压入栈顶,执行exit指令相当于弹出栈顶
当用户在上述的 栈结构 中存在的时候,那个用户是不能够被删除的
添加用户
使用useradd命令来添加用户
只有root用户或者拥有sudo权限的用户使用sudo命令后才能添加用户
什么是拥有sudo权限的用户?
如果把root看成是宫中的皇帝,root作为皇帝自然是拥有至高无上的权力,但是这种权力往往
也会带来大量的风险(比如下了一个错误的指令,例如删除所有的内容),另一方面,root也不希望事必躬亲。这个情况下,root可以将部分权力委托给一些普通用户(类似宫中的太
监),这些普通用户只要拿到“圣旨”以后,就能以root的身份来处理事情。在Linux系统中,没有消息就是最好的消息。通常命令执行成功时是不会有任何提示的,只有失败的时候才会在shell里面打印错误信息.
删除用户
使用userdel命令来删除用户
如果用户正在使用中,那么这个用户就不能被删除
如果用户在su命令和exit命令构成的用户 栈结构 当中的时候,那么这个用户也不能被删除
在userdel后面添加-r选项(Recursive递归),可以删除用户家目录下的文件
文件相关命令
文件是存放磁盘上的数据
Linux的文件系统是一套单根目录结构。
目录的根基是被称为 根root 的目录,它写作"/"
文件拥有不同的类型,比如目录文件、普通文件等等(目录也是一种文件)
由文件名组成的字符串,以"/"分隔称为路径。根目录开始的路径称为绝对路径,当前目录下的路径称为相对路径。最后一个"/"之前的部分称为目录部分,后面的称为文件部分
当前工作目录
在shell的命令输入栏左边,会提示当前目录的路径。其中,如果路径的最左边是~,那么路径的根是用户的家目录(即/home/用户名);如果路径的最左边是/,那么路径的根是root目录。当前目录是相对路径的起始位置,也是进程的“当前位置”。
使用pwd命令可以显示当前工作目录:
$pwd
查看当前工作目录下的所有文件
使用ls命令可以显示当前工作目录下的所有文件的文件名
$ls
无论是在哪个目录下面使用ls,都会发现显示结果必有两个目录文件,依次是 . 和 ..
.代表的是当前目录,.. 代表的是上级目录
在ls后面可以添加路径名,这样可以打印对应路径下的所有文件的文件名熟练使用tab键的自动联想功能。当你忘记想要输入的路径的时候,使用tab键会给你新的灵
感。在某些情况下,如果你输入了路径的前缀,使用tab键会自动补全路径在ls命令后面添加-a参数,可以显示隐藏文件(文件名以.开头的文件)
$ls -a
在ls命令后面添加-l参数,可以显示文件的详细信息
$ls -l
1.第一个字母用来说明文件的类型,这种方法是和Windows使用后缀来代表文件类型不同的。如果第一字母是d,那么说明这是一个目录文件,如果是-,那么说明是普通文件(包括文本文件和二进制文件)。文件类型还有很多种,例如:块特殊文件、字符特殊文件、命名管道(FIFO)、套接字(socket)和符号链接等
2.后续的九个字母代表的是权限。依次是代表拥有者的读,写,执行、拥有组的读,写,执行和其他用户的读,写,执行权限。如果文件可读则显示r,可写则显示w,可执行则显示x,没有相关权限则显示-
3.后续的数字代表的是指向这个文件的硬链接数
4.后续的两个字符串依次代表文件拥有者和拥有组
5.随后的数字代表了文件的所占用的空间,这个属性只对普通文件,目录文件和符号链接有意义。普通文件的大小可以是0。目录的大小是固定的,在本机中是4096,它和目录下面的文件大小无关,目录文件主要是存放目录下的文件的文件名。符号链接的大小是它指向的文件的路径名长度
6.接着就是一个时间和日期,说明的是最后修改的时间
7.最后的字符串说明了文件名字,如果是符号链接,它还会显示指向文件的名字
改变当前工作目录
使用cd命令可以改变工作目录
$cd /dev
在dev目录上面使用ls -l指令以后,会发现这个目录下有大量的块特殊文件和字符特殊文件。
其中块特殊文件用b来表示,字符特殊文件用c来表示。特殊文件实际上是硬件设备在文件系
统上的抽象,所以特殊文件也叫设备文件
块特殊文件的特点是每次读取都读取一“块”数据,也就是说会设置一个专门的缓冲区来存放
数据,典型的块特殊文件有磁盘。字符特殊文件的特点是每次读取都读取一个字符,典型的
有键盘、鼠标、打印机等等.在cd后面添加-,可以回到上次cd之前的目录(连续使用cd - 只能在两个目录之间切换,因为之前目录是存放在环境变量里面,使用env命令可以查看,每次使用cd命令都会修改环境变量)
$cd -
如何使用cd命令,使工作目录转移到父目录,根目录,家目录?
$cd .. $cd / $cd ~ 或者 cd
创建目录
使用mkdir可以创建一个目录
$mkdir 目录名
如果直接去/home下面使用mkdir,它会提示没有权限。能否在一个目录下去添加新的文件,依赖于用户对目录的写权限,因为在目录下添加文件,实际上是修改了目录文件里面的内容。目录文件里面实际上是存储一个链表,其中每个链表结点代表一个文件的文件名和磁盘地址信息.
删除目录
使用rmdir命令可以删除一个空目录
$ rmdir 目录名
注意:rmdir不能删除非空的目录
拷贝文件或者目录
使用cp命令可以拷贝文件和目录
$ cp [选项] 源文件 目标路径|目标文件 # 当目标是目录的时候,cp命令会直接在目标目录下拷贝一份副本,文件名和源文件一致 # 当目标是文件的时候,cp命令会拷贝源文件的内容,重命名为目标文件的名字
Ubuntu当中,如果cp命令中目标路径已经存在同名文件,那么就会直接覆盖(其他发行版中在选项中添加-f(force 强制)也可以实现同样的效果)
如果希望在覆盖之间进行警告,则应该在选项中添加-i(interactive 交互式)。比如,如果dir1/text1已经存在,则键入下面的命令:$ cp -i text1 dir1 # 那么就会出现提示: cp: overwrite 'dir1/text1'? # 如果输入n或者no就会不覆盖,输入其他则会覆盖
如果源文件是一个目录,那么在选项中必须要添加-r,这里r是recursive(循环递归)的意思,也就是说添加-r以后,cp命令会递归地将目录下的所有文件都进行拷贝
$ cp -r dir1 path # 执行完毕后会出现dir1的副本path/dir1
移动文件或者目录
使用mv命令可以移动文件或者目录
$ mv [选项] 源文件 目标路径|目标文件
执行mv命令的效果和Windows下的剪切-->粘贴的效果一样
和cp命令一样,mv命令会出现覆盖现存文件的情况,mv也可以使用-f或者-i选项来关闭或者开启提醒
Linux里面没有专门的重命名命令,使用mv命令移动到原来的目录下面就可以实现重命名了
删除文件
使用rm命令可以删除文件
$ rm [选项] 文件|目录
使用rm,cp和mv导致文件被覆盖或者删除都是 不可恢复 的!
不要以root的身份或者是sudo权限来执行 rm -rf,这会造成不可恢复的后果
和rm以及cp命令一样,rm也可以使用-f选项来实现强制删除,使用-i选项来实现删除前交互提示,使用-r选项来实现递归删除目录及目录下文件
树状目录结构显示
$ tree 路径名
使用tree命令就可以显示目录的树状结构
. ├── dir1 │ ├── text1 │ └── text3 ├── dir2 │ ├── text1 │ └── text2 ├── text1 └── text2
显然,tree命令可以将目录的树形结构用图形化的方式打印出来
硬链接与软链接
ln - make links between files 创建文件链接
硬链接的创建:
ln 源文件 目的文件 //源文件是已经存在的文件,目的文件是新创建的
创建硬链接之后,相当于多创建了一个指向文件的指针。硬链接文件的inode结点号是一样的。修改任何一个文件,都会导致文件的内容发生改变。删除任何一个文件对其他文件是没有影响的.
软链接的创建:
ln -s 源文件 目的文件
创建软链接之后,相当于对源文件创建了一个快捷方式,源文件与目的文件结点号是不一样的。目的文件的大小其实是源文件的名字(路径名)的大小。删除源文件的时候,快捷方式也会失效。但是删除软链接文件的时候,源文件是不会受到影响的。
总结:将硬链接看成是共享同一个文件,软链接是属于源文件的快捷方式,是不同结点文件
权限相关
修改权限
文件的权限有三种,依次是读、写和执行
从命令ls -l的打印结果中可以得知,这种三种权限还会根据用户的身份而有所不同。文件的拥有者、文件拥有者的同组其他成员以及其他用户对文件的权限会有所区别1. 如何判断某个用户能否读取/修改/执行文件?
答:先判断当前用户和文件之间的身份关系,然后再检查文件的权限位
2. 如何判断某个用户能否删除文件?
先找到文件所在目录,判断当前用户是否拥有目录的写权限
使用chmod可以修改文件的权限,chmod命令比较灵活,它拥有比较多种使用模式
1. 文字设定法
$ chmod [who][+|-|=][mode] 文件名 # who代表用户类型:u表示用户,g表示组成员,o表示其他用户,a或者不写代表所有用户(ugo三个字 母可以组合) # +|-|=代表操作符:+表示添加某个权限,-表示取消某个权限,=表示设置成某种权限 #mode代表模式,使用rwx三个字母的组合,r表示可读,w表示可写,x表示可执行
可以在一行语句中对某个文件调整多次权限,使用逗号来分隔用户操作类型即可,例如:
$ chmod g+r,o+r example
执行完成以后,增加了组成员和其他用户的读权限
另外一个例子,删除example文件所有用户的执行权限(三种写法等价)$ chmod a-x example $ chmod -x example $ chmod ugo-x example
2. 数字设定法
通常文件的权限是采用类似于位图的形式来进行存储,3位的2进制数字可以用来表示文件的读写执行权限,9位的2进制数字就可以表示文件的所有用户权限。
在3位2进制数中,通常使用最高位表示读权限,随后是写权限,最低位是执行权限。然后再将拥有用户,拥有组和其他用户组合起来,就能得到一个9位2进制数字,最后按照8进制和2进制的转换方法,文件权限就能很轻松地一个用3位8进制数字来表示
例如 0644 就是 拥有者可读可写不可执行,组用户和其他用户可读不可写不可执行$ chmod 644 example
上诉代码执行完成以后就会将权限设置成拥有者可读可写不可执行,组用户和其他用户可读不可写不可执行
$chmod 775 example
上诉代码执行完成以后就会将权限设置成拥有者和组用户可读可写可执行,其他用户可读不可写可执行(工作中经常使用)
掩码
umask指文件(默认是0666)或目录(默认0777)创建时在全部权限中要去掉的一些权限,普通用户缺省时umask的值为002,root用户为022
请根据实际创建的文件的权限回答,掩码是怎么运算的?文件权限= default(默认权限) & ~umask(掩码取反)
以通过umask查看默认的缺省的掩码值,通过umask 001来修改掩码值$ umask $ umask 001
这种操作是临时的,如果要永久修改,需要修改配置文件
文件查找
索引
在Windows的旧版本当中,想要搜索一个文件是非常缓慢的。为了实现快速查找,在Windows 10和Linux系统当中,系统会专门维护一个索引文件
在Linux当中,索引文件是存放在具体的磁盘文件前面的,索引文件里面存放了各个文件的位置信息和其他信息。
使用find命令可以根据查找条件来在起始目录之下来查找文件,然后再执行指定的操作find 路径(可以是绝对路径或者相对路径) -name "文件名字" 文件名字可以使用通配符 * 代表任意多个字符 ? 代表任意一个字符 [] 代表一个范围,中括号中可以是数字,也可以是字母,可以数字与字母结合在一起的使用
使用find命令可以用来查找某个头文件的位置
find . -name "file[0-9a-z]" ./file4 ./file2 ./file3 ./filex
常见的查找条件
根据名称和文件属性查找
-name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]
-gid n 查找属于ID号为n的用户组的所有文件
-uid n 查找属于ID号为n的用户的所有文件$ find . -uid 1000
-group ’字串’ 查找属于用户组名为所给字串的所有的文件
-user ’字串’ 查找属于用户名为所给字串的所有的文件$ find . -user wangdao
应用通配符
通配符是字符串里面的特殊符号。如果将字符串里面的通配符按照一定的规则用字符来替换以后,得到的字符串和目标字符串一致,那么目标字符串就能匹配
例子,当前目录里面有文件file,file1,file12,file2,file3,file4$ find . -name "file*" # *用来匹配0至多个任意字符
结果是
./file1 ./file ./file12 ./file2 ./file3 ./file4
$ find . -name "file?" # ?用来匹配1个任意字符
结果是:
./file1 ./file2 ./file3 ./file4
$ find . -name "file[0-9]" # [范围] 用来匹配1个范围内的字符
结果是:
./file1 ./file2 ./file3 ./file4
查找的权限
·可执行权限(x): 如果目录没有可执行权限, 则无法进入(cd)到目录中.
·可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
·可写权限(w): 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
文件查看和处理
查看文件内容
使用cat命令可以查看文件内容
cat命令
查看小文件
head命令
head - output the first part of files 查看文件的前面一部分内容
tail命令
tail - output the last part of files 查看文件的尾部内容
more命令
more - file perusal filter for crt viewing 查看文件里面的内容,可以一行行的查阅。
less命令
less - opposite of more文件类型
使用file命令可以查看文件的类型
$file a.out $file test.c
标准的输入输出与重定向
文件描述符是一个整数,它代表一个打开的文件
标准的三个描述符号:
1. 标准输入:一般指键盘,描述符为:0
2. 标准输出:一般指屏幕输出,描述符为:1
3. 错误输出:也是屏幕,描述符为:2
重定向符号包括重定向输入<,重定向输出>,添加输出>>,错误重定向2>,错误和信息重定
向&>
其中>表示创建,>>表示追加,<<表示以什么结束,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出
创建文件
linux中创建空文件的四种方式:
# 方式1,使用echo: $ echo > a.txt(会有一个字节) $ echo -n > a.txt # 方式2,使用touch: $ touch b.txt # 方式3,使用cat: $ cat > c.txt $ 按ctrl+c或ctrl+d退出 # 方式4: vim d.txt $ 进入之后按:wq退出
文件内容查找
使用grep命令可以查找文件内容
$ grep [选项][查找内容][文件名1,文件名2,…]
其他命令相关
查看命令的别名
使用alias命令可以打印当前所使用的别名情况。一旦给命令起了别名,那么输入命令的别名就可以起到和原来命令一样的效果。
下面的例子是使用alias命令以后,终端打印的部分信息:
alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto'
输入命令的历史记录
使用history命令可以获取输入命令的历史记录,在history命令后面再添加> 文本文件,就可以将历史记
录保存到文本文件(本例子中是myHistory.txt)里面$ history > myHistory.txt
查看命令的帮助
Linux系统中会内置帮助手册,帮助手册有8个部分,包括用户手册、程序员手册和系统管理员手册等等。通常通过关键字+数字的形式来说明是第几个手册的帮助信息。例如,ls(1)就说明是第一部分(用户手册,即shell命令手册)的ls命令的信息
使用man命令可以查看帮助信息$ man [手册编号] 命令名字
进入帮助界面以后,使用q可以退出界面,使用方向键可以向前向后查看,使用b和f可以前后翻页,使用/+字符串可以进行查找