XShell下的复制/粘贴
复制:ctrl(配合Fn) + insert
粘贴:shift(配合Fn)+ insert
初步接触Linux – 黑框命令行的操作 --稍微不适 --坚持一段时间 --就会用的很爽(各种快捷键)
为了便于学习和记忆,对命令进行分类(在总结的部分)
命令的实用格式:命令名称 [操作选项] [操作对象](注意命令名称与操作选项之间以空格“ ”分割,操作选项和操作对象也是空格分割,用[]括起来是指该选项可能没有,或者不需要表示,例如:ls -al 用来查看当前路径下的文件详细信息 ,并不需要操作对象, pwd 查看当前所处路径,操作选项和操作对象均没有)
对于目录的命令:
ls – 默认浏览当前目录下的文件信息(目录 —在windows下常叫文件夹),也就是浏览文件夹下的文件信息
ls英文全称:list file 将文件以清单的形式列出来
类似于Window下的文件列表(如下图)
问题:ls默认的情况下到底浏览的是哪个目录呢?
当前用户(默认为当前主机的登陆用户)的家目录(home)
当前用户:登陆的用户
家目录:Linux是一个多用户操作系统–同时可以有多个用户登陆linux进行操作
家目录是操作系统为每一个用户创建的受保护目录
ls 特定目录 --浏览特定目录下的文件信息
ls -a :浏览目录下的所有文件,包括隐藏文件(linux下文件名以 . 开头的文件默认不显示,是隐藏文件)
ls -l :查看目录下文件的详细信息
这些详细信息
linux下有一句名言:一切皆文件(linux下所有东西都是文件,都可以通过操作文件进行访问)
目录也是文件,只是文件类型是目录类型,Linux下并不以文件后缀名来区分文件类型,后缀名只是为了方便我们的使用。(linux关注的是文件的内容,也就是文件内的数据,并不关注文件的后缀名)
ls -al 选项可以组合使用(选项的组合不区分先后顺序)
例如也可以
ls -la
显示的颜色不同,表示的文件类型不同,文件功能不同,例如:蓝色的表示目录类型文件夹,可以进入对应的目录路径中
输入 env :可以大致查看各种文件类型对于的颜色代码
ll 相当于 ls -l
ls 只能浏览已经存在的文件夹,不存在的文件夹不能浏览,如果没有文件夹,需要先创建文件夹
pwd — 查看当前所在路径 (pwd英文全称:print working directory 打印当前工作路径)
/home/zw — 绝对路径,多层级路径的表达方式,而其中最前边的斜杠叫根目录,其余的斜杠是路径分隔符,/home/zw表示我当前在home目录,zw目录下
路径有两种:绝对路径和相对路径(后续会详细介绍)
windows下,磁盘分了多个分区,就可以有多少盘符(C盘、D盘….),每个盘符都是一个大目录,这个目录下的文件使用的磁盘空间就是这个分区的
windows下的目录结构可以随着分区多少而改变(比如从二个分区C、D,变成四个分区C、D、E、F,目录结构就发生改变了)
linux下有所不同,目录结构是唯一的,不会随着分区多少而改变(结合下图理解)
pwd查看当前所在路径,或者打印当前工作路径,打印出来的是一个绝对路径
绝对路径:是一个唯一路径,指的是以根目录作为起始表达的路径 ,例如:/home/zw
相对路径:多种多样的路径,指的是以某个路径作为参照路径,通常说的是以当前路径作为起始的路径
为什么说相对路径是多种多样的呢?
对于同一个路径,使用相对路径可以选择不同的起始路径,相对路径的表达也会不同。
cd — 改变工作路径,改变当前所在路径,进入某个路径(英文全拼:change directory)
cd ~ 表示当前用户的家目录
cd - 返回最近的目录(也就是上一个使用过的目录)
怎么样来表达相对路径呢?
在linux下有 . 和 …
. 表示当前路径,目录自身
… 表示上一级路径,目录的上一级路径
此时用 **cd ./…/…**表示是根目录 也就是 .zw/…home/…root
mkdir –- 创建一个空目录,也就是一个文件夹(英文全拼:make directory)
mkdir -p file2/file3 递归创建多层级目录,从外往内,哪层不存在就创建哪一层,一次创建多级目录
Linux下如何区分文件?
-:普通文件(文本文件、可执行文件、各种库文件)
d:目录文件(directory)
l:链接文件(linker,一个文件指向另外一个文件,相当于Windows下的快捷方式)
p:管道文件(pipe,用于进程间通信,管道通信,是一个共享缓冲区)
c:字符文件(character,字符设备,键盘,显示器)
b:块设备(block,磁盘)
Linux下一切皆文件,像字符设备,键盘,显示器等硬件设备都被抽象为文件。
Windows下区分文件是通过文件名的后缀,如.txt、.docs、.exe、.c、.h等等
Linux下区分文件是通过文件属性列的第一个字符。
Linux区分文件不通过后缀,不代表我们不能使用后缀,实际上为了方便,我们经常会使用这些后缀来快速区分文件类型。另外Linux操作系统本身不关心后缀,并不代表Linux上面运行的所有的应用程序都不关心后缀,比如说Linux下的gcc编译器在编译c语言源文件时,如果源文件名的后缀不是.c,那么gcc编译器将不能正常编译该源文件
vim工具
nano工具
rmdir — 删除目录(英文全拼:remove directory),只能删除空目录(个人感觉只能删除空目录的功能有点鸡肋!)
rmdir -p 递归删除空目录,从内往外,哪一层为空目录就删除哪一层
rm — 删除文件(英文全拼:remove),只能直接删除普通文件,不能直接删除目录文件
rm -r 递归删除目录下的所有文件,包括目录文件
rm -f 强制删除(不再询问)
rm -i 删除前逐—询问确认
rm -rf 递归并强制删除(非常强力,非常危险的指令,会导致网上所流传的笑话“删库跑路”)
whoami : 查看当前用户名
who:查看有哪些用户正在登录
我们可以使用tree指令来查看目录的结构树
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lq77XCP1-1649577253533)(https://s2.loli.net/2022/04/03/RBTUFbMojIhdJYD.png)]
1)如果我们之前没有安装tree指令,这个时候就会报错,需要我们安装一下
2)使用:yum install -y tree进行安装,这个时候系统会提示你需要用root权限(超级用户)来执行这条命令。
3)可以使用:su 切换到root用户,需要你输入root用户的密码(注意:输入密码期间,屏幕是不会显示任何东西的,输入好了后直接按回车键enter,如果密码正确就切换成功,密码错误需要重新输入)
4)再次使用 yum install -y tree安装即可
再次使用tree指令,结果如下:
建议安装好指令后,就将用户切换回普通用户,使用su username(用户名)直接切换,不需要输入密码(因为root的权限很高,从低权限切换到高权限需要密码,从高权限切换到低权限不需要密码)
使用rm -r 递归删除文件,可以加上 -i 来增加提示信息(y代表yes,n代表no)
rm -ir
有的时候提示信息太多,一一选择比较烦,我们可以使用
rm -f 直接进行操作,不要进行提示(有些文件删除会提示“是否真的要删除?”)
可以搭配 -r使用,rm -rf (谨慎使用)
cp — 将一个文件向另一个位置拷贝一份(copy),默认只能拷贝文件不能拷贝目录,要拷贝目录可以加上 -r
使用格式:cp [选项] 源文件或目录 目标文件或目录
cp -r 递归将一个目录及其内部的文件全部拷贝到指定位置
如果我们拷贝文件过去后不想叫原来的名称,想要换一个名称,怎么办呢?
在拷贝的时候给其命名
mv — 移动一个文件到另一个位置,也就是剪切(move)
这里的touch是创建一个文件,后续会详细讲解
mv 在剪切的时候也是可以改名的,常用mv来完成改名
当然也可以用rename来给文件改名
自动补全:输入前几个字母后,直接按一下tab键,就会自动补全
**快速切换到前面使用过的指令:**按向上(向下)方向键可以切换到之前(后面)使用过的指令
对于普通文件的命令:
touch — touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件(若文件存在,刷新文件的时间属性,若不存在,则创建新文件)
touch -d 使用指定的时间刷新时间属性,时间属性要用双引号“”引起来,不然touch会以为我们要创建文件
touch -d “2021-08-01 12:12:12” me.txt
文件的时间属性有三种:
1)最后一次访问
2)最后一次修改
3)最后一次状态
-a或–time=atime或–time=access或–time=use只更改存取时间
-m或–time=mtime或–time=modify只更改变动时间
使用 stat 文件名 可以查看文件的状态信息
Access:文件访问时间
Modify:文件修改时间
Change:文件改变时间(Modify和Change的区别?)
cat 文件名 查看/打印文件内容
cd etc/ 进入etc目录,这个目录下面有很多文件
我们可以将etc下的passwd拷贝到当前家目录下面
然后用cat将passwd中的内容打印出来
cat -n 文件名 可以打印行号
tac:反向打印(cat反过来写)
当文件内容很多的时候,我们需要翻页
more 文件名 分页显示文件内容 按回车enter向下走一行,按空格,向下滚动一页,按q退出显示,额外按b,可以向上滚动(但是这个查看的效果不好)
count=0; while [ $count -le 10000 ]; do echo "hello $count"; let count++; done > you.txt
more you.txt
脚本:生成多个字符串行
dmesg(英文全称:display message)命令用于显示开机信息
dmesg | more
ls | grep myfile :将ls显示的东西通过关系过滤,找到关键字为myfile,然后打印
less 文件 分页显示文件内容 方向向上键↑ 向上滚动 方向向下键↓ 向下滚动,按enter也可以向下滚动,按空格键 按页滚动 (less与more相比较,更推荐使用less)
匹配查找字符串: /string 向下匹配 ?string 向上匹配
head — 默认显示文件前10行内容
-n 指定显示n行数
head -3 passwd
tail — 默认显示文件末尾10行内容
-n 指定显示n行数
dmesg | head -59 | tail -10
echo 打印字符串 — 将数据写入到标准输出 — 显示器设备文件
什么是打印字符串?
有的同学会认为打印字符串就是把字符串显示到界面上,实际上数据打印实际上是操作系统控制,从键盘读取数据,再把数据再写入显示器,linux下一切皆文件,对显示器操作也就是对文件操作,将数据写入显示器文件
echo后面常跟 > 或 >>,这两个符号叫做重定向符号:进行数据流的重定向–文件重定向
将要操作的数据,不再写入原本文件,而是写入到新的文件中。
> 是覆盖重定向(也就是输出的内容会覆盖原来的内容,原来的内容会被清空)
>> 是追加重定向(输出的内容追加到原内容的后面,不会覆盖)
echo “hello linux” >> test.txt
| 管道符,可以用于打印指定行号的内容,先将前一部分内容送入管道,然后再从管道中取数据
|–连接两个命令,将前面命令的输出结果,当做后面命令的输出数据,让后面的命令进行处理
快速清空文件
> hello.txt 输出重定向
关机命令:
shutdown -h now 立即关机
压缩命令:
压缩命令的效果类似于windows下面的压缩
压缩:将一个文件按照一些压缩算法,将文件数据从多变少(让文件的大小变小了)
zip(windows常用)、gzip、bzip2(gzip、bzip2是linux下常用)
打包:将多个文件合成一个文件
解压:跟压缩相对应,将压缩的文件还原回去
解包:跟打包相对应,将打包的文件还原回去
ls /dev/ (dev–device设备,下面这些都是设备文件,root目录下的各个目录都有对应的功能)
zip指令
zip : zip格式的压缩命令,后缀名.zip
格式:zip 压缩后文件名称 进行压缩的文件名称
unzip: zip格式的解压命令
格式:unzip 进行解压的文件名称
ls -hl 或者 ls -lh(人性化显示)
gzip – linux下常用的压缩命令,后缀名.gz
gunzip – 对应的解压命令
linux下文件格式并不以后缀名区分,后缀名只是便于用户区分文件功能性质的功能
bzip2/bunzip2:bzip2格式的压缩解压缩,后缀名
liunx下的的命令信息查找工具 man 手册(可以查看命令信息,函数信息等等)
man 命令名称
按q退出man显示界面,回到原来的命令行位置
tar指令
tar linux下使用频率最高的打包解包工具,将多个文件打包成文一个文件,提供解包功能,并且打包解包的同时可以进行压缩解压
-c:建立一个压缩文件的参数指令(create的意思); 打包
-x︰解开一个压缩文件的参数指令! 解包
-t:查看tarfile里面的文件!
-z︰是否同时具有gzip的属性?亦即是否需要用gzip压缩?
-j︰是否同时具有bzip2的属性?亦即是否需要用bzip2压缩?
-v∶压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在f之后要立即接档名喔!不要再加参数!
通常各种选项会搭配使用
tar -czvf .tar.gz/.txt 打包
tar -xzvf ***.tar.gz 解包
tar -cvf 仅打包,不进行压缩
tar -xvf 不选定格式解压,系统会自动选择格式来解压
默认解压的文件会在当前所在目录下,不一定会在压缩包所在目录下
匹配查找命令:
grep – 从文件内容中匹配包含某个字符串的行,常用于某个文件中找函数(行过滤)
-i:忽略大小写的不同,所以大小写视为相同(ignore)
-n :顺便输出行号
-v︰反向选择,亦即显示出没有’搜寻字符串’内容的那一行
-R 递归 对指定目录下的文件递归逐个进行内容匹配
在终端中执行命令,单引号 ’ ’ 和双引号 " " 的区别是什么?
在大多数情况下,意义相同,都是为了括起一串数据,表示这是一个整体,单引号会消除括起数据中的特殊字符的特殊含义,双引号不会。
-E 并行查找(条件或)
which 用于查找指令所在路径的指令
alias 给指令起别名
find — 从指定目录中查找指定名称/大小/时间/类型
find -name
*表示进行模糊匹配,表示可以为任意字符串,如果不加,因为目录中此时没有test文件,所以会查找不到
find ./ -type d 通过文件类型找文件–(f -普通文件、d-目录文件、c-字符设备、b-块设备、p-管道文件、|-符号链接文件、s-套接字文件)
字符设备:最典型的就是键盘
符号链接文件:类似于快捷方式
套接字文件:网络通信文件
find ./ -size +1k 通过文件大小找文件,在当前路径下查找文件大小大于1k的文件
find ./ -size -1k 在当前路径下查找文件大小小于1k的文件
find ./ -mmin -10 通过文件时间找文件 – cmin、mmin、amin 单位为分钟,ctime、mtime、atime 单位为天
date —打印或设置系统时间
date +%Y-%m-%d +表示按照指定格式查看
%H:小时(O0…23)
%M:分钟(O0…59)
%S∶秒(O0…61)
%X:相当于%H:%M:%S
%d:日(01…31)
%m :月份(01…12)
%Y:完整年份(O000…9999)
%F:相当于%Y-%m-%d
时间->时间戳: date +%s
时间戳->时间: date -d@1508749502
su — 切换用户
su username(建议:平常尽量避免直接使用root用户,因为root用户是超级用户,可以在系统中为所欲为,因此很容易造成无法挽回的错误,比如在root用户时使用命令 rm -rf /*,会将root根目录下所有文件删除,系统就会崩溃,而普通用户在执行这条命令的时候,是没有权限的,删除不了)
tab —文件名自动补全,补不出来就代表没有这个文件
ctrl+c — 中断当前的操作
man指令(查看命令手册)
man printf /man man(如果我们有什么指令不了解,可以问一下linux系统中的这个男人man)
top指令:linux下查看cpu占用
netstat 查看网络连接状态
free 查看内存资源状态
df 查看磁盘分区资源状态
uname 用来获取电脑和操作系统的相关信息。
uname -a:详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
为什么在终端中输入一串字符串+回车,会被当做命令执行,完成某个功能?
操作系统内核(kernel)与用户之间的桥梁 — 命令行解释器(也被称为外壳)
规定:用户不能直接访问系统内核,直接访问内核太危险
shell会捕捉用户的标准输入,得到字符串,通过字符串判断用户想要干什么
用户不能直接访问内核,操作系统会提供一些接口,通过调用接口,完成内核某个特定功能的访问
像浏览目录这种功能会涉及到很多系统调用接口的使用,为了便于用户使用,大佬们使用系统调用接口封装了一些直接完成常用功能的程序。
用户输入ls字符串,shell捕捉到了之后,就会执行ls这个命令程序完成浏览目录的功能
类比:王婆、媒婆、村花如花的故事、班级小黑,喜欢班里小桃红,找小明搭桥
终端为什么能够执行命令,就是因为终端打开之后默认就运行了一个程序—shell–命令行解释程序
shell程序多种多样 bash、dash、csh
我们执行的命令都是一个个的程序,我们在终端输入什么字符串,shell就会捕捉到后,就会执行什么程序,完成对应的功能。
通过以上内容,我们要理解shell是什么?与用户、内核、终端之间的关系是什么?
shell是用户与内核的沟通桥梁,在linux下就是一个命令行解释器,在windows下就是图形化界面,早期的操作系统都是没有界面的,图形化界面的出现是为了更好的人机交互,但这种更好的“人机交互”实际上就是封装的很多底层内容,把用户与底层隔绝开来。让小白用户都能顺利的使用计算机。但是对于程序员来说,这并不是好事,在后续的学习中我们将更能体会这一点。
为什么要有权限?
如果每一个用户都能干任何事情,则秩序就会混乱
操作系统中的操作权限:
在linux系统中,将用户分为两类:
1)普通用户:只能进行受限制的操作
2)超级用户(root):可以进行任意的操作,不受限制
使用su 命令进行用户切换,目的就是为了获取这个用户的操作权限
root用户下:
useradd username 添加用户
userdel username 删除用户
上面所说的都是用户的权限,其实除了用户有权限之分外,linux下的文件也有权限
文件权限的认识:
文件访问对用户的分类:
①文件所有者-u(user) ②文件所属组-g(group) ③其他用户-o(other)
文件访问对操作的分类:
①是否可读-r(read) ②是否可写 -w(write)③是否可执行-x (execute)
三三为一组 分别对应到u,g,o
-:表示没有权限
rwx: 表示可读可写可执行
—: 表示不可读不可写不可执行
r-x 表示可读不可写可执行
在系统中权限的存储:使用二进制比特位图,二进制比特位只有0/1
rw-rw-rw- 二进制表示就是 110 110 110 占用空间更小,操作更加简便,为了便于表示和记忆,可以使用三个八进制数字分别表示三类用户的权限
rw-rw-rw- ----> 110 110 110 —> 6 6 6
再例如:
753 —> 111 101 011 —> rwx r-x -wx 所有者具有可读可写可执行权限,所属组具有可读不可写可执行权限,其他人具有不可读可写可执行权限(如果是目录的话,就是可浏览 -r,可在目录下删除创建文件 -w ,可进入-x)
总结:
权限符号 | 含义 | 八进制 | 二进制 |
---|---|---|---|
— | 不可读不可写不可执行 | 0 | 000 |
–x | 不可读不可写可执行 | 1 | 001 |
-w- | 不可读可写不可执行 | 2 | 010 |
-wx | 不可读可写可执行 | 3 | 011 |
r– | 可读不可写不可执行 | 4 | 100 |
r-x | 可读不可写可执行 | 5 | 101 |
rw- | 可读可写不可执行 | 6 | 110 |
rwx | 可读可写可执行 | 7 | 111 |
假设你有一台电脑,学校组织上机实验,你将自己的电脑提供给自己的小组使用
文件访问权限指令:
创建一个文件的默认权限
umask 查看或设置文件创建权限掩码,也就是说掩码决定了一个文件的创建的默认权限
umask -S 人性化显示
0002 是一个八进制的显示(最前面的0表示八进制显示格式)
002 是 000 000 010 跟
111 111 111(满权限)是在shell创建文件默认给定的权限
将111 111 111 - 000 000 010
错误计算方法:777 满权限 - 八进制掩码
正规计算方法:给定权限 & (~掩码) 比如:777 & (~002)
~002: 111 111 101 (二进制位取反)
777 & (~002): 111 111 111 & 111 111 101 = 111 111 101
也就是rwx rwx r-x(775)
创建好的文件的权限修改
chmod 777 you.txt :直接使用八进制数字进行修改,给you.txt文件设置 777 的权限
chmod a-x you.txt 所有用户减去(取消)-x(可执行)权限
chmod u+x you.txt 给所有者加上x权限
①用户表示符+/权限字符 | |
---|---|
+ | 向权限范围增加权限代号所表示的权限 |
- | 向权限范围取消权限代号所表示的权限 |
= | 向权限范围赋予权限代号所表示的权限 |
用户符号 | 含义 |
---|---|
u | 拥有者(user) |
g | 拥有者所属组(group) |
o | 其它用户(other) |
a | 所有用户(all) |
chown username filename 修改文件所有者(只能使用root修改)
chgrp groupname filename 修改文件或目录的所属组(只能使用root修改)
修改文件权限的粘滞位:
故事:小明和小黑
chmod +t filename
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
可执行权限:如果目录没有可执行权限,则无法cd到目录中
可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容.
可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在日录中删除文件
于是,问题来了~~
换句话来讲,就是只要用户具有目录的写权限,用户就可以删除国录中的文件,而不论这个用户是否有这个文件的写权限.
sudo – 为普通用户临时提升权限
visudo 查看可以使用sodu权限的用户信息
:90 行左右
Allow root to run any commands
我们可以yy复制一行,p粘贴,然后修改为自己的用户(跟vim修改一样,i进入insert模式,esc进入普通模式,:进入底行模式)
:wq 保存并退出
总结:sudo需要进行配置之后才能使用
配置过程:
1)su root 切换到管理员用户
2)visudo 打开sudo配置
3):90 跳转到文档第90行,在90行附近
4)yy复制root这一行,p粘贴
5)将用户名从root修改成自己的用户名称
6):wq 保存退出
sudo的使用演示: sudo yum install lrzsz
文件用户信息的修改
目录指令:ls、pwd、mkdir、rmdir、rm、cp、cd
文件指令: touch、cat、more、less、head、tail、mv
压缩指令: zip/unzip、gzip/gunzip、bzip2/bunzip2、tar -czvf-xzvf
查找指令: grep 、 find
系统指令: shutdown、reboot
常用操作: tab键-文件名自动补全、ctrl+c键-中断当前操作
其他指令: man、ifconfig、su、echo、bc、cal、date,whoami,which,whereis、uname、sl(小火车)
1)安装和登录命令:login、shutdown、halt、reboot、install.mount、umount、chsh、 exit、last
2)文件处理命令::file、mkdir、grep、dd、find、mv、ls、diff、cat、ln
3)系统管理相关命令::df、top、free、quota、at、lp,adduser groupadd、 kill、crontab
4)网络操作命令:ifconfig、ip、ping、netstat、telnet. ftpl route、rlogin、rcp、finger、mail、nslookup
5)系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who
6)其它命令: tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode
Shell认识
shell就是一个命令行解释器,也是一个程序,打开终端默认运行的就是shell程序,起到用户与系统内核之间的沟通桥梁shell捕捉用户的输入,执行对应的shell指令程序,访问内核,完成功能,将结果返回打印—用户不能直接访问内核
系统操作权限:系统中用户的分类-管理员与普通用户—指令:su-切换用户, sudo-文件操作权限:描述哪个用户可以对文件如何操作
文件操作对用户的分类:文件所有者-u、文件所属组-g、其他用户-o
文件访问操作的分类:可读-r、可写-w、可执行-x权限表示:
显示字符表示:rwxrwxr-- 、八进制数字表示:774
1)优先练习不熟悉的指令
2)再练习重要的,也就是经常要使用到的指令
3)最后练习不怎么使用,不重要的指令