文章目录
- 一、Linux下的基本指令
- 1.显示文件名 - ls
- 2.显示当前路径 - pwd
- 3.进入目录 - cd
- 4.创建普通文件 - touch
- 5.创建目录 - mkdir
- 6.删除 - rmdir 和 rm
- 7.手册 - man
- 8.拷贝 - cp
- 9.剪切 - mv
- 10.查看短文本 - cat
- 11.查看长文本 - more 和 less
- 12. > (输出重定向),>> (追加重定向),< (输入重定向)
- 13. 查看文本前 - head
- 14.查看文本后 - tail
- 15. | (管道)
- 16. 日期 - date
- 17.日历 - cal
- 18.目录中查找文件 - find -name (非常重要)
- 19.过滤 - grep
- 20.压缩/解压 - zip/unzip
- 21.压缩解压 - tar
- 22.计数器 - bc
- 23 查看系统 - uname
- 24. 重要热键
- 25.关机
- 二、shell命令以及运行原理
- 三、Linux权限概念
- 1.用户分类
- 2.文件相关的权限概念
- 3.权限操作
- 1、文件权限修改
- 2、更改拥有者,更改所属组
- 3、目录的权限
- 4、粘滞位
一、Linux下的基本指令
1.显示文件名 - ls
只显示文件名:
ls
显示文件的更多属性:
ls -l
问题:创建一个空文件,在磁盘中占据空间?
占空间,文件有属性数据,是数据就要被保存起来。
文件 = 文件内容+文件属性
文件操作无非两类:
1、对文件的内容操作
2、对文件的属性操作
选项 | 作用 |
---|---|
-a | 显示Linux系统中的隐藏文件。 |
-i | 输出文件的 i 节点的索引信息。 |
-n | 用数字的 UID,GID 代替名称。 |
-l | 列出文件详细信息 |
以 . 开头的文件称为隐藏文件。
在任意目录下,都存在两个隐藏文件:
.(当前路径)
.. (上级路径)
cd进入文件夹:
cd .. :即为回到上级目录
如果文件下有一个可执行文件a.out
./a.out :即为执行当前路径下的a.out程序
2.显示当前路径 - pwd
显示当前路径:
pwd
Linuxe的路径分隔符是 /
window s的路径分隔符是 \
Linuxe路径为只有 / 即为根目录
3.进入目录 - cd
Linux的目录结构本质是一颗多叉树
1、每一个节点,既可以是一个目录(再放目录或者普通文件,递归式的定义),也可以是一个普通文件
2、这颗多叉树的叶子节点,一定是一个普通文件后或者空目录
/home/whc/mygit/study/24_3_18 :从根目录开始,绝对路径
../23_10_16/makefile :相对于我当前所处的路径, 相对路径
如果是日常使用,我们推荐相对路径,简单。
如果是进行添加配置文件之类,推荐绝对路径,不会出错。
进入用户家目录:
cd ~
返回上级目录:
cd ..
返回最近访问目录:
cd -
4.创建普通文件 - touch
创建普通文件:
touch 文件名
5.创建目录 - mkdir
创建一个目录:
mkdir 目录名
创建一串目录:
mkdir -p 目录名1/目录名2
6.删除 - rmdir 和 rm
只能删除空目录:
rmdir 目录名
删普通文件:
rm 文件名
删除递归目录:
rm -r 目录名
强制删除:
rm -rf 文件名
-f:force,强力删除
7.手册 - man
安装man:
sudo yum install -y man-pages
查c函数:
man 3 函数名
查系统调用接口:
man 2 系统接口名
查普通命令:
man 1 命令
查如何使用man:
man man
8.拷贝 - cp
复制文件或目录并命名为name1:
cp 文件名 name1
cp -r 目录名 name2
如果在cp的时候,要拷贝的文件,是拷贝在当前路径下,两个文件的名称不能一样。如果拷贝到不同路径下,可以一样!
默认情况,cp不允许拷贝目录的如果需要,我们应该要携带选项 -r
选择 -f :force强制
9.剪切 - mv
类似剪切:
a.可以剪切普通文件
b.可以剪切目录
mv name 路径
类似重命名,可以对普通文件,也可以对目录文件:
mv oldname newname
10.查看短文本 - cat
查看短文本:
cat 文件名
11.查看长文本 - more 和 less
查看文本:
more 文件名
回车向下翻一行
支持前后翻查看文本:
less 文件名
按向上和向下,可以向上和向下翻。
12. > (输出重定向),>> (追加重定向),< (输入重定向)
echo : 将后面的文本写入显示器
将本来应该写入显示器的内容,写入到文件中,输出重定向会清空原始文件的内容,进行重新写入:
echo "hello" > hello.txt
同上,不会清空原始内容,而是在原始文件的结尾进行新增式的写入。
echo "world" >> hello.txt
cat默认从键盘(标准输入)读取
输入重定向,把本来应该从键盘文件中读取数据的方式,改成从指定的文件中读取:
cat < hello.txt
13. 查看文本前 - head
查看文本前10行:
head 文件名
查看文本前n行:
head -n<行数> 文件名
14.查看文本后 - tail
查看文本后10行
tail 文件名
查看文本后n行
tail -n<行数> 文件名
15. | (管道)
如果要查看文本的第30000到30020行:
我们可以先查看前30020行输出重定向到一个文件里,再查看这个文件的后20行就可以。
但这个文件就是临时文件,是为了得到结果,而临时创建的。
管道就可以解决创建临时文件,直接将上一个命令结果,传给下一个命令。可以这么写:
head -30000 文件名 | tail -21
管道的作用:
级联多个命令,来完成流水线式的数据处理工作
16. 日期 - date
指定格式显示时间:
使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
标记 | 时间 |
---|---|
%H | 小时 |
%M | 分钟 |
%S | 秒 |
%X | 相当于%H:%M:%S |
%d | 日 |
%m | 月份 |
%Y | 完整年份 |
%F | 相当于%Y-%m-%d |
date +%Y-%m-%d_%H:%M:%S
时间戳:
获取时间戳:
date +%s
时间戳转时间:
date -d@时间戳
时间戳转为特定格式的时间:
date +%Y-%m-%d_%H:%M:%S -d@时间戳
程序中获取时间:
使用的函数为time
#include<stdio.h>#include<time.h>int main(){printf("%lu\n",(unsigned long)time(NULL));return 0; }
17.日历 - cal
显示2024年日历:
cal -2024
显示系统前一个月,当前月,下一个月的日历:
cal -3
18.目录中查找文件 - find -name (非常重要)
在指定目录下查找指定名称的文件:
find 路径 -name 文件名
19.过滤 - grep
grep:行文本过滤工具
找出含有搜索字符串的每一行:
grep '搜索字符串' 文件名
找出含搜索字符串(忽略大小写)的每一行:
grep -i '搜索字符串' 文件名
具有关键字的文本行,去掉,保留没有匹配关键字的行:
grep -v '搜索字符串' 文件名
对查找的结果带上行号:
grep -n '搜索字符串' 文件名
20.压缩/解压 - zip/unzip
把目录及里面内容全部压缩:
zip -r 形成的压缩包名.zip 目录
解压到当前路径:
unzip 压缩包
解压到指定路径:
unzip 压缩包 -d 路径
为什么要打包压缩?
- 为了节约空间
- 我们下下来的软件是压缩包,曾经提供软件的人,上传的是压缩包!写好的软件,不是只有一个文件,压缩后成为一个文件,方便网络传输,进行各种部署。
21.压缩解压 - tar
c:创建 ,z:压缩 ,f:压缩包名
打包压缩线程压缩包:
tar czf 压缩包名.tgz 文件名
完整后缀是 .tar.gz
可以简写为 .tgz
x:解 ,z:解压,f:压缩包名
tar xzf 压缩包
扩展了解即可:
选项 | 作用 |
---|---|
-v | 压缩的过程中显示文件 |
-z | 是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩 |
-C | 解压到指定目录 |
- Linux下是否几乎支持所有种类的压缩包?
是 - 为什么Linux下会支持?
Linux面对的平台非常多 - 遇到了不了解的压缩包种类,该怎么办?
test.xxx 网上搜索: centos.xxx后缀如何解压
22.计数器 - bc
Linux下的计数器:
bc
23 查看系统 - uname
看系统细节:
依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
uname -a
只看内核版本:
uname -r
24. 重要热键
Tab: 命令自动补齐
Ctrl+c:终止失控程序
ctrl+r :搜索历史命令
Ctrl+d:快速退出账号
查看历史命令:
history
25.关机
云服务是不需要关机的,永远不关机。
shutdown -h
选项 | 作用 |
---|---|
-h | 将系统的服务停掉后,立即关机 |
-r | 在将系统的服务停掉之后就重新启动 |
-t sec | -t后面加秒数,亦即『过几秒后关机』的意思 |
二、shell命令以及运行原理
shell :外壳程序
传递用户指令,交给OS(操作系统),OS执行完毕,结果交给shell,shell再交给用户,称为命令行解释器,Linux中,外壳就是命令行解释器,windows下,外壳指的就是图形化界面。
作用:
- 将使用者的命令翻译给核心(kernel)处理
- 同时将核心处理结果翻译给使用者
外壳存在的最大意义:
shell降低操作OS的成本
外壳保护OS系统
contos7常用的命令解释器(shell),叫做bash。
shell vs bash
shell是所有外壳的统称
bash是具体一个解释器
三、Linux权限概念
1.用户分类
普通用户:权限受管控的
root: root只有一个,可以在linux系统下做任何事,不受制约
确认我是谁:
whoami
切换root用户,输入root的密码:
su -
在刚刚切换到root后,切回普通用户,登出:
logout
切换用户:
su -l 用户名
2.文件相关的权限概念
ls -l
第一列的第一个字符,叫做文件类型!
Linux系统不是以文件名后缀,区分文件类型的,而是通过ls -l显示的第一列第一个字符区分文件类型的!
文件类型:
-:普通文件,文本,源代码,可执行程序,第三方动静态库等
d:目录文件
l :链接文件
p :管道文件
b : 块设备文件,磁盘
c :字符设备文件
大部分文件都是普通文件和目录文件。
问题:test.c的文件改名为test.txt再用gcc编译可以吗?
不可以,会告诉我们当前文件不识别。Linux不是不以后缀区分文件类型,但是gcc不等于Linux,而是Linux上的一个编译器软件!
什么是权限?
- 约束人的(对人进行分类)
- 需要有对应的事物具有特定的属性
在Linux上,就是对文件的权限:
这个文件谁能“访问”
这个文件谁不能“访问”
对应的文件应该具备的某种属性:r,w,x
权限 = 人 + 事物属性
所以权限的概念以及操作,都是围绕着人和文件属性展开的!
Linux系统中,人分三类:
1、文件的拥有者, owner
2、文件的所属组, grouper
3、文件的其他用户, other
Linux系统中,文件权限属性,分:
1、r
2、w
3、 x(可执行)
文件拥有者如下图:
文件所属组如下图:
拥有者权限,所属组权限,other的权限:
每一组,对应的权限的位置含义是确定的:
r–
-w-
–x
是否可读,有就是r,没有就是-,其他一样。
请问:如果描述test.c这个文件的权限了?
拥有者的权限:可读可写
所属组的权限:可读可写
其他人的权限:只能读
3.权限操作
1、文件权限修改
那么文件的权限操作,应该涉及到几方面?
1、修改文件的属性
2、修改人
去掉拥有者读权限:
chmod u-r 文件名
给拥有者添加读可执行权限:
chmod u+rx 文件名
给所属组添加r权限:
chmod g+r 文件名
给其他用户添加读写可执行:
chmod o+rwx 文件名
去掉拥有者写可执行权限,去掉所属组写权限,去掉其他用户所有权限:
chmod u-rx,g-w,o-rwx 文件名
给所有人只有读权限:
chmod a=r 文件名
修改权限的第二种方法(8进制方案):
对于权限:
_ _ _
r w x
有或者无(两态)
1 1 1 看成8进制 ->7
5->101->r _ x
三个8进制数就能代表三类人的权限:
777 即为给拥有者,所属组,其他成员,全部权限
开放文件全部权限:
chmod 777 文件名
给所有人写权限:
chmod 111 文件名
个拥有者读和可执行权限,其他不给权限
chmod 500 文件名
2、更改拥有者,更改所属组
更改拥有者为用户1:
sudo chown 用户1 文件名
sudo:提升权限,以root的身份去运行程序chown
更改所属组为用户2:
sudo chgrp 用户2 文件名
更改拥有者和所属组全部都改为用户3:
sudo chown 用户3:用户3 文件名
3、目录的权限
如果想进入一个目录,需要什么权限?(重点)
需要目录的x权限!
如果目录没有r权限,允许进入,允许在该目录下创建(写入)一个文件,不允许查看。
如果目录没有w权限,允许进入,允许在该目录下查看文件列表,但是不允许创建文件。
如果同时没有rw权限,允许进入,但不允许创建和查看目录下的文件列表(注意:不是文件内容!!!文件的内容,是否可以查看,由文件自己的权限决定!!!)
为何创建目录的默认权限是这个样子的:775,为何创建的普通文件的默认权限是664(不同的权限可能有差异)
1、默认目录的其实权限:777
2、默认普通文件的权限:666
3、默认权限!=最终权限
4、最终权限 = 默认权限& (~umask)
权限掩码:
umask
凡是在权限掩码中出现的权限都不应该在最终权限中出现!
目录权限:
000 000 010 :002
111 111 111 :777
111 111 101 :775
普通文件权限:
000 000 011 :003
110 110 110 :666
110 110 100 :664
设置umask为000:
umask 000
4、粘滞位
Linux下可以存在一些目录,拥有者和所属组是root,其他人允许以other的身份在该目录下进行文件的创建,读取,删除,修改等!
在一个共享目录下,用户A可以不让别人写和读,但别人可以删除。
如果我还想在共享目录下,形成临时文件但是,不允许除了我之外的人删除,就需要给共享的<目录>加上粘滞位!
给目录添加粘滞位:
chmod +t 文件名
在添加粘滞位的目录下,只能自己删自己的文件。(对root无效)
file:辨别文件类型
file 文件名