本文介绍了linux进行发展历程、组成和发型版本;
介绍了Linux的核心目录、用户管理和权限管理体系;
对linux命令进行系统的梳理和归纳。
Linux是一种自由和开放源代码的操作系统,它基于Unix操作系统
可以把linux系统比做一个鸡蛋
发行版本:通过内核+命令解释器+不同应用程序/桌面组成的.
我们一般选择 Ubuntu
或 CentOS
系统,
国产系统 国企一般选择华为的 麒麟系统 kylin v10
(它使基于Centos7
, 只是更新了内核)
学习linux 一般是使用VMware
安装虚拟机,安装过程如下
远程连接工具
Xshell 5.x
家庭、学校SecureCRT
Putty
功能简单mobaXterm
功能多Iterm2
SecureCRT
finalshell
ping
检查连通性
ping ip地址或域名
telnet ip或域名 端口
ip 命令
ip address
ip a
简写
远程连接后得到的信息
可以通过
hostnamectl set-hostname 新的主机名就行
修改主机名,下次重新登陆生效
命令行格式如下
command option arguments/parameter
option
同一个命令的不同的功能。执行命令的时候可以加上的条件。argument/parameter
命令处理的目标一般就把选项和参数统称为参数即可。不是所有的常用的命令都需要加上参数、选项。man
命令 查询帮助--help
查询精简的帮助info
帮助 超级详细帮助(一般不用)help
查询Linux内置命令(一般不用)Linux快捷键 | 作用 |
---|---|
ctrl + a | 光标移动到行首 |
ctrl + e | 光标移动到行尾 |
ctrl + u | 把光标所在位置到行首的内容剪切 |
ctrl + k | 把光标所在位置到行尾的内容剪切 |
ctrl + l | 清屏 相当于clear命令 |
ctrl + c | 取消当前的命令 |
option + page left option + page right | 光标往左/右跳过单词 |
tab | 用于自动补全命令或目录 |
window与linux快捷键的冲突
快捷键 | linux功能 | windows功能 |
---|---|---|
ctrl + s | 锁屏 | 保存 |
ctrl + q | 解锁 | |
ctrl + z | 让当前正在运行的命令,后台挂起。 | 撤销 |
shutdown
关机shutdown -c
取消关机shutdown -h
shutdown -h now
立刻关机shutdown -h 10
10分钟后关机halt
关机,关闭系统,需要手段切到电源poweroff
关机init 0
关机重启
shutdown -r
shutdown -r now
立即重启,shutdown -r 20
20分钟后重启reboot
init 6
Centos系统使用yum
管理软件包,Ubuntu使用apt
管理软件包,由于众所周知的问题,需要修改软件源
以Ubuntu 系统为例
sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak
sudo vi /etc/apt/sources.list
写入以下内容shdeb http://mirrors.tencentyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tencentyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.tencentyun.com/ubuntu/ focal-updates main restricted universe multiverse
#deb http://mirrors.tencentyun.com/ubuntu/ focal-proposed main restricted universe multiverse
#deb http://mirrors.tencentyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal-updates main restricted universe multiverse
#deb-src http://mirrors.tencentyun.com/ubuntu/ focal-proposed main restricted universe multiverse
#deb-src http://mirrors.tencentyun.com/ubuntu/ focal-backports main restricted universe multiverse
参考资料: linux更换软件源
根下的核心目录 | 说明 |
---|---|
/etc/ | 系统服务配置文件的目录,存放系统,服务的配置。 |
/home/ | 普通用户家目录 |
/root/ | 皇宫,root用户家目录。 |
/dev/ | device,设备文件目录,硬盘,光盘。 |
/tmp/ | temp临时目录,临时存放内容。 |
/boot/ | 系统启动与引导相关的文件存放出:存放引导系统启动程序,系统内核镜像。 |
/lib/ 、lib64 | library库文件(服务软件的依赖) .so 软件运行所需要的环境。 |
/lost+found | 系统宕机 临时保存数据位置 |
/mnt | mount tempoary 临时挂载点(磁盘)临时的入口 |
/opt | option 第三方软件 安装位置 |
/proc | process(进程)虚拟目录 存放的是内存中信息、进程、服务信息、内核信息 |
/sys | 虚拟目录 存放的是内存中信息、进程、服务信息 |
/usr | 存放用户安装软件 |
/var | 经常变换的数据 存放的位置 日志(服务日志) |
/var
下面的两个重要文件
- | 说明 | 建议 |
---|---|---|
/var/log/secure | 存放用户登录情况日志 | 分析是否有恶意破解情况. |
/var/log/todo | 通用各种服务的日志, 日志很多 | 分析服务,系统异常 |
/proc/
目录
这个目录下面存放的是系统的各种内存中进程信息,Linux内核配置,系统信息.
这是个虚拟目录,不会占用磁盘空间.
另外还有两个目录 Centos与Ubuntu有区别
Centos | Ubuntu | 说明 |
---|---|---|
/bin | /usr/bin | 二进制文件命令 |
/sbin | /usr/sbin | 超级命令,只有root可以使用 |
在linux中
路径的表现形式 相对路径、绝对路径
cd
进入到某个目录
cd
回到家目录pwd
print working directory
显示当前所在位置mkdir
创建目录
-p
创建多层目录-v
显示创建目录过程touch
创建文件ls
list 列表
-l
long以长格式显示(显示详细信息,比如文件时间,大小,所有者) 简写为ll
-t
time 按照修改时间排序.-r
reverse .... 逆序排序,一般-rt 一起用.-h
以人类可读形式显示大小ls -lrt /etc/
或 ll -rt /etc/
ls -lh /etc/
或 ll -rt /etc/
cp
copy 复制文件或目录
-a
all简单理解为复制所有详情: -dpr-r
递归复制,复制目录及目录的内容-p
复制的时候保持属性不变-d
可以复制软连接cp a.txt b.txt dirs
复制多个文件到某一目录 如果涉及目录 加-a
rm
remove 移除,删除文件或目录
-f
force 强制删除不提示,危险-r
递归删除,删除目录及目录的内容,没有需求不要加上-rmv
move移动或改名mv | 从哪里来 | 到哪里去 | |
---|---|---|---|
移动 | mv | 文件 目录 .... | 目标(目录) |
改名 | mv | 文件或目录 | 文件或目录 |
提示
touch
、mkdir
、mv
等命令可以操作多个文件或目录
echo
输出信息到屏幕输出有规律的内容
echo {0..10}
echo {a..z}
echo {a..e}
echo {01..10}
echo file{01 .. 10}.txt
cat
显示文件内容
-n
number 显示文件内容及行号cat aa.txt bb.txt >> /tmp/vim.log
案例:cat往文件写内容
shcat > ./cat.txt<<EOF
> 1
> 2
> EOF
ubuntu@myServer:~/linuxLearn$ cat ./cat.txt
1
2
ubuntu@myServer:~/linuxLearn$
~
家目录..
上级目录-
上次所在目录.
进入当前目录(未来一般与复制,移动一起用)|
管道 将左边的计算结果传递到最右边>
清空写入>>
追加写入{x..y}
生成序列x~y*
任意内容{}
没有解析*.log{1..10}
shubuntu@myServer:~$ echo 'text `whoami` $(pwd) {a..e}'
text `whoami` $(pwd) {a..e}
ubuntu@myServer:~$ echo "text `whoami` $(pwd) {a..e}"
text ubuntu /home/ubuntu {a..e}
ubuntu@myServer:~$ echo text `whoami` $(pwd) {a..e}
text ubuntu /home/ubuntu a b c d e
ubuntu@myServer:~$
重定向即改变输出的方向,先看一张图表示
重定向符号 | 含义 | 使用场景 |
---|---|---|
> 或 1> | 标准输出重定向: 先清空文件,然后写入 | 大部分情况下先清空的时候可以使用 创建文件. |
>> 或 1>> | 标准输出追加重定向: 直接写入到文件末尾 | 修改配置文件,表示追加的时候 |
2> | 标准错误输出重定向: 先清空文件,然后写入错误信息. | 较少单独用,一般用于获取所有输出 |
2>> | 标准错误追加输出重定向: 直接把错误写入到文件末尾. | 较少单独用,一般用于获取所有输出 |
aa.log 2>&1 &aa.log | 无论对错都把结果写入到文件中 | 比较常用,定时任务,脚本中常用 |
< 或 0< | 标准输入重定向. | 很少用,搭配某几个命令用xargs ,tr |
<< 或 0<< | 标准输入追加重定向. | 与cat搭配使用表示向文件 写入多行内容 |
同时记录正常输出与错误输出
echo aa >> true.log error.log
echo aa >> true_and_false.log 2>&1
echo aa &>> true_and_false.log
输入重定向符号与固定命令搭配
追加输出重定向
shcat >aa.txt<<EOF
I
love
linux
EOF
# EOF End of File文件结束的缩写.
#另外的一种cat的格式
cat <<EOF >aa.txt
I
love
linux
EOF
符号 | 含义 |
---|---|
* | 所有 , *.txt *.log '*ip*' |
{} | 输出序列,与echo ,touch ,mkdir 等命令搭配 |
[!] [^] | 取反 |
? | 任意一个字符 |
备份文件 cp aa.txt{,.bak}
等价于 cp aa.txt aa.txt.bak}
?
匹配任意一个字符
示例: 找出/bin目录下面命令,命令仅有2个字符组成
ls -l /bin/??
vi与vim的区别
G(shift+g)
gg
100gg
^(数字6)
$(数字4)
yy
dd
p
u(undo)
:set nu
或 :set number
:set nonu
n(next)
N
:%s#aa#bb#g
10yy
,到16行 按p:9,15copy16
:9,15move16
批量处理-了解
批量处理行:复制,删除
shift + v
进入到可视行模式(批量操作行)
按上下键,选择要处理的范围
如果删除按d
,如果复制按y
批量删除某部分内容,批量增加内容
案例1 批量删除文件开头的
按ctrl + v
,进入批量操作模式
选择要操作的区域
然后按d
,删除.
案例2 批量给文件开头增加内容
按ctrl + v
,进入批量操作模式
选择要操作的区域
选完后,按shift + i (I)
,进入编辑模式
写入内容
按esc
等待.
产生的原因
解决方案
由于linux命令比较琐碎,而我们登录服务器大部分时候都是查看日志,然后操作文件相关,所以我把这些命令都归类到了“日志操作”。
当然四剑客(awk
sed
grep
find
)也属于日志操作,但其功能过于复杂(强大)所以单独拎出来在下一段内容讲解,本段落介绍的命令内容相对简单易学。
注意
生产环境下查看日志千万不要使用cat
/vim
/vi
命令,有的日志可能要几G/几十G,如果使用cat
查看
head
显示文件头几行sh# head 默认是头10行
head -n5 /etc/passwd # 显示/etc/passwd 的前5行
# 也可以
head -n 5 /etc/passwd
head -5 /etc/passwd
tail
显示文件的后几行-n
num
指定行号-f
follow显示文件末尾的实时更新
less
按页显示文件内容一页一页翻看文件内容.也可以进行搜索
less选项与快捷方式 | 说明 |
---|---|
q | 退出 |
空格或f | 下一页 |
b | 上一页 (back) |
G | 最后1行 |
g | 第1行 |
99g | 到第99行 |
/内容 | 搜索,n继续向下搜索,N继续向上搜索 |
less -N
显示行号
more
按页显示文件内容,到达最后一行就退出.more
功能没less
多
统计文件中单词情况,大小,行数
通常我们只看行数 wc -l /etc/services
wc通常用来统计错误日志次数,比如统计ssh失败登陆的次数
grep 'Failed passward' /var/log/secure | wc -l
shubuntu@myServer:~$ which head tail less more less wc grep
/usr/bin/head
/usr/bin/tail
/usr/bin/less
/usr/bin/more
/usr/bin/less
/usr/bin/wc
/usr/bin/grep
ubuntu@myServer:~$ whereis head tail less more less wc grep
head: /usr/bin/head /usr/share/man/man1/head.1.gz
tail: /usr/bin/tail /usr/share/man/man1/tail.1.gz
less: /usr/bin/less /usr/share/man/man1/less.1.gz
more: /usr/bin/more /usr/share/man/man1/more.1.gz
less: /usr/bin/less /usr/share/man/man1/less.1.gz
wc: /usr/bin/wc /usr/share/man/man1/wc.1.gz
grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/share/info/grep.info.gz
ubuntu@myServer:~$
区别是whereis更详细会把 帮助文档 列出来
作用: 查找命令是否存在,不存在使用yum/apt 安装
我们对比下新旧的配置文件,查看修改了哪些内容。可以通过diff
,vimdiff
命令实现。
sort
排序uniq
去重sort 选项 | 说明 |
---|---|
-n | number把要排序的内容当做是数字,按照数字大小进行排序,默认是按照字符排序,默认升序排序(小大) |
-k | 指定某一列,根据某一列进行排序 |
-r | reverse逆序排序 |
-t | 指定分隔符,只能指定1个字符. 默认是空格 |
shubuntu@myServer:~/linuxLearn$ cat student.txt
zhangsan 18
lisi 12
wangwu 24
zhaoliu 30
sunqi 19
ubuntu@myServer:~/linuxLearn$ sort -nr -k2 student.txt
zhaoliu 30
wangwu 24
sunqi 19
zhangsan 18
lisi 12
ubuntu@myServer:~/linuxLearn$ # 等效于 sort -rnk2 student.txt
shubuntu@myServer:~/linuxLearn$ ls -l /etc/ | sort -rn -k5 | head -n5
-rw-r--r-- 1 root root 40714 Jan 20 2024 ld.so.cache
-rw-r--r-- 1 root root 24546 Oct 19 2019 mime.types
-rw-r--r-- 1 root root 14867 Feb 1 2019 ltrace.conf
-rw-r--r-- 1 root root 14464 Feb 17 2020 services
-rw-r--r-- 1 root root 10593 Apr 1 2022 sensors3.conf
ubuntu@myServer:~/linuxLearn$
shubuntu@myServer:~/linuxLearn$ cat /etc/passwd | head -n5
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
ubuntu@myServer:~/linuxLearn$ sort /etc/passwd -t ":" -rnk 3 | head -n5
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
lighthouse:x:1001:1001::/home/lighthouse:/bin/bash
ubuntu:x:1000:1000:ubuntu:/home/ubuntu:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
ubuntu@myServer:~/linuxLearn$
shubuntu@myServer:~/linuxLearn$ cat student2.txt
a 40 linux学院 20000
b 22 linux学院 30000
c 18 linux学院 21000
a6 8 linux学院 15000
a5 8 linux学院 25000
a4 7 linux学院 30000
a3 7 linux学院 4040
a2 7 linux学院 30300
a1 7 linux学院 50000
ubuntu@myServer:~/linuxLearn$ sort -rn -k2 -k4 student2.txt # 优先对第2列排序,如有重复,则对第4列排序
a 40 linux学院 20000
b 22 linux学院 30000
c 18 linux学院 21000
a5 8 linux学院 25000
a6 8 linux学院 15000
a1 7 linux学院 50000
a2 7 linux学院 30300
a4 7 linux学院 30000
a3 7 linux学院 4040
ubuntu@myServer:~/linuxLearn$
unique独一无二,它是sort的黄金搭档
去重(去除重复的留下唯一的)
shubuntu@myServer:~/linuxLearn$ cat uniq.txt
lida
lida
lida
lida
lida
smile
smile
smile
smile
blood
blood
blood
blood
zhangsan
wangwu
ubuntu@myServer:~/linuxLearn$ uniq -c uniq.txt
5 lida
4 smile
4 blood
1 zhangsan
1 wangwu
ubuntu@myServer:~/linuxLearn$
示例:
先用sort排序,然后用uniq统计次数,再用sort排序
sort uniq.txt |uniq -c |sort -rn
企业案例: 分析日志/var/log/secure
, 分析谁在攻击你
设置或查看系统的日期,时间命令
+
以xxxx格式显示日期与时间
%F
%Y-%m-%d
应用备份文件%w
周几%T
%H:%M:%S
时:分:秒-d
按照指定格式展示日期
date -d '20241111'
只展示日期date -d '1day'
明天date -d '-1day'
昨天shubuntu@myServer:~/linuxLearn$ date
Mon 11 Nov 2024 03:06:59 PM CST
ubuntu@myServer:~/linuxLearn$ date +"%F %H:%M:%S"
2024-11-11 15:07:00
ubuntu@myServer:~/linuxLearn$ date +"%F_%w"
2024-11-11_1
ubuntu@myServer:~/linuxLearn$
ubuntu@myServer:~/linuxLearn$ date -d '20241111'
Mon 11 Nov 2024 12:00:00 AM CST
ubuntu@myServer:~/linuxLearn$ date -d '1day'
Tue 12 Nov 2024 03:11:12 PM CST
ubuntu@myServer:~/linuxLearn$ date -d '-1day'
Sun 10 Nov 2024 03:11:18 PM CST
ubuntu@myServer:~/linuxLearn$
sh#修改系统时间,让系统时间不同步.
date -s '20221111'
#安装时间同步命令
sudo apt install ntpdate
#进行时间同步
ntpdate ntp1.aliyun.com
timedatectl status
timedatectl set-timezone Asia/Shanghai
shtouch backup-`date +%F`.txt
四剑客是指(awk
sed
grep
find
),也有种说法是三剑客(不包括老四find
)
在指定目录中查找文件
find命令选项
-type
什么类型的文件 f表示文件 d表示目录-name
-size
根据大小查找文件 +表示大于 -表示小于 +10k(小写K) +10M(大写) G-mtime
根据修改时间查找文件find /etc/ -type f -name 'hostname' /etc/hostname
在/etc/hostname
目录下找到'hostname'的文件find /etc/ -type f -name '*.conf'
出/etc/下面以.conf结尾的文件-name 'qq*'
-name '*a*'
find / -type f |grep 'aa8'
find /etc/ /tmp/ -type f -size +10k
在/etc/目录下面找出大于10kb的文件-mtime +7
找出7天之前的文件(修改时间是7天之前)-mtime -7
表示 最近7天内的文件find / -maxdepth 2 -type f -name "*.conf"
-maxdepth 1
选项位置第1个,指定find命令查找的最大深度
(层数),不加上就是所有层。
/aa/
目录下以.txt
结尾的文件并显示详细信息ls -lh $(find /aa/ -type f -name '*.txt')
find /aa/ -type f -name '*.txt' |xargs ls -lh
xargs
将管道数据变化为命令的参数find + -exec
find /aa/ -type f -name '*.txt' -exec ls -lh {} \;
找出/aa/
以.txt
结尾的文件并打包为/tmp/find.tar.gz
find /aa/ -type f -name '*.txt'|xargs tar zcf /tmp/etc-xargs.tar.gz
find /aa/ -type f -name '*.txt' -exec tar zcf /tmp/find-exec.tar.gz {} +;
exec命令的使用
命令1 -exec 命令2 {} \;
等价于 命令2 $(命令1)
命令1 -exec 命令2 {} +;
命令1有多个结果,统一变为命令2 的参数运行find
与 cp
这里也是套格式
$()
或 ` `.. -exec .. {} \;
.. xargs ..
但问题是 cp 命令 cp 文件或目录1 文件或目录1 ... 目标文件夹
使用 xargs
只会把参数放到尾部,这时我们要了解cp命令的-t
选项, 即cp -t 目标文件夹 文件或目录1 文件或目录1 ...
这样就能适配 xargs 了
过滤:在文件中或管道中进行查找,找出想要的内容
grep选项
-n
显示行号-v
排除,取反-i
过滤的时候忽略大小写示例
grep 'root' /etc/passwd
grep -n 'root' /etc/passwd
grep -i 'failed password' var/log/secure
grep -v nologin' /etc/passwd
grep
也可以对接管道
ps -ef |grep 'crond'
过滤出叫crond的进程sed是四剑客的老大,功能最为强大。
它的功能如下
sed 命令格式
sed 选项 条件动作 文件
这个“条件动作” 可以结尾 “找谁干啥”
与grep
命令相比
sed
可以指定行号sed -r
支持扩展正则示例:
sed -n '3p' /etc/passwd
-n
取消默认输出,不加会全部输出sed -n '2,5p' /etc/passwd
sed -n '2p;4p' /etc/passwd
sed -n '/root/p' /etc/passwd
grep 'root' /etc/passwd
sed -n '/^root/p' /etc/passwd
sed -r
选项sed -n '/从哪里来/ , /到哪里去/p' sed.txt
sed -n '/102/ , /104/p' sed.txt
sed -n '/10:00:00/ , /11:00:00/p' sed.txt
修改也叫替换
sed 's#找谁#替换成什么#g' sed.txt
解释一下这个命令
s
表示 substitute 替换g
表示 global 全局替换,这一行中把所有匹配到的内容都进行替换,否则只替换每一行第1个匹配的内容如果本身替换的内容有#
怎么办?
也可以写为 s@找谁@替换成什么@g
s/找谁/替换成什么/g
"找谁" 这里可以些正则表达式,如下
sed 's#[0-9]#-#g' sed.txt
去掉g看一下
sed可以针对一个文件进行先备份在修改保存
sed -i.bak 's#lisi#李四#g' sed.txt
注意:
-i
是会把修改写入源文件-i
紧接着的内容是备份文件名前面提到 sed的 s###g
中 "替换" 可以写正则表达式,后面就可以引用,这就 sed的反向引用(后向引用)
echo 12345678 | sed -r 's#(1)(.+)(8)#\1<\2>\3#g'
d
delete 删除sed命令删除功能按照行为单位进行.sed '3d' sed.txt
这里没有加 -i
加上的话就是真的删除了
删除/etc/ssh/sshd_config
带注释的内容
egrep -v '^$|#' /etc/ssh/sshd_config
使用sed命令
sed -r '/^$|#/d' /etc/ssh/sshd_config
用 awk也可以awk '! /^$|#/' /etc/ssh/sshd_config
sed 有三个选项,在指定的行号增加内容
-a
append 在指定行后面追加内容-i
insert 在指定行上面插入一行-c
replace 替换指定行的内容awk是四剑客的老大,功能最为强大
四剑客 | 特点 | 擅长 |
---|---|---|
find | 查找文件 | 与其他命令配合 |
grep/egrep | 过滤 | 过滤速度最快 |
sed | 过滤、取行、替换、删除 | 替换、修改文件内容、取行 |
awk | 过滤、取行、取列、统计计算、判断、循环... | 取行、取列、统计计算 |
awk是一个语言,叫单行脚本
awk的格式
awk 选项 '条件{动作}' /etc/passwd
awk命令的执行流程
/etc/passwd
的第1行awk 'NR==1' /etc/passwd
awk 'NR==1{print $0}' /etc/passwd
提示
NR
Number of Record 记录号,行号.==
表示等于, 这里也支持其他运算符>=
!=
&&
||
>
等{print $0}
输出整行内容 $0
表示当前行的内容. awk满足条件后默认的动作,输出这一行的内容./etc/passwd
第2行到第5行的内容awk 'NR==2, NR==5' /etc/passwd
/etc/passwd
文件中包含root
或nobody
的行awk '/root|nobody/' /etc/passwd
/etc/passwd
取出包含root的行到nobody的行awk '/root/,/nobody/' /etc/passwd
awk
取出ls -lh
的大小列和最后2列ls -lh /etc/hosts |awk '{print $5,$(NF-1),$NF}'
awk中取列的时候说明
$数字
,表示取列,$
1 第1列 $0
表示这一行.$NF
最后一列NF
Number of Field 每行有多少列$(NF-1)
取出倒数第2列,一般用于正向取发生变化或数字过大.awk输出与对齐
为了使数据结果好看可以使用\t
或 column -t
格式化结果
ll -h |awk '{print $5"\t"$9}'
ll -h |awk '{print $5,$9}'|column -t
/etc/passwd
中的第1列,第3列和最后一列与ls -l
的输出结果不同,/etc/passwd
中的内容以 :
分割, awk
取列的时候,默认是通过空白字符进行分割的,所以这里要通过 -F
的方式指定分割符
awk -F ':' '{print $1,$3,$NF}' /etc/passwd|column -t
ip a s eth0 |awk 'NR==3'|awk '{print $2}'|awk -F'/' '{print $1}'
ip a s eth0 | awk 'NR==3' |awk -F'[ /]+' '{print $3}'
ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'
stat /etc/hosts
取出权限部分, 即0644stat /etc/hosts | awk -F '[/(]' 'NR==4{print $2}'
free |awk 'NR==3 && $3>0 {print "异常系统开始占用 swap"}'
awk -F':' '$4 ~ /^[01]/' /etc/passwd
~
表示包含的意思!~
表示不包含awk进行统计有2类案例:
wc -l
统计次数.如果仅仅需要统计出现了多少次, 出现了多少个,可以使用wc -l
方式。
awk '{i=i+1} END{print i}' /etc/passwd
关于这个命令可以看一下前面awk的运行流程图
假设我们使用seq 10
生成了10个数,那么怎样使用awk求和?
seq 10 | awk '{i=i+$1}END{print i}'
注: 四剑客的强大之处在于使用正则表达式,实现更复杂的需求。linux的正则表达式与其他语言如JavaScript、Java 中的正则表达式没有多少区别,这里我偷懒,就不介绍正则表达式了。
ls -lhi
inode
索引节点,inode
号码类似于身份证号码inode
是一个空间,inode
号是空间的位置,类似于身份证,inode
空间存放:
inode
空间中存放的是文件属性信息、文件大小、修改、时间、权限、所有者inode
空间中存放block
的位置(指向文件实体的指针)block
中的)block
块(数据块): 存放数据用户访问查看aa.txt
文件内容的流程:
aa.txt
的时候,系统会找出他对应的inode
空间(根据inode
号码)。inode
空间后,确认用户,确认权限。inode
对应的 block
区域(数据)。inode
和block
特点
inode
索引节点,存放文件属性信息,block
位置。inode
,1个block
,一般文件都要有1个inode
。block
默认是4k。inode
,block
数量是在格式化的时候创建的。block
的使用会更快.block
还有剩余空间,无法给其他文件使用.block
如何查看
block
的使用情况命令:(平时说的磁盘空间) df -h
磁盘空间使用情况inode
的使用情况命令: df -i
:::tip{title=windows
与linux
文件类型区别}
windows
下面通过 扩展名的区分不同文件类型,如果扩展名修改则无法使用.Linux
下面扩展名仅仅用于展示,随意修改。但是推荐保留扩展名
:::-
文件 file,范围较广d
目录 directoryl
软连接,类似于windows快捷方式c
字符设备 char 特殊文件,不断输出,吸入b
块设备 block 硬盘s
套接字 socket文件p
管道文件可以通过file
命令查看详细文件类型
text
普通文件(文本文件),我们日常可以查看或直接修改,平时书写就是这种,脚本data
数据文件,需要用专用命令查看. 比如压缩包inode
号码相同了,这些 文件互为硬链接,很少使用如何创建
ln -s 源文件 软连接文件
ln 源文件 硬连接文件
异同
软连接还可以用来升级软件版本,比如升级nginx,这样即使改坏了,还可以通过删除重新创建软连接指向老版本
查看文件大小
ls -l -h /etc/hosts
ls -l -h /etc/
查看目录大小 du -sh /etc/
-h
人类可读形式显示大小.-s
不要显示目录中所有的子目录了,只显示汇总信息,不显示所有 查看指定目录所占的空间.(block)mtime
modify 修改时间,最常用atime
access 访问时间 (文件变化后,你第一次看的时间)ctime
change 文件属性的变化时间stat
查看文件的属性信息+文件名
tar
、gzip
、zip/unzip
合称打包三剑客
tar zcf 压缩包 被压缩的文件/目录 ....
tar tf /tmp/etc.tar.gz
tar xf /tmp/etc.tar.gz
tar xf 压缩包 -C 解压后的存放目录
tar 命令选项
v
verbose 显示过程(未来不加)c
create 创建包(打包),如果只放cf选项就是打包,不压缩。z
gzip tar命令创建包后,通过gzip压缩工具进行压缩。
z
使用gzip进行压缩,压缩包以.tar.gz结尾j
使用bzip2进行压缩,压缩包以.tar.bz2结尾J
使用xz进行压缩,压缩包以.tar.xz结尾f
file 指定压缩包,f选项放在这几个选项的最后使用tar
命令时, 建议使用相对路径打包
gzip aa.txt
gzip -d aa.txt.gz
tar无法处理.zip格式的压缩包
zip -r etc.zip /etc/
unzip etc.zip
我们使用打包解压命令的时候通常需要上传文件到服务器或从服务器下载文件,这就需要scp命令
scp 本地与服务器传送
scp local_file remote_username@remote_ip:remote_folder
# 将本地文件上传到服务器scp remote_username@remote_ip:remote_folder local_file
# 从服务器下载文件到本地可以通过 -P
选项 指定端口
scp -P 端口 local_file remote_username@remote_ip:remote_folder
别名就是给命令另起一个名称,方便使用。
如 ll
就是 ls -l color=auto
的别名
alias
#查看所有别名alias ll
#查看ll别名对应的命令unalias
取消别名应用场景
rm
就提示 rm is dangerous,pls use mv
alias rm='echo rm command is not found'
如果真的想删除文件
/bin/rm file
\rm file
alias
只对当前窗口,如果想永久生效,需修改配置文件
~/.bashrc
(当前用户生效)/etc/profile
(全局)增加内容alias rm='echo rm command is not found'
还需要执行命令
alias rm='echo rm command is not found'
让配置生效。
Linux中的用户是有一个标记,类似于身份号码一样的东西,叫做 UID和GID. 一般情况下UID和GID要唯一。
UID有一些特点
用户分类 | 分类方法 |
---|---|
root | uid是0 |
普通用户 | uid1000(Centos7之后)(原来的系统Centos5,Centos6 500), 手动创建, 无法对系统进行更改, 只能在当前家目录和/tmp目录有权限. |
虚拟用户 | uid <1000, 也叫傀儡用户 用于服务,进程运行使用的用户,无法直接使用 |
Linux下面每创建1个用户,一般会影响下面几个文件。
/etc/passwd
存放用户信息/etc/shadow
存放密码信息/etc/group
用户组信息/etc/gshadow
用户组密码信息,几乎不会给用户组设置密码。注:普通用户 只能操作 自己的家目录和 /tmp
目录
可以通过命令解释器区分用户类型
sh
bash
sbin/nologin
useradd
创建用户
-u
指定用户uid-s
指定命令解释器,默认是/bin/bash
-M
不创建家目录-s
和-M
通常一起使用 示例:sudo useradd -u 1315 -s /sbin/nologin -M mysql2
注: ubuntu系统推荐使用 adduser
,使用useradd
会有一些问题(不会创建家目录)
passwd
修改密码sudu -i
先切到root用户useradd staff1
passwd staff1
--stdin
非交互式设置密码
echo 1 |passwd --stdin staff
切换用户 su
switch user
su - staff1
切换到staff1用户-
-l
-login
是 su的选项userdel
userdel mysql
删除mysql用户userdel -r staff1
删除staff1用户包含家目录注: ubuntu系统使用deluser
命令
但是不建议使用userdel
命令,而是通过修改/etc/passwd
文件注释该用户,达到删除的效果。
usermod
示例
usermod -G root staff
让staff
用户属于staff
组和root
组usermod -G '' staff
让staff
用户从root
组删除id
查询用户的uid,gid,用户组信息,检查用户是否存在whoami
查询当前用户的名字w
查看当前登录的用户的信息last
用户的登录情况.lastlog
所有用户最近1次登录情况.groupadd
指定用户的uid和gid的时候可以用下groupadd
groupadd -g 1315 teacher
useradd -u 1315 -g zs -s /sbin/nologin -M teacher
补充一个故障案例 命令行 -bash-4.2$
这是因为用户家目录没有,用户家目录下面的配置文件没了 ~/.bashrc
、~/.bash_profile
文件
用户家目录是在创建用户的时候创建的,它是从/etc/skel
的模版复制而来
可以通过cp /etc/skel/.bash* ~
+ 重新登录解决
sudo概述: 用于给普通用户配置的命令,配置了sudo权限后普通可以以root权限运行命令。
Linux 系统 root权限太大,普通用户(如开发人员查日志)不能给root权限,我们需要针对普通用户授予一些命令的权限,如 cat
、head/tail
、more/less
、grep
本案例以ubuntu系统为例
adduser staff4
visudo
背后就是 vi /etc/sudoers
增加一行代码staff4 ALL=(ALL:ALL) /bin/cat, /bin/head, /bin/tail, /bin/grep
前面提过普通用户(staff4)只能查看编辑自身家目录和/tmp目录(不能查看修改root目录), 由于cat加白了,所以staff4能使用cat用户查看root目录下的文件,而more命令就不行。这就达到了权限控制
visudo
背后就是 vi /etc/sudoers
当然还有一些方案
其实他们两不用严格区分可以当成一回事
堡垒机产品
Jumpserver
, Teleport
堡垒机的作用是 屏蔽开发直接ssh连接服务器
而是通过ssh连接堡垒机,堡垒机上安装了Teleport
软件,并配置好账号,这样就可以间接操作服务器了
好处是开发者的任何才做都被记录下来(有回放功能)
这样就很大程度缓解因操作失误或黑客攻击带来的损失(就好比定位到bug原因,解决bug就快了)
关于Teleport
安装和使用有机会再说
rwx
3种权限控制系统与保护系统,组成9位权限.rwx
是什么?
r
read 是否可读w
write 是否可写x
execute 是否可执行(一般是命令,脚本)何为9位权限?
9位权限与用户关系
如何计算权限?
为了更加方便的使用权限,于是给每个权限字母设置了一个对应的数字,通过数字表示对应的权限。
sh-rw-rr. 1 root root 0 7月 18 08:53 aa.txt 420400400 6 4 4 aa.txt的权限是644 字母 数字 -rwxr-xr-x 755 -rrr 444 -rrw-rw- 466 数字 字母(文件) 644 -rw-rr 750 -rwxr-x 700 -rwx------ 600 -rw-------
chmod
命令: change mode 使用数字或字母形式修改权限。chown
命令: change owner 修改文件所有者,用户组。sh#修改aa.txt的权限为755.
chmod 755 aa.txt
#修改aa.txt所有者和用户组为staff4(存在)。
chown staff4.staff4 staff4.txt
chmod基于字符形式的权限设置
u
user 所有者g
group 用户组o
other 其他人a
、all
、ugo
同时修改案例
chmod u+rw aa.txt
给aa.txt
的文件所有者增加读和写权限chmod u=rx aa.txt
给aa.txt
的文件所有者设置读和执行权chmod u-w,g+r aa.txt
给aa.txt
的文件所有者删除写权限,用户组增加读权限案例:给/etc/rc.d/rc.local
(所有用户)增加执行权限。
shchmod u+x,g+x,o+x /etc/rc.d/rc.local
chmod ugo+x /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
# 以上四种方式等效
权限 | 文件 | 目录(教室) |
---|---|---|
r | 是否可以读取文件内容(r ) | 是否可以查看目录内容,需要x权限配合(rx ) |
w | 是否可以修改文件内容,一般还需要r 权限配合(rw ) | 是否可以在目录中创建,删除,重命名文件权限,需要x 权限配合 (rwx ) |
x | 是否可以执行文件,(命令,脚本),一般还需要r 权限配合(rwx 、rx ) | 是否可以进入目录,是否可以访问目录下文件属性(rx 、rwx ) |
这块内容建议读者亲自试试看, 你会发现一些意外。比如
vi
操作ll
一下注意:不要使用root
账号测试(root
是皇帝,无所不能)
目录小结论:
目录的r
权限需要x权限配合, 如果只有r
目录下文件的属性信息无法查看提示 "?"
对于目录x
权限表示是否能够进入目录权限,是否能够查看与修改目录下文件的属性信息权限。
目录的w
权限表示在目录下面创建,删除,重命名文件,只有w还不够,需要rx
配合
实际应用建议:如果要对某个目录拥有“写”权限,则授予目录rwx
即可。
分析权限拒绝的流程
日常操作 | 需要的权限 |
---|---|
查看文件的内容 | 文件要有r权限 |
编辑或修改文件内容 | 文件要有rw权限 |
执行脚本/命令 | 文件需要有rx权限 |
查看目录内容 | 目录要有rx权限 |
创建文件,删除文件 | 文件所在目录要有rwx权限 |
重命名 | 文件所在目录要有rwx权限 |
Linux系统通过umask命令控制文件和目录的默认权限.
linux系统默认权限的生成规则
文件默认: 666
目录默认: 777
举个例子
shumask为022时
文件默认权限:
666
- 022
-------
644
目录默认权限:
777
- 022
-------
755
umask 012
文件默认权限:
666
- 012
-------
654
+1
664
目录默认权限:
777
- 012
-------
765
单台机器
网站运行的时候是www用户,网站程序代码/app/code/www 目录,如何设置权限
sh#1 . /app/code/www 目录
文件和目录所有者 root root (查看权限)
文件和目录权限 644 755
#2. /app/code/www/upload 上传目录
文件和目录所有者 www www #如果不修改,则用户无法上传文件到upload目录下面(touch
upload/lidao.avi).
文件和目录权限 644 755
#3. 控制用户上传指定类型的文件
#4. 只能上传,不能执行
通过ls -l -d /bin/passwd /tmp /bin/ssh-agent /bin/ls
命令发现一些特殊的权限
其实在9位权限之前还有三位特殊的权限
/bin/passwd
文件在u的位置上有个s
或 S
对应的权限数字是4s
与 S
的区别 有执行权限是S
,没有执行权限是s
2./tmp/
目录的粘滞位 sticky 目录的o的位置上又个t 对应权限数字1
/tmp/
目录下的内容和创建文件,但是不能修改别人的文件除了ls -l
还可以通过stat
命令查看文件或目录权限
目的: 预防重要文件或命令被修改.
lsattr
查看这种特殊属性chatrr
修改这种特殊属性两个特殊属性
示例:
chatrr +a aa.sh
给 aa.sh
增加 a
属性lsattr aa.sh
查看 aa.sh
的特殊属性比如有个病毒入侵进来了,它会想方设法不被你删除,而且被你删除了还能重生
不被删除---对该文件添加 i 属性
重生 --- 修改ls命令,背后偷偷创建文件
本文作者:郭郭同学
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!