【笔记】Linux基础

1.文件和目录的操作

1.1当前工作目录

1.1.1 pwd:返回当前所在目录


1.1.2 cd(change dir):改变当前工作目录

1.2绝对路径和相对路径

1.2.1 绝对路径:

从根开始的路径,沿着绝对路径,沿着目录层级一直到达所期望的路径


1.2.2 相对路径:

相对于当前工作目录的路径
    . 当前目录
    . . 当前目录的父目录:
        cd .. :返回到当前目录的上一层目录
        ./b.txt :在当前目录下找b.txt这个文件,如果当前目录下没有这个文件就会自动new file一个
        ../b.txt :在当前目录的父目录下找b.txt这个文件

1.3 操作目录和文件

1.3.1 查看

1)ls (list的缩写)+ 路径(缺省为当前路径):查看目录下所有的文件

  •  -l  :  查看目录下所有的文件(不包括隐藏文件)的详细信息
  • -al :查看目录下所有的文件(包括隐藏文件)的详细信息

ls显示不同类型的文件会显示不同的颜色:

白色:表示普通文件
蓝色:表示目录
绿色:表示可执行文件
红色:表示压缩文件
浅蓝色:链接文件
红色闪烁:表示链接的文件有问题
黄色:表示设备文件
灰色:表示其他文件

2)cat + 文本文件名:直接将文件的内容返回到终端界面(方便查看较小文件,不用每次都要进入文件)

就像这样,我在practice.txt写了一个非常简易的c++代码,通过cat命令可以很方便的查看 

1.3.2 增添

1)mkdir + 目录:创建目录(也就是文件夹)

  •   -p :创建多层级目录

1.3.3 删除 

1) rm [选项] [文件]:删除文件/目录

  •  -f:硬性删除   
  •  -r:表明删除的是一个目录
  •  -rf:  硬性删除目录

rm testfile        删除文件testfile

rm -r testfile        删除目录testfile

1.3.4 通配符

1)*:通配符,可指代任意多个字段
2):只能匹配一个字符
3)[abcd] : 只能匹配括号内的任意一个字符

【例】rm -f file*.jpg :
     1)file和.jpg要求精确匹配,不匹配的不予考虑
     2)满足精确匹配后剩余的文件如果可以用通配符替代即为符合要求的文件
     3)通过其他指令对选中文件批量操作,该指令就可实现批量删除
  很多命令都可结合通配符使用,比如rm,ls...

1.3.5 复制

1)cp + 被拷贝文件名 + 新文件名:将原来文件的内容拷贝下来并放到新建的文件中

【灵活运用】——结合路径操作:cp a.py ../b.py:将a.py的内容拷贝到[父目录]新建的b.py中

1.3.6 移动

mv p1 p2 :
p1,p2可是文件名或目录名,组合不同会有不同的含义:
1)mv file dict 表示将file移动到dict目录中
2)mv file1 file2 表示将file1重命名为file2
3)mv dict1 dict2:

  •  若dict2在给定路径下存在意为将dict1移动到dict2里面去(dict1变为dict2的子目录)
  •  若dict2在给定路径下不存在意为将dict1重命名为dict2

1.3.7 在文件中查找字符串

grep + 想查找字符串 + 文本文件:

  • -n : 显示行号
  • -A + 1,2,3... :显示字符串所在行以及后面的1,2,3...行(A是after的意思)
  • -B + 1,2,3... : 显示字符串所在行以及前面的1,2,3...行(B是before的意思)
  • -C + 1,2,3... : 显示字符串所在行以及前后的1,2,3...行

用前面用的practice.txt演示一下,这里是要查找practice.txt中cout字符串所在的行,通过不同指令会有不同的显示效果。 今后我们可以借助这种手段很方便的定位到比如运行日志中的”error“。

2.用户和用户组

2.1root用户

root:系统管理员,有系统中的最高权限。

root用户可以为不同用户分配不同的权限,从而控制他们对系统资源的访问。

2.1.1创建用户:

useradd xxx:创建一个用户的同时会缺省创建一个与用户同名的用户组(因为一个用户一定要对应一个用户组)

useradd -g yyy xxx:如果不想缺省创建可以指定把xxx加入到已有的yyy组中。

· 用户的信息储存在 /etc/passwd文件 中,你可以通过cat指令直接在终端查看该文件:

如图所示:

  1. 每次你创建完一个用户后,linux会自动在/etc/passwd文件末尾添加上该条用户信息。
  2. /etc/passwd文件每行对应一个用户的信息。 一行中的字段用":“隔开。各个字段的含义已注释在图片中。

