linux基础

引言

作为一名工程师,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服务来做时间同步。

  1. yum install ntp 这里是centos的方式,其他Linux发行版自己google一下
  2. systemctl start ntpd 启动服务
  3. 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 `