引言
作为一名工程师,linux服务器是无法绕过的一道门槛。这里简单的介绍并使用吧linux,希望能给刚入行的新人一些帮助,在就是作为自己的笔记。
1. 目录结构
区别于windows系统,linux中没有盘符的概念,只有一个根目录`/,所有的文件都在它的下面,以文件树形态组织。
在linux系统中,使用/
(windows使用\
)来表示路径之间的层级关系,例如:
#这里表示根目录下有一个root文件夹,root文件夹下面有个hello文件夹,hello文件夹下面有hello.tx文件
#这里表示出了,hello.txt文件所在的位置
/root/hello/hello.txt
2. linux命令的入门
2.1 什么是命令行、命令
命令行:一般表示Linux终端(Terminal),就是一个用户操作的界面(影视剧里黑客的敲大黑色框框),用于对linux系统发送命令
命令:即Linux程序,由linux提供的程序,可以类比为一些系统内置软件。
无论什么命令,下面是它的通用格式:
command [-options] [parameter]
command:必选,命令本身,可以类比播放音乐命令
[-options]:可选,命令的一些选项,可以通过选项控制命令的行为细节,可以类比为音量调节的按钮就是一个选项
[parameter]:可选,命令的参数,多数用于命令的指向目标,类比为使用什么设备播放音乐
案例:
ls -l /home/hello这条命令,ls是命令本身,-l是选项,表示以列表的形式,/home/hello是参数,表示显示这个目录下的内容
2.2 ls显示文件命令
语法:ls [-a -l -h] [linux路径]
-a:表示列出全部文件,包括隐藏文件
-l:表示以列表形式展示内容,并展示更多信息
-h:表示以更加人性化的方式显示文件大小,必须于-l一起使用
三个命令可以组合使用,例如: ls -al ls -alh
2.3 cd/pwd目录切换命令
cd /root
:表示切换到根目录下面的root目录中
cd
或者cd ~
:表示切换到/home目录下,~
这个世Esc键上的符号
pwd
:打印工作目录,其实就是打印出你当前所在的目录
2.4 相对路径和绝对路径
cd /home/hello
绝对路径写法,以根路径作为起点
cd hello
相对路径写法,以当前目录为起点
特殊路径符
.
:表示当前目录
..
:表示上一级目录
~
:表示HOME目录
2.5 mkdir创建新目录
语法:mkdir [-p] linux路径
- -p:可选,表示自动创建不存在的目录,适用于连续创建多层级目录
2.6 touch cat more
touch语法:touch linux路径
,案例:touch /home/hello.txt
,用于创建一个文件
cat语法:cat linu路径
,案例:cat /home/hello.txt
,用于查看文件内容,相对路径、绝对路径都可以
more语法:more linux路径
同样用于查看文件内容,与cat不同的是,more支持翻页,一般用于查看大文件,案例:more /home/hello.txt
2.7 cp复制文件或者文件夹
语法:cp [-r] 参数1 参数2
-r:可选,用于复制文件夹使用,表示递归
参数1:linux路径,表示被复制文件或者文件夹
参数2:linux路径,表示要复制去的地方
案例:
cp test1 test2 表示复制test1到test2,如果test2没有回创建一个
cp -r folder1 folder2 表示复制文件夹folder1内容到folder2中去
2.8 mv移动文件或者文件夹
语法:mv 参数1 参数2
参数1:被移动的文件或者文件夹
参数2:表示要移动到的地方,如果目标不存在,则修改名称为目标名称
案例:
mv /home/text.txt /home/ccc/aa.txt
2.9 rm删除文件或者文件夹
语法:rm [-r -f] 参数1 参数2 ... 参数n
- -f:表示force,强制删除(不会弹出确认信息)
- -r:同cp命令一样,用于删除文件夹
案例:
rm text.txt 表示删除当前目录下的text.txt文件
rm -r /home/user 表示删除home目录下user文件夹下所有内容
rm支持通配符
- *表示通配符,表示任意内容
- test*,表示匹配任意以test开头的内容
- *test,表示匹配任意以test结尾的内容
- *test*,表示匹配任意包含test的内容
2.10 which查看命令的存放位置
语法:which 命令
案例:
which cp 输出:/bin/cp
2.11 find按照文件名查找文件
语法:find 起始路径 -name "被查找的文件名"
案例:
find /etc -name “hello”
find支持通配符
- *表示通配符,表示任意内容
- test*,表示匹配任意以test开头的内容
- *test,表示匹配任意以test结尾的内容
- *test*,表示匹配任意包含test的内容
2.12 find按照文件大小查找文件
语法:find 起始路径 -size +|-n[kMG]
- +、-表示大于和小于
- n表示数字大小
- kMG表示大小单位,k(小写字母)表示KB,M表示MB,G表示GB
案例:
find ./Downloads -size +1G
2.13 grep关键字过滤文件行
语法:grep [-n] 关键字 文件路径
- -n:可选,表示在结果中显示匹配行的行号
- 关键字:表示过来的关键字,建议使用**””**包裹起来
- 文件路径:表示要过滤的内容的文件路径,可作为内容输入端
案例:
grep “hello” hello.txt 过滤出hello.txt中包含hello的行
2.14 wc统计文件的行数、单词数量等
语法:wc [-c -m -l -w] 文件路径
- -c:可选,统计bytes数量
- -m:可选,统计字符数量
- -l:可选,统计行数
- -w:可选,统计单词数量
案例:
wc -c xx.log
2.15 管道符 |
语法:|
管道符的含义是:将管道左边的命令的结果作为右边命令的输入
案例:
cat hello.txt | grep “hello” 将cat hello.txt的结果,放到grep “hello”的右边,grep命令参数右边原本是填一个路径,但是我们上面强调了也可以作为内容输入端,一般这种形式我们查日志比较常用。
2.16 echo
语法:echo 输出的内容
- 输出内容:建议使用**””**包围,如果使用`(反引号,esc按键上的)包裹,那么直接执行命令
案例:
echo “hello world” 输出hello world
echo `pwd` 等价于执行pwd命令
2.17 重定向符 >、>>
- >:一个表示将左侧命令的结果,覆盖写入到符号右侧指定的文件中
- >>:两个表示将左侧命令的结果,追加写入的符号右侧执行的文件中
案例:
echo “hellow ada” > hello.txt
echo “hellow ada” >> hello.txt
2.18 tail查看文件尾部内容,查看文件最新更改
语法:tail [-f -num] linux路径
- -f:表示持续追踪,表示不退出终端一直刷
- -num:表示查看尾部多少行,不写默认10
案例:
tail -f hello.txt
tail -20 hello.txt
3. linux用户
linux中有用户权限管理,一般分配给我们的都是普通用户,普通用户权限在home目录下权限不受限制。出了home目录只有只读和执行权限,无其他权限。因此,需要切换到root用户执行操作,执行su -root
然后输入密码即可。
3.1 切换用户
语法:su [-] 用户名
- -:可选,表示是否在切换用户的时候加载环境变了,建议带上
- 切换用户之后,使用exit退回上一个用户
3.2 sudo为普通命令授权root权限
一般我们不建议使用root命令,因为失误的话可能会造成严重后果。因此,使用sudo命令为一些我们需要执行的命令,零时提升到root权限去执行。
3.3 用户和用户组
linux中可以:
- 配置多个用户
- 配置多个用户组
- 用户可以加入多个用户组
linux中权限管控级别有2个,分别是:
- 针对用户的权限控制
- 针对用户组的权限控制
比如:对于一个文件,可以控制用户的权限,也可以控制用户组的权限
3.3.1 用户组
查看所有用户组
groups
创建用户组
groupadd 用户组名
删除用户组
groupdel 用户组名
3.3.2 用户
创建用户
user add [-g -d] 用户名
- -g:指定用户的组,不指定会创建同名用户组并加入,如果已存在同名用户组必须指定-g
- -d:指定用户HOME路径,不指定默认在:/HOME/用户名
删除用户
userdel [-r] 用户名
- -r:删除用户的home目录,不指定删除用户HOME保留
查看用户所属组
id [用户名]
- 用户名:被查看的用户,如果不提供查看自己
3.4 权限信息
我们通过ls -l可以查看权限信息,案例如下:
#这一列表示权限信息,d开头表示文件夹,-开头表示文件
#这列表示所属用户
#这列表示所属用户组
drwx------ 5 knight staff 160 6 28 00:01 Applications
drwxr-xr-x 4 knight staff 128 12 18 2022 Blogs
drwx------ 12 knight staff 384 7 16 00:16 Desktop
我们来解析下权限的信息:
drwxr-xr-x
第1列:-(文件)、d(目录)、l(软连接)
第2,3,4列:表示所属用户权限,r(读权限)w(写权限)x(执行权限),-(无权限)
第5,6,7列:表示所属用户组权限,r(读权限)w(写权限)x(执行权限),-(无权限)
第8,9,10列:表示其他用户权限,r(读权限)w(写权限)x(执行权限),-(无权限)
所以上面的权限解释为:
这是一个文件夹
所属用户对其权限是:读、写、执行的权限
所属用户组对其权限是:读、执行的权限
其他用户对其权限是:读、执行的权限
权限的数字序号
权限可以用3位数字表示,第一位数字表示用户权限,第二位数字表示用户组权限,第三位数字表示其他用户权限。
数字细节如下,r记为4,w记为2,x记为1:
- 0:无任何权限,即—
- 1:仅有x权限,即–x
- 2:仅有w权限,即-w-
- 3:有w和x权限,即-wx
- 4:仅有r权限,即r–
- 5:有r和x权限,即r-x
- 6:有r和w权限,即rw-
- 7:有全部权限,即rwx
所以751表示,rwx(7)r-x(5)–x(1),一般记得777就行
3.5 chmod修改权限信息
注意⚠️:只有文件、文件夹的所属用户或者root用户可以修改
语法:chmod [-R] 权限 文件或者文件夹
- -R:对文件夹内全部内容应用同样的操作
案例:
chmod u=rwx, g=rx, o=x hello.txt 将文件权限修改为:rwxr-x–x
其中:u代表user所属权限,g代表group组所属权限,o代表other其他用户权限
3.6 chown修改文件文件夹所属用户和用户组
注意⚠️:此命令只适合root用户执行
语法:chown [-R] [用户名][:][用户组名] 文件或文件夹
- -R:可选,表示对文件夹内全部内容应用相同规则
- 用户:可选,修改所属用户
- 用户组:可选,修改所属用户组
- :可选,用于分割用户用户组
案例:
chown root hello.txt
chown :root hello.txt
chown root:user_group hello.txt
chown -R root hello
4. systemctl命令
linux系统很多软件均支持使用systemctl命令控制软件启动、停止、开机自启。
能被systemctl管理的软件,一般我们称之为服务。
语法:systemctl start|stop|status|enable|disable 服务名
- start:启动
- stop:关闭
- status:查看状态
- enable:启用开机自启
- disable:关闭开机自启
5. 软连接
在系统中创建软链接,可以将文件或者文件夹链接到其他地方,只是一个指向并不是物理上的移动,可以看作windows的快捷方式。
语法:ln -s 参数1 参数2
- -s:创建软链接
- 参数1:被链接的文件或者文件夹
- 参数2:要链接去的目的地
案例:
ln -s /etc/yum.conf ~/yum.confg
6. 时间
linux中时间同步问题,一般使用ntp服务来做时间同步。
- yum install ntp 这里是centos的方式,其他Linux发行版自己google一下
- systemctl start ntpd 启动服务
- systemctl enable ntpd
7. ps进程管理
语法:ps [-e -f]
- -e:显示全部进程
- -f:格式化信息
一般来说,固定用法就是ps -ef列出全部进程全部信息,还可以加上grep过滤名称或者端口ps -ef | grep "java"
杀掉进程,一般使用kill -9 进程id号
8. top监控主机状态
语法:top
默认每5秒刷新一次,按ctl+c退出
9. 环境变量
直接执行env命令,即可查看环境变量
PATH环境变量,PATH中记录了系统执行任何命令的搜索路径,路径之间用**:**隔开,使用env |grep “PATH”可以得到环境变量。
linux系统中**$**符号可以用来取变量的值,所以,echo $PATH
也可以找到环境变量
设置环境变量(这个非常重要)
- 临时设置:
export 变量名=变量值
- 永久生效:
- 针对当前用户生效,配置
export 变量名=变量值
在当前用户的:~/.bashrc
文件中,并执行source ~/.bashrc
- 针对所有用户生效,配置
export 变量名=变量值
在系统的:/etc/profile
文件中,并执行source /etc/profile
`
- 针对当前用户生效,配置