linux-base-end
Linux基础
1. Linux基础命令
命令本质是指定是Linux路径下的一个可执行程序 /usr/bin
command | function | additional |
---|---|---|
adduser username | 新建用户 | |
passwd username | 设置密码 | |
userdel -r username | 删除用户 | |
clear | 清空屏幕 | |
alt + Enter | 全屏/退出全屏 | |
pwd | 查看当前进程工作目录 | |
cd path | 更改工作目录 | |
cd ~ | 进入家目录 | |
cd - | 进入最近一次所处的路径 | |
mkdir director mkdir -p director | 创建目录 递归的创建目录 | |
rmdir director | 删除空目录 | |
rm -rf file /dir | 递归强制的删除指定目录或文件 | |
whoami | 显示当前用户 | |
ls ls -l ls -a ls -l -d | 显示当前目录下的文件名 显示当前目录下的文件名+文件属性 显示当前目录下的文件名 + 隐藏文件/目录 查看指定目录本身的属性 | 空文件也会占据磁盘空间(文件 = 文件属性 + 文件内容) 在linux中,以.开头的文件是隐藏文件 任何一个目录,默认系统都会自带.和…目录,代表当前目录和上级目录 |
touch filename | 新建一个普通文件 | touch一个存在的文件是更新该文件的创建时间 |
stat filename | 查看文件的详细属性 | ACM时间(Access、Modify、Change) Access:没有修改只是查看文件Access时间被修改 Modify:修改文件的内容Modify时间会更改 Change:修改文件的属性Change时间会更改 |
alias newName=command | 给命令起别名 | |
man command/systemcall/c | 用户在线手册 | 选项:1为系统命令,2为系统调用,3为c库 |
cp -r src-file dest-file | 拷贝文件或目录 | 拷贝目录需要携带 -r 选项 |
echo ‘xxx’ | 把后续内容打印到屏幕上 | |
echo’xxx’ > filename | 输出重定向 | > 不存在的文件:可以快速创建文件 > 存在的文件:可以快速清空文件 |
echo ‘xxx’ >> filename | 追加重定向 | |
cat filename | 显示指定文件名里面的内容 | cat默认是从键盘中读取内容反向打印到显示器上 |
cat < filename | 输入重定向 | Linux一切皆文件 终端的本质在linux系统里就是一个文件 /dev/pts/xxx |
mv src-file dest-file mv oldname newname | 剪切 重命名 | |
less filename | 查看文件内容 | 使用less打开文件后 输入/字符串 直接在文件中定位字符串内容 |
head -n filename | 查看文件开头前n行内容 | |
tail -n filename | 查看文件末尾后n行内容 | |
| | 管道 | 连接命令 |
date +%Y-%m-%d %H:%M:%S | 查看当前时间 | 时间戳:date +%s |
find path -name filename | 从指定路径下查找文件名 | |
grep -option string filename | 在文件中搜索特定的内容 | option:-i 忽略大小写 -n 输出行号 -v 反向选择 |
zip -option filename.zip filename | 压缩 | option:-r 递归打包 |
unzip file.zip -option | 解压缩 | option:-d path 解压到指定路径下 |
tar -c(v)zf filename.tgz filename | 压缩 | option:-v 可以看到压缩/解压的过程 |
tar -x(v)zf filename.tgz (-C path) | 解压缩 | option:-C path 解压到指定路径下 |
sz filename/zip | Linux文件 -> Windows | sudo apt-get install -y lrzsz |
rz | Windows文件 -> Linux(支持拖拽) | 若Windows是一个目录可以先压缩再使用rz命令 |
scp -option local-dir remote-user@remote-host:remote-dir | 远程传输(W -> L、L -> L) | option:-r 递归拷贝 -C 压缩传输 -P port 指定端口 |
uname -a | 查看当前系统的体系结构 | eg:3.10.0-957.21.3 主版本号.次版本号.修订次数-构建版本号.补丁 次版本号:偶数稳定版本,奇数测试版本 |
Tab/Tab * 2 | 命令补全/命令搜索 | |
ctrl + d | 退出当前用户 | |
ctrl + c | 终止当前进程 | |
tree dir | 查看当前目录结构 | sudo apt-get install -y tree |
su username | 切换用户 | su - 切换root用户路径发生变化/root su 切换root身份,相较于上次的用户路径不会发生变化 |
- Linux下区分文件不使用后缀
2. shell外壳程序
shell:命令行解释器
-
将使用者的命令翻译给核心(kernel)处理
-
同时,将核心的处理结果翻译给使用者
为什么要存在shell(外壳)程序?
-
方便用户操作:因为用户对操作系统内核并不是很了解,所以需要外壳程序快速帮助用户操作
-
保护内核:可能用户会有一些非法的指令或命令,外壳程序会直接拦截保护操作系统
-
外壳程序本质上是一个进程,命令会交给外壳程序中创建的子进程处理,这样即使命令出错或者崩溃也不会影响外壳程序
3. Linux权限
3.1 权限的理解
Linux存在2种用户:1.root用户(超级管理员);2.普通用户。
root用户为普通用户添加sudo(sudo用来进行短暂提权)指令权限 vim /ect/sudoers
。
# User privilege specification
username ALL=(ALL:ALL) ALL # ubantu系统
权限的本质是:能或不能做什么事情。
权限 = 角色 + 目标权限属性。
Linux角色:1.拥有者 2.所属组 3.other
Linux文件权限:1.读 2.写 3.可执行
3.2 识别文件权限
-rw-rw-r-- 1 root root
-
第1列:文件类型(Linux下不使用后缀区别文件类型)
-
-
普通文件(文本、可执行程序、库、图片、视频、压缩包) -
d
目录文件 -
c
字符文件(键盘、显示器、终端,输入的数据具有顺序性) -
b
块设备文件(磁盘) -
l
链接文件 -
p
管道文件 -
s
socket文件
-
-
第2列-第10列:三三为一组
-
前三个:拥有者权限位
-
中间三个:所属组权限位
-
后三个:other权限位
-
-
数字代表硬链接计数
-
第一个
root
代表具体的拥有者 -
第二个
root
代表具体的所属组(所属组可以自成一组)
3.3 操作权限
-
拥有者只能修改自己的文件权限。
-
确定权限信息时,系统会先确定用户是谁?拥有者,所属组,还是other?用户角色确定,只确定一次。假设一个文件的拥有者,所属组都是
ccc
,拥有者没有r
权限,所属组拥有r
权限,在读取该文件时,会读取失败权限被拒绝。
3.3.1 操作角色权限
系统默认不允许我们把文件给别人,必须提高权限
sudo chown username filename # 修改filename的拥有者为username
sudo chgrp username filename # 修改filename的所属组为username
sudo chown username1:username2 filename # 修改filename的拥有者为username1所属组为username2
3.3.2 操作文件权限1
chmod u+rwx filename # 为filename的拥有者添加读写可执行权限
chmod u-rwx filename # 为filename的拥有者删除读写可执行权限
chmod g+rwx filename # 为filename的所属组添加读写可执行权限
chmod g-rwx filename # 为filename的所属组删除读写可执行权限
chmod o+rwx filename # 为filename的other添加读写可执行权限
chmod o-rwx filename # 为filename的other删除读写可执行权限
chmod a+r filename # 为filename的拥有者、所属组、other都添加读权限
chmod u+rw,g+rw,o+r filename # 为filename的拥有者添加读写权限,所属组添加读写权限,other添加读全权限
chmod u=rw,g=rw,o=rw filename # 赋予对应的权限
3.3.3 操作文件权限2
rwx或—,rwx代表存在对应权限,—代表没有对应权限,是两态的;使用1代表存在权限,0代表没有权限。
rw- rw- r-- # 普通显示方式
110 110 100 # 转换为数字01
6 6 4 # 把二进制转换为八进制
chmod 664 filename = chmod 110 110 100 filename = chmod u+rw,g+rw,o+r filename
八进制表示表:
权限符号(读写执行) | 八进制 | 二进制 |
---|---|---|
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
— | 0 | 000 |
3.4 目录权限
-
x
权限:能否进入到目录。 -
r
权限:能否查看目录里内容。 -
w
权限:能否在目录中创建文件/删除文件。
3.5 umask权限掩码
修改umask:umask 0xxx
umask # 命令行输入umask查看权限掩码
0002 # 第一位数字忽略 ubuntu系统下的umask
普通文件的起始权限666
,目录文件的起始权限777
最终权限 = 起始权限 & (~umask)
凡是在umask中出现的权限,都不会在最终权限中出现。
3.6 粘滞位
场景:用户a和用户b需要在一个目录下共同读写一个文件,假设这个文件是用户a的,文件的权限为rw-rw-rw-
,只要进入该目录的用户都对该文件拥有读写权限。但是用户b可以删掉用户a的文件。
这种问题的原因是,在一个目录中删除文件与文件本身无关,而是与文件所处目录是否拥有w
权限有关!如果关闭对应目录的w
权限,这种做法会导致在该目录下不能创建/删除文件,本质上也还是没有解决问题。所以问题转变为:任意一个人都能在共享目录下新建,但是不能让非拥有者删除。
添加粘滞位:
chmod +t filename # 通常为给other添加 t是一种新的权限位,称为粘滞位