home目录:用户登陆后就会进入的目录

也可通过 ls /home来查看用户(因为每个用户都挂接在了home目录下)

2.1.2设置密码 

1)设置初始密码:passwd xxx

创建好用户后,请务必记得为它设定好密码,如果密码太过简单,Linux会提示你这是个bad password,但你可以强制设定这个密码。

2)修改密码 :同样也是passwd  xxx

root用户有权重设任何用户的密码,普通用户若要更改密码直接输入passwd指令即可,因为普通用户只有权更改自己的密码,无权限更改他人的密码,因此不会出现歧义。

2.1.3 删除用户

userdel xxx

2.1.4 添加用户组

groupadd xxx

· 用户组的信息储存在/etc/group文件中,groupadd会在该文件末尾添加一行信息。

2.1.5 删除用户组

groupdel xxx

2.1.6 改变用户所属组

usermod -g g user : 把user用户添加到g组中

usermod -G g1  user:为用户添加附加组

【示例】

leo用户原本属于root组(注:可通过id命令来便捷的查看用户的一些基本信息)

 现在想让leo同时还属于family组,可通过-G这个option来为leo添加附加组

 看!leo即属于root组又属于family组了!

2.2 用户间切换

su - xxx

- : 表示要重新创建用户环境。如果不加 - 就会在原用户的环境(主要是环境变量)下,切换到新用户。一般来说 - 都是要加上的,当然不加上linux也可以正常执行。

3.文件的属性和权限

3.1文件的属性和权限的概念

输入ls -al,查看文件的详细信息,借此了解文件的属性和权限(如图):

此外,我们再深入了解一下第一栏的具体含义:

其中:

r :读权限-》对文件:读取文件内容的权限        -》对目录:查看目录内容的权限

w : 写权限  -》对文件:编辑文件的权限      -》对目录 : 在该目录中创建和删除文件的权限

x :执行权限  -》 对文件:用户可以运行这个可执行文件   -》 对目录 : 用户可cd进入这个目录

3.2 修改文件属性和权限

只有root用户和文件的所有者才有权限修改文件的访问权限

3.2.1 chgrp:修改文件所属用户组

如图,python这个目录原本是属于root用户组的,chgrp后属于family组了。

 但其实有个问题,我们进入到python目录下可以看到,虽然python目录所属用户组改变了,但它的子目录所属组还和之前一样,这在现实使用中未必符合人们的预期,因为这不过是给了个空壳子,里面的内容还是我的,给了但没完全给。

 可使用-R指令来解决这个问题:

-R:进行递归修改,亦即连同子目录下的所有文件,目录都更新成为这个用户组之意,常常用在修改某一目录内所有文件之情况。

 看,我们从来没有操作过web这个目录,但通过对python的操作,web的所属组也一同发生了变化。

3.2.2 chown:修改文件拥有者

3.2.3chmod [who][op][permission] file

who:表示用户类型

  • u         文件拥有者(user)
  • g         与拥有者同住的用户(group)
  • o         其他人(other)
  • a         所有人(all)

op表示动作加上(+)权利还是取消(-)权利

permission表示存取权限(r , w , x )

【示例】

4.进程

运行着的某一个程序的实例就是一个进程

操作系统会给每个进程都分配一个id,这个id叫 PID(Process Identification)

4.1查看进程信息

4.1.1通过命令ps可以查看进程信息

  • ps -f :显示在当前终端运行的进程的详细信息(换言之,在另一个终端启动的进程用这个指令是看不到的)
  • ps -e : 显示系统中所有正在运行的进程的信息
  • ps -ef :显示当前系统所有进程的详细信息

4.1.2父进程和子进程

Linux中,如果在一个进程A里面创建出一个新的进程B,那么进程A就叫做进程B的父进程 (parent process),进程B叫做进程A的子进程(child process)。

一个进程通常是由另外一个进程创建处理的。就比如我们现在的命令行程序:我们在shell中运行的程序(命令),都是shell进程创建的,所以shell进程就是他们的父进程。

注:shell:命令解释器,互式命令行程序。 它负责解释我们输入的命令。

我们通过ps -f查看进程的详细信息,其中bash 就是bash shell;ppid是指父进程的id。”ps -f “ 的PPID和“-bash ”的PID一样,就说明了bash是ps的父进程。

4.1.3查找关心的进程信息: ps -ef | grep xxx

