Linux
linux的本质是一切皆目录
学习来自哔哩哔哩狂神说,视频地址https://www.bilibili.com/video/BV187411y7hF
hostnamectl:查看linux信息
关机
shutdown: 关机命令,但需要先输入sync数据同步到硬盘,避免数据丢失
**reboot:**重启
halt: 等同于shutdown -h now 和 poweroff
目录操作
-
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令,比如ls。(不要动)
-
/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
-
/dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
-
/etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /etc/profile 可以添加全局配置变量,exprot导出即可
my_name="wangfenglong"
export my_name
保存后执行 source /etc/profile生效
-
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
-
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
-
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
-
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
-
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
-
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
-
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
-
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
-
/srv:该目录存放一些服务启动之后需要提取的数据。
-
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
-
/tmp:这个目录是用来存放一些临时文件的,用完就丢的。
-
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
-
/usr/bin: 系统用户使用的应用程序。
-
/usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
-
/usr/src: 内核源代码默认的放置目录。
-
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
-
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
-
/www: 存放服务器网站相关的资源,环境,网站的项目(非自带)
常用的基本命令
目录操作
-
ls [-参数] [文件名]: 列出目录
- -a :all,全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
- -l :list,长数据串列出,包含文件的属性与权限等等数据;(常用)
-
cd:切换目录
- ./ : 当前
- / :根目录
- … :上一级目录
- ~ :回到当前用户目录
-
pwd:print work directory,显示目前的目录
-
clear或者ctrl+l:清屏
-
echo 输出内容
echo “I am f1 file” >f1.txt 清空原文件所有内容,然后最佳
echo “I am f1 file” >>f1.txt 追加到文件
echo “I am f1 file” 输出到控制台
文件操作
- touch:新建文件
- mkdir:创建一个新的目录
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来! mkdir -p wfl2/wfl3/wfl4
- rmdir:删除一个空的目录
- -p :连同上一级『空的』目录也一起删除;rmdir -p wfl2/wfl3/wfl4
- cp: 复制文件或目录,cp source destination
- **-r:**递归持续复制,用於目录的复制行为;(复制目录,常用)
- **-f:**为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
- **-i:**若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
- rm: 移除文件或目录,rm -rf 目录/文件
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
- mv: 移动文件与目录,或修改文件与目录的名称
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qGKSpyQv-1615992182142)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210316201915591.png)]
自左向右一次为:类型,权限,属主,属组,时间,文件名(白色文件,蓝色文件夹,绿色链接文件或者.sh )
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等:
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档 ( link file );
接下来的字符中,以三个为一组(属主,属组,其他权限用户),且均为『rwx』 的三个参数的组合。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
权限命令
- chgrp:更改文件属组;chgrp [-R] 属组名 文件名
- chown:更改文件属主,也可以同时更改文件属组
- chmod:更改文件9个属性;chmod [-R] xyz 文件或目录
- Linux文件属性有两种设置方法,一种是数字,一种是符号。
- 数字 r:4 w:2 x:1;例如chmod 770 filename,代表 rwxrwx—
- ±权限:chmod u+x ex1.py
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文 件已经被设定过为可执行。
文件内容查看
- cat 由第一行开始显示文件内容
- -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- -b :指定行号指定的方式,主要有两种:-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值);
- -n :列出行号表示的方法,主要有三种:-n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ;
- -w :行号栏位的占用的位数。
- more 一页一页的显示文件内容
- 空白键 (space):代表向下翻一页;
- Enter :代表向下翻『一行』;
- /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- 空白键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字串 :向下搜寻『字串』的功能;
- ?字串 :向上搜寻『字串』的功能;
- n :重复前一个搜寻 (与 / 或 ? 有关!)
- N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
- q :离开 less 这个程序;
- head 只看头几行;head [-n number] 文件
- tail 只看尾巴几行;
连接
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。
硬连接 ln source destination
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接 ln -f source destination
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
- 无论是修改源文件,硬链接还是软连接修改文件内容都会互相影响
- 无论是删除硬链接还是软连接都不会对源文件产生影响
- 硬链接相当于复制(不等同于复制),删除原文件不会产生影响
- 软连接相当于快捷方式,删除原文件会受影响
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WmWM3Idr-1615992182143)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210316221856441.png)]
VIm操作
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。这三种模式的作用分别是:
移动光标的方法 | |
---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
n< space> | 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。 |
0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
$ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊!(常用) |
n< Enter> | n 为数字。光标向下移动 n 行(常用) |
搜索替换 | |
---|
/word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可!(常用) |
?word | 向光标之上寻找一个字符串名称为 word 的字符串。 |
n | 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! |
N | 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
- 在命令模式下按下i就进入了输入模式。insert插入/替换切换
- 在命令模式下按下:(英文冒号)就进入了底线命令模式。
| :w | 将编辑的数据写入硬盘档案中(常用) |
| ----------- | ------------------------------------------------------------ |
| :w! | 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! |
| :q | 离开 vi (常用) |
| :q! | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
| :wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
| :set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
| :set nonu | 与 set nu 相反,为取消行号! |
用户操作
-
新建用户 useradd 选项 用户名
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -m 使用者目录如不存在则自动建立。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号
eg: useradd -m wfl,
ls /home 可以看到新建得了wfl目录,
cat /etc/passwd 可以查看用户配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i95P8TOe-1615992182147)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317121120096.png)]
-
切换用户 su username
eg:su root ,su wfl
-
删除用户 userdel 选项 用户名
eg:userdel -r wfl
-
修改用户 usermod 选项 用户名
usermod -d /home/123 wfl
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OojM4vk5-1615992182148)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317121556780.png)]
-
查看用户名 username
- username :查看用户名
- username 用户名:修改当前用户名,修改后有效
-
修改用户密码 passwd 选项 用户名
- -l :lock锁定口令,即禁用账号。
- -u :unlock口令解锁。
- -d :使账号无口令。
- -f :强迫用户下次登录时修改口令
eg: passwd wfl:修改wfl密码,需要输入两次且不会显示密码
passwd :修改当前使用用户密码
passwd -l wfl:锁定wfl用户
passwd -u wfl :解锁wfl用户
用户组操作
-
新建:groupadd 选项 用户组
-
删除:groupdel 用户组
-
修改:groupmod 选项 用户组
- -g GID 为用户组指定新的组标识号。
- -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
- -n新用户组 将用户组的名字改为新名字
eg: groupmod -g 1005 wflg : 修改wflg的组id为1005
groupmod -g 1005 -n wflgg wflg :修改wflg的组id为1005以及组名为wflgg
使用cat etc/group查看组信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBprvL27-1615992182149)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317130517260.png)]
- 切换:newgrp 用户组
/etc/passwd
/etc/passwd文件是用户管理工作涉及的最重要的一个文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qePtXEGD-1615992182150)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317131921805.png)]
格式:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5zCcV7wj-1615992182152)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317131911627.png)]
格式:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生
/etc/group
用户组的所有信息都存放在/etc/group文件中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y8BGep7c-1615992182153)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317131939893.png)]
格式:组名:口令:组标识号:组内用户列表
磁盘管理
Linux磁盘管理常用命令为 df、du。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRebzMo3-1615992182156)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317133312281.png)]
检查根目录底下每个目录所占用的容量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCMtRNMM-1615992182158)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20210317133425567.png)]
进程管理
- ps :查看当前系统中正在执行的各种进程的信息!
- -a 显示当前终端运行的所有的进程信息(当前的进程一个)
- -u 以用户的信息显示进程
- -x 显示后台运行进程的参数!
- -v 显示不包含匹配文本的所有行
- -e 指定字符串做为查找文件内容的样式
- -f <规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- | 在Linux这个叫做管道符 A|B,grep 查找A中符合B条件的字符串!
- awk ‘{print $1}’ 可以取出字符串的第几个元素`
对于我们来说,这里目前只需要记住一个命令即可 ps -xx|grep 进程名字! 过滤进程信息!
例如ps -aux|grep nginx 产看nginx进程
- ps -ef:可以查看到父进程的信息
- pstree -pu 目录树结构来查看父进程
例如: pstree -pu|grep redis 以目录树结构来查看redis父进程
-
kill -9 进程的id:强制杀死进程
将Java程序打包发的时候讲解! nohup ,代表后台执行程序
防火墙
如果是阿里云还需要添加安全组规则放行端口
- 查看版本: firewall-cmd --version
- 显示状态: firewall-cmd --state
- 查看所有打开的端口:firewall-cmd --list-ports
- 更新防火墙规则: firewall-cmd --reload
- 新增端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
- 查看端口:firewall-cmd --zone= public --query-port=80/tcp
- 删除端口:firewall-cmd --zone= public --remove-port=80/tcp --permanent
- –zone #作用域
- –add-port=80/tcp #添加端口,格式为:端口/通讯协议
- –permanent #永久生效,没有此参数重启后失效
Shell
#!/bin/bash
echo $my_name
touch wfl.txt
x=`touch wfl.txt`
echo "x=$x"
变量
-
定义变量 x=10
-
删除变量 unset x
-
使用变量
-
使用命令赋值 x=`ls -l`
-
在/etc/profile可以定义全局变量
-
位置参数变量
可以获取shell脚本执行时用户输入的内容
#!/bin/bash
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "第十一个参数为:${11}"; ps:大于10需要大括号
echo "参数个数:$#";
echo "所有参数:$*";
echo "所有参数:$@";
--result:
[root@WFLLinux shell]# ./myShell.sh 1 2 3 4 5
执行的文件名:./myShell.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
参数个数:5
所有参数:1 2 3 4 5 等价于 "1,2,3,4,5"
所有参数:1 2 3 4 5 等价于 "1" "2" "3" "4" "5"
echo "当前的进程号$$"
./test.sh &
echo "最后的进程好$!"
echo "执行的值=$?"
--result:
当前的进程号17118
最后的进程好17119
执行的值=0
运算符
常见运算符包括+,-,*,/,%,=,==,!=
* [x+100],$[x+100],$[1+1],$[1==1]
* $((1+1)),
* \`expr 1 + 1\` 注意空格
条件判断
- 常见包括 常见数字字符逻辑判断,文件权限判断,文件是否存在判断
- case也可以,类似于switch
a=${1}
b=${2}
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
判断文件是否存在
if [ -e ${1} ]
then
echo "exits"
else
echo "no exits"
fi
循环
循环输出参数,$*输出1次,$@逐个输出
for loop in "$@"
do
echo "The value is: $loop"
done
循环输出1-10并求和
sum=0
for((i=1;i<=10;i++))
do
sum=$[$sum+$i]
echo $i
done
echo $sum
循环输出当前目录下的文件
for loop in "`ls -al`"
do
echo "The value is: $loop"
done
循环输出小于输入的数
i=0
while [ $i -le $1 ]
do
i=$[$i+1]
echo $i
done
read
使用read可以阻塞的等待用户输入,格式为read [选项] 变量
-p :输入提示
-t n :可以控制输入等待时间
read -p "请输入一个数字" num
echo "平方根为:$[$num*$num]"
--result:
请输入一个数字12
平方根为:144
函数
系统函数
获取文件部分
basename /home/shell/test.sh => test.sh
basename /home/shell/test.sh .sh => test
basename /home/shell => shell
获取非文件部分
dirname /home/shell/test.sh => /home/shell
dirname /home/shell => /home
输出当前日期
x=$(date)
echo "x=$x"
echo "x=$date,`date`"
echo data__`date`
date +%Y/%m%d_%H:%M:%S 带格式输出
自定义函数
入参和获参类似执行shell脚本
function sum(){
echo "这是我的第一个函数"
echo $[$1+$2]
}
sum $1 $2
--result
./test.sh 3 5
这是我的第一个函数
定时任务crontab
可以将shell脚本方法通过crontab定时运行
java
以后台线程启动并写入日志:java -jar ***.jar >> …/log/***.log &
查看java进程:ps -ef|grep java
杀死进程:kill -9 pid
动态查看日志:tail -f ***.log
清空文件:> ***.log
nginx
- nginx -s reload 重新加载Nginx配置文件,然后以优雅的方式重启Nginx
- nginx -s stop 强制停止Nginx服务
- nginx -s quit 优雅地停止Nginx服务
- killall nginx 杀死所有nginx进程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)