Linux == Linux is not Unix.
前言
这是我学习Linux系统编程的第一篇笔记。
开源与闭源
1. 开源的操作系统中存在的问题能够被更快、更好的解决,使得开源的操作系统更加稳定、安全、高效。
2. 闭源的操作系统如果存在问题,那么其发现、解决问题的效率就更低下,而且解决问题的方案不一定优质。
Linux基础指令
Linux指令
1. Linux的基本操作,是通过Linux指令来进行的。
2. 图形界面需要消耗计算机内存资源,所以Linux不使用图形页面。
3. Linux指令可以单独使用,也可以组合使用。
4. Linux指令的本质就是可执行程序。
Linux文件
1. 在Linux中,文件分为普通文件和目录。
2. 目录又称为路径、文件夹。
3. 文件不仅仅包括文件内容,还包括文件属性,都属于文件数据。文件属性也占用内存空间。
4. Linux系统结构是一个多叉树结构。
5. Linux系统结构的最末端,要么是一个普通文件,要么是一个空目录。
6. 访问一个文件,前提是先找到它,才可以操作它。
7. 由于Linux系统结构是一个多叉树结构,所以到父节点的路径唯一,我们把这种定位方式叫做绝对路径。
8. 由于Linux系统结构是一个多叉树结构,所以到兄弟节点的路径唯一,我们把这种定位方式叫做相对路径。
9. 在日常操作时,一般使用相对路径,在配置文件时,一般使用绝对路径。
基础指令
用户指令
adduser user_name:新增加一个名为user_name的用户。
passwd user_name:给名为user_name的用户设置登入密码。
userdel user_name:删一个名为user_name的用户。
ls指令
ls:显示当前目录下的文件。
ls -l:显示当前目录下,更详细的文件属性信息。
ls -a:显示当前目录下,所有的文件,包括隐藏文件。
ls -l -a: 把 -l和 -a这两个选项组合传入,实现ls -l和ls -a的效果。
1. 第一部分:文件类型。其中以'd'开头的文件称为目录,以'-'开头的文件称为普通文件。
2. 第二部分:
3. 第三部分:文件的拥有者。
4. 第四部分:文件的所属组。
5. 第五部分:占用内存大小。
6. 第六部分:最后更新时间。
7. 第七部分:文件名。
1. 普通文件包括文本文件、二进制可执行文件、动静态库、视频、音频、图片等。
2. Linux系统中,文件类型与文件后缀无关。
3. 其中'.'和'..'是两个目录。其中'.'表示的是自身目录;'..'表示的是上一级目录。
4. 最开始的 / 称为根目录。
5. 在任何一个目录中,都存在'.'和'..'。
6. /home/xxx称之为普通用户xxx的家目录。
7. Linux中以'.'开头的是隐藏文件,删除文件时候,不会删除隐藏文件。所以可以在隐藏文件中存放一些比较重要的内容。
pwd指令
pwd:显示当前用户所处的路径。
whoami指令
whoami:显示当前用户的用户名。
mkdir指令
mkdir xxx:创建一个名为xxx的目录。
mkdir -p a/b/c/d:创建一个a/b/c/d的路径。
cd指令
cd xxx:进入一个名为xxx目录。
cd ~:切换到当前用户的家目录。
cd -:切换到最近的一次路径。
touch指令
touch xxx:创建一个名为xxx的普通文件。
rm指令
rm xxx:删除一个名为xxx的普通文件。
rm -r -f xxx:删除一个目录。
1. 删除文件时,一定要搞清楚相对路径和绝对路径,否则很可能删不掉。
2. 删除目录时,确保不要在需要删除目录中。
clear指令
clear:清屏。
tree指令
tree xxx:把xxx目录下的文件,以树形结构展现出来。
1. 如果出现刷屏,则可以ctrl+c打断。
2. 一般使用tree ~来以树形结构显示当前用户的家目录。
man指令
man n xxx:查询xxx作用。
man 1 xxx :在Linux指令中查询xxx。
man 2 xxx:在系统调用接口中查询xxx。
man 3 xxx:在C语言库中查询xxx。
1. 按q退出查询,按up和down进行文档翻页。
2. 若n没有给出,则默认为1。
echo指令
echo xxx :往显示器文件上写入xxx内容。
echo xxx > yyy:往yyy普通文件上写入xxx内容。
1. 如果yyy普通文件不存在,就先创建yyy普通文件,再写入xxx。
2. 如果yyy普通文件存在,就先清空,再写入xxx。
echo xxx >> yyy:往yyy普通文件上追加xxx内容。
1. 如果yyy普通文件不存在,就先创建yyy普通文件,再写入xxx。
2. 如果yyy普通文件存在,就先换行,再追加写入xxx。
cp指令
cp -r -f xxx yyy:把xxx文件拷贝到yyy目录下。
cat-tac指令
cat -n -s xxx:由第一行开始显示xxx普通文件内容。
tac -n -s xxx:由最后一行开始显示xxx普通文件内容。
which指令
which xxx:查询xxx可执行程序所在路径。
mv指令
mv xxx yyy:如果yyy目录存在,把xxx文件移动到yyy目录下。
mv xxx yyy:如果yyy目录不存在,则把xxx文件名改成yyy。
stat指令
stat xxx:查询xxx文件的时间信息。
1. Access: 最近一次访问时间。
2. Modify: 最近一次文件内容修改时间。
3. Change: 最近一次文件更新时间,包括文件内容和文件权限的更改。
ps指令
ps axj:查询所有进程。
kill指令
kill -9 xxxxx:中止进程ID为xxxxx的进程。
less指令
less xxx:一面一面的显示xxx文件的内容。
1. page_up和page_down实现上下翻找。
2. q 实现退出less程序。
3. / 实现查找字符串。
zip指令
zip -r xxx.zip yyy:把yyy文件打包压缩成xxx.zip,存放在当前目录。(-r:表示递归)
unzip xxx.zip -d zzz: 把xxx.zip压缩包解压到指定的zzz目录。
tar指令
tar xxx.tgz yyy:把yyy文件打包压缩成xxx.taz。
tar xxx.tgz: 把xxx.tgz压缩包解压。
1. -c:建立一个压缩文件的参数指令。
2. -x:解开一个压缩文件的参数指令。
3. -t:查看tarfile里面的文件。
4. -C:解压到指定目录。
file指令
file xxx:识别xxx的文件类型。
热键
1. Tab---具有命令补全和档案补齐的功能。2. ctrl+c---中止当前的程序。3. ctrl+d---键盘输入结束。4. ctrl+r---搜索历史指令。5. page_up和page_down实现上下翻阅历史命令。
shell命令
1. Linux本质上是一个操作系统,但是一般的用户不能直接使用它,而是需要通过外壳程序shell,来与Linux内核进行沟通。
2. shell的简单定义:命令行解释器。主要包含以下作用:
- 将使用者的命令翻译给核心处理。
- 将核心的处理结果翻译并呈现给使用者。
3. 对比windows GUI,我们操作windows也不是直接操作windows内核,而是通过图形接口,进行点击从而完成操作:比如进入D盘的操作,我们通常是双击D盘。
4. shell对于Linux系统来说,有相同的作用:用户输入的指令经由shell解析并传递给Linux内核执行,随后内核运行的结果再通过shell解析后反馈给用户。
Linux权限
用户与权限
1. Linux系统下有两种用户:超级用户、普通用户。
- 超级用户:可以在linux系统下做任何事情,不受限制。超级用户的命令提示符是''#''。
- 普通用户:在linux系统下做有限的事情。普通用户的命令提示符是''$''。
2. 权限=角色+事物属性。
- 角色:学生不能进入校长办公室。
- 事物属性:抖音上无法刷算法题。
su指令
su user_name:切换用户,切换成user_name用户。
su root:切换用户,切换成root用户。
1. 普通用户切换成其他用户,需要输入密码。
2. root用户切换成其他用户,不需要输入密码。
sudo指令
sudo xxx:在普通用户的账号中,使用超级用户权限进行操作xxx。
1. 超级用户把当前普通用户拉入白名单后,当前普通用户才能使用sudo指令。
2. 一般来说,普通用户安装软件时,需要用到超级权限,此时就需要使用sudo指令。
权限的查询与修改
1. Linux中的角色分成三类:
- u --->文件拥有者
- g --->文件所属组
- o --->other
- a --->all
2. Linux中的事物属性分成三类:
- r --->对普通文件来说->可读,对目录来说->查看目录下的文件信息
- w --->对普通文件来说->可写,对目录来说->在目录下新建、删除、修改文件
- x --->对普通文件来说->可执行,对目录来说->进入目录
3. Linux中的权限操作符分成三类:
- + --->添加权限
- - --->移除权限
- = --->覆盖原有权限
1. 第一部分的十个字符中:
- 1 表示文件类型
- 2、3、4表示拥有者权限
- 5、6、7表示所属组权限
- 8、9、10表示other权限
chmod指令
chmod (u+-=(rwx)) (g+-=(rwx)) (o+-=(rwx)) xxx:修改xxx文件的权限。
chmod 777(8进制) xxx:修改xxx文件的权限。
1. 只有文件的拥有者或者超级用户才能够修改文件的权限。
2. 文件的user角色、group角色、other角色,在和用户匹配时,从左向右依次匹配,并且只成功匹配一次。
3. r(-)w(-)x(-)可以转换成一个8进制数字,范围从0-7。
chown user_name xxx:把xxx文件的所有者权限给user_name用户。
chgrp user_name xxx:把xxx文件的所属组权限给user_name用户。
umask指令
umask 0xxx:修改文件的掩码,改成0xxx。
1. 在Linux系统中,新建的普通文件起始权限默认为666,新建的目录起始权限默认为777。
2. 如果像要修改最终权限的默认值,则需要使用umask指令进行修改。
3. 最终权限 = 起始权限 & (~umask) 。
共享目录
1. 在Linux多用户环境中,各个用户对于 /home 目录下的个人文件访问是相互独立且隔离的。
2. 如果普通用户想要共享一个文件,就不能建立在自己的家目录下,而需要在根目录 / 下面新建立一个共享目录。
3. 删除一个文件,与该文件的权限无关,与该文件所在目录的w权限有关。
粘滞位
chmod +t xxx:给xxx文件加上粘滞位。
1. 共享文件一般都需要设置粘滞位,防止有人恶意删除共享文件。
2. 共享文件加上粘滞位后,在共享文件中,只有共享文件的创建者才能删除该共享文件。
3. 由于共享文件一般是在根目录 / 下,所以在设置粘滞位时,要么用超级用户,要么用sudo指令提权。
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!