前面提到过,grep可以抓取字符串,如果我们能grep另外一个命令输出的结果,就能通过查找字符串的方式查找我们关心的进程信息。

" | "是管道符,能把前一个命令的结果通过管道作为下一个命令的输入。这让我们的想法得以实现。 

4.2进程的前台,后台转换

Linux终端通过Shell程序来接收用户输入的命令,并且执行命令。我们在Shell里正在执行的,和用户进行人机交互的进程叫前台进程(foreground process)。

前台进程可以接收键盘输入并将结果显示在显示器上。用户敲入什么命令,shell就会启动对应的程序,运行在前台 。

但换言之,前台进程会占据和用户交互的权利。

对于某些无需与用户交互的程序,如果还要在前台运行,那就意味着在进程结束之前,你都无法与电脑进行交互,除非另外再打开一个终端(或者按ctrl c 提前结束进程)

对于这样的程序,我们可以将其切换至后台运行,这样程序既能正常运行,又不会占据与用户交互的权利。

在后台运行程序可通过在指令中加上 & 符。

&:可将程序放置在后台运行

4.3 nohup:不发出sighup——防止关闭终端后进程结束运行

当我们关闭终端时,shell会发送SIGHHUP信号给在该终端下运行的进程,进程接收的该信号,如果没有特别的处理,缺省就会结束运行

可是有些程序我们希望它们始终保持运行的状态(比如web的服务器)

这对于种情况,我们可以使用nohup指令。

发出在后台运行某个程序的指令时,如果这样写指令:nohup xxx &,即使终端关闭,程序还会继续在系统中运行。

4.4 进程的终止

4.4.1自行终止:

一直以来我们敲的所谓命令其实都对应是一段程序的代码,因此每次执行命令都相当于运行一个程序。有些程序执行完一段任务后就会自行终止。

4.4.2强行终止:

  • 结束前台进程 :组合键:Ctrl C
  • 结束后台进程: kill -9 + PID

 有一种结束后台进程的方法需要掌握:

ps -ef | grep t2.py 

kill -9 + PID

对于那种一直在系统后台运行的进程,很多时候我们未必能记得它的PID,因为它可能在好久以前的一次shell命令交互中就开始运行了,现在我们想关闭它,就要先查到它的PID,再kill掉它。

 

 5.重定向和管道

5.1重定向

5.1.1基本概念

Linux进程在启动后,通常就会打开3个文件句柄:

  • 标准输入文件stdin:用户输入的信息会被添加到stdin文件中,linux再从stdin中读取用户输入的信息
  • 标准输出文件stdout:存留要输出给用户看的信息
  • 标准错误文件stderr :存留要输出给用户看的报错信息

其中,stdout、stderr 缺省输出到终端(也就是屏幕),stdin缺省由用户输入

用户改变系统缺省的设定,指定输入输出位置就叫重定向操作

5.1.2标准输入输出重定向

  • 标准输出重定向:>

  • 标准错误重定向:2>

  • 同时重定向标准输出和标准错误: &>
  • 重定向标准输出和标准错误到不同文件:command > out 2>err
  • 标准输入的重定向(相当于从文件中读取数据):<

5.2 管道 |

前面已经两次用到过管道了,所谓管道就是把前面的输出作为后面的输入

6.网络管理

6.1查看网络接口IP地址

6.1.1网络接口

虚拟的对外进行通讯的接口,一个物理网卡可配置很多网络接口。

6.1.2查看网络接口的IP地址:ip addr

lo: 环回接口——用来给本机上的程序通讯

6.2启用、禁用网络接口

6.2.1ifup + 网络接口名:启用网络接口

6.2.2ifdown + 网络接口名:禁用网络接口

【实操】

在工作环境中,主机一般都是在学校的实验室或是公司的机房中的,因此我们一般都是通过获取机器的ip地址在我们的电脑上远程登陆linux的(当然学习阶段我们的Linux主机可能就是我们的虚拟机,其实也都一样)。

像我现在就是在putty上远程登陆我的linux虚拟机的,下面我们来演示断开网络接口:

可见,连接立马就断了,此后在putty上,我们怎么样也都不可能重新连接上Linux了,想要再重新打开网络接口,只能回到主机的终端。

6.3检查网络流畅性:ping+IP地址/域名

6.3.1原理

本机发一个网络包(实际情况肯定是多个包)给被ping的主机,主机也会回复一个网络包,通过记录发出到接受之间的时间来检测网络流畅性

6.3.2通过域名通讯

6.3.3通过ip地址通讯

6.4 netstat:查看网络状态

6.5ssh:在linux上远程登陆另一台linux主机

无论是直接在Linux主机(或虚拟机)还是远程桌面,我们已经有了一台linux主机,ssh让我们可以在linux主机上登陆另一台linux。

命令格式:ssh 用户名@IP地址或机器域名

比如:   [root@localhost ~]$ ssh user1@192.168.1.12

可以建立连接的话,linux会要求你输入user1的密码,正确输入后就会进入远程登陆的主机了,你可以敲入exit退出远程登陆。

6.6scp:在linux之间相互拷贝文件

scp 本机文件的相对路径或绝对路径       它机用户名@ip地址或域名:它机的目录 

                                                                                                ——  将本机文件拷贝到它机

比如 :scp /home/byhy1/abc.txt byhy2@192.168.1.12:/home/byhy2

scp  它机用户名@ip地址或域名:它机文件的相对路径或绝对路径      本机的目录

                                                                                                ——将它机文件拷贝到本机

比如 :scp byhy2@192.168.1.12:/home/byhy2/123.txt /tmp/

6.7WinSCP:windows和linux相互拷贝

这主要通过WinSCP软件来实现,由于有图形界面,因此非常直观且方便。

下载链接:Downloading WinSCP-5.19.2-Setup.exe :: WinSCP

6.8wget:从网络上下载文件

很多时候,我们下载文件不是要登陆到另一个人的用户,把他的文件拷贝到我们的电脑,我们通常是在网络上下载的。

Windows上,我们会直接使用浏览器来下载,Linux上由wget命令来实现。

比如:wget https://mirrors.aliyun.com/centos/timestamp.txt

其中,https://mirrors.aliyun.com/centos/timestamp.txt是符合http协议的连接地址

7.基于CentOS 7的其他命令操作

7.1 启动、重启、安装服务:systemctl

  • 启动服务 :systemctl start mysqld
  • 重启服务 :systemctl restart mysqld
  • 查看服务 :systemctl status mysqld
  • 关闭服务 :systemctl stop mysqld

mysqld是服务,mysql是客户端。mysqld其实是SQL后台程序(也就是MySQL服务器),它是关于服务器端的一个程序,mysqld意思是mysql daemon,在后台运行,监听3306端口,如果你想要使用客户端程序,这个程序必须运行,因为客户端是通过连接服务器来访问数据库的。你只有启动了mysqld.exe,你的mysql数据库才能工作。因此我们在centos上启动的是mysqld。

什么是服务?

7.2 打包和压缩

7.2.1 打包:tar

tar可将多个文件、目录打包到一个文件中。但是并不会压缩,压缩需要额外的指令。

  • 打包:tar cvf 包的名字 + 要打包的文件或目录名(可加多个)
  • 解包:tar xvf 包的名字

【注意】所谓解包,即在当前目录下创建一份包中所有的文件或目录,而这个包本身依旧还在。

  • 往包中添加文件或目录:tar rvf 包的名字 文件或目录的名字
  • 查看包中内容: tar tvf 包的名字
  • 同时实现压缩或解压 : 加上z指令,如:

tar zcvf leo.tar.gz *.txt        打包并压缩指定文件,压缩包名为leo.tar.gz

tar zxvf leo.tar.gz        解压并解包

7.2.2 压缩:gzip 

gzip命令用于文件的压缩与解压缩,压缩后的文件名后缀为“.gz”

  • 压缩: gzip file.txt
  • 解压:    gzip file.txt.gz(file.txt压缩后变为了file.txt.gz)

【注意】:

打包是复制:并不会动原内容

压缩是覆盖:直接将原内容压缩变为压缩包 

7.3安装软件包

7.3.1yum安装

YUM 是在Fedora、RedHat、SUSE、CentOS中常见的一种安装rpm软件的方式。能够从指定的 yum 源服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

【常见操作】

  • yum list :显示所有可安装和已经安装的包
  • yum list installed :显示已经安装的包

即使只是显示已经安装的包,输出内容也是非常多的,真正使用最好还是要结合grep。

  • yum install package :安装指定package包
  • yum remove package : 卸载指定package包

7.3.2通过源代码包编译安装

这种源代码包,通常都是放在以 tar.gz tar.bz2 为扩展名的压缩包中。源代码包里面的大都是 c语言代码文件,需要编译后才能安装。

step1:wget + 网址 从网上获取源码包

step2:解压包:tar zxf ...

step3 : 进入解压目录,执行以下命令进行配置、编译和安装:

./configure ; 
make && make install

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值