一、基本命令
1. 目录管理
/ 是根目录
/www/server 目录下面就是一些和网站相关的环境,是我在宝塔部分安装的
绝对路径&相对路径
./ 当前目录
cd / 切换到根目录
cd .. 返回上级目录
ls&cd&pwd&mkdir&rmdir&cp&rm&mv
ls
-a :列出全部目录,包括隐藏目录
-l :列出文件的属性和权限
-al :就是-a和-l组合使用
cd
分为cd 绝对路径和相对路径
绝对路径 :前面带 / 就表示从根目录开始寻找目录
相对路径:
cd …/
pwd 显示当前所在的目录
mkdir 创建目录
创建单个
mkdir -p 可以递归创建文件夹
rmdir 移除空的文件夹
如果下面存在文件,需要先删除文件
递归删除文件夹 -p参数
cp 复制文件或目录
cp 源 目标
如果目的不存在就会创造一个
文件重复的话要选择是否覆盖
y代表覆盖
n表示不覆盖
-r代表递归复制文件夹下面的内容
rm 移除文件或文件夹
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!
尽量不要在服务器上使用 rm -rf /
mv 移动文件或目录,或者修改名称
和cp差不多,mv 源 目的
f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
重命名文件
2. 文件基本属性
使用ls -l
或者ll
可以查看文件的属性
【d】开头表示是文件夹
【l】开头表示是连接,类似于windows下的快捷方式。所以可以看见l开头的连接文件最后一段有一个 ->。
【-】 表示是文件
chgrp修改文件属组
chgrp [-R] 属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chown更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
chmod 修改文件的9个属性(重要)
r:4 w:2 x:1
chmod - R 777 文件名 任何人都可读可写可操作
3.文件内容查看
概述
Linux系统中使用以下命令来查看文件的内容:
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。
网络配置目录:/etc/sysconfig/network-scripts
默认的配置文件
ifconfig查看网络的配置
cat 正着查看
tac 倒着查看
nl 顺便显示行号
more 一页一页地显示内容,空格翻页
less 一页一页翻动,和more比较可以向前翻动
具体向前或者向后翻就是pgup和pgdn。按q退出。
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
N表示向上寻找,n表示向下寻找
=======
head [-n number] 文件
tail [-n number] 文件
4. 软链接&硬链接
硬链接
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。
也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
软/硬链接本质上还是inode号不同
命令
ln 创建硬链接
ln -s 创建软链接
touch 创建文件
echo 输入字符串
测试
[root@kuangshen /]# cd /home
[root@kuangshen home]# touch f1 # 创建一个测试文件f1
[root@kuangshen home]# ls
f1
[root@kuangshen home]# ln f1 f2 # 创建f1的一个硬连接文件f2
[root@kuangshen home]# ln -s f1 f3 # 创建f1的一个符号连接文件f3
[root@kuangshen home]# ls -li # -i参数显示文件的inode节点信息
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f1
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f2
397248 lrwxrwxrwx 1 root root 2 Mar 13 00:50 f3 -> f1
从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 397247,然而符号连接文件的 inode 节点不同。
# echo 字符串输出 >> f1 输出到 f1文件
[root@kuangshen home]# echo "I am f1 file" >>f1
[root@kuangshen home]# cat f1
I am f1 file
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
I am f1 file
[root@kuangshen home]# rm -f f1
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
cat: f3: No such file or directory
通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f1 文件无效;
5. vim
三种使用模式
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
我们刚进vim的时候就是命令模式,输入的字符会被当做命令。
i
切换到输入模式,以输入字符。x
删除当前光标所在处的字符。:
切换到底线命令模式,以在最底一行输入命令。
输入模式:
按 ESC退出输入模式,重新回到命令模式。
底线命令模式:
基本命令:
q
退出程序w
保存文件
6. 账号管理
useradd 选项 用户名
useradd 选项 用户名
选项:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-m 使用者目录如不存在则自动建立。在home目录下创建一个用户名名称的目录。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
[root@zhaoyulong /]# useradd -m zyldemo1
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow,/etc/group等。
userdel 选项 用户名
删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
常用的选项是 -r,它的作用是把用户的主目录一起删除。
[root@zhaoyulong zyldemo1]# userdel -r zyldemo1
usermod 选项 用户名
常用的选项包括 -c, -d, -m, -g, -G, -s, -u以及-o等 ,这些选项的意义与 useradd 命令中的选项
一样,可以为用户指定新的资源值。
切换账号
[root@zhaoyulong home]# su zyldemo1
[zyldemo1@zhaoyulong home]$
passwd 用户名
可以修改密码
exit
可以回到root用户状态
[zyldemo1@zhaoyulong home]$ passwd zyldemo1
passwd: Only root can specify a user name.
[zyldemo1@zhaoyulong home]$ exit
exit
[root@zhaoyulong home]# passwd zyldemo1
Changing password for user zyldemo1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@zhaoyulong home]# su zyldemo1
[zyldemo1@zhaoyulong home]$
冻结账户
[root@zhaoyulong zyldemo1]# passwd -l zyldemo1
这样zyldemo1就无法登录了。
解冻
[root@zhaoyulong zyldemo1]# passwd -u zyldemo1
7. 用户组管理
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
新建一个用户组,可以在/etc/group里面查看
[root@zhaoyulong home]# groupadd group1
[root@zhaoyulong home]# cat /etc/group
指定新建的用户组的id
[root@zhaoyulong home]# groupadd -g 1024 group2
groupdel 用户组
[root@zhaoyulong home]# groupdel group2
groupmod 选项 用户组
-g GID
为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n
新用户组 将用户组的名字改为新名字
[root@zhaoyulong home]# groupmod -g 1005 -n newgroup group1
切换组
如果一个用户同时属于多个用户组,
这一点可以在创建用户的时候通过G选项来设置所属的组。
那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
$ newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。
配置文件
完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。
/etc/passwd
每一行就是一个用户的信息
用户名:口令(登录密码):用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow
保存每一个用户的密码,密码被MD5加密过了。不可逆。
/etc/group
保存用户组的信息
组名:口令:组标识号:组内用户列表
8. 磁盘管理
df
du
mount
unmount
9.进程管理
简介
1、在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
2、每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
3、 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操
作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4、一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
ps
查看系统中正在进行的各种进程的信息。
语法
ps –选项
可以通过ps -help
或者man ps
来查看帮助文档。
选项
-a
:显示当前终端的所有进程信息
-u
:以用户的形式显示进程信息
-x
:显示后台进程运行的参数
测试
ps -aux|grep mysql
grep
是过滤
-ef
可以查看父进程,但是一般还是用进程树
ps -ef|grep mysql
进程树
基本语法:
pstree [选项] ,可以更加直观的来看进程信息
常用选项:
-p :显示进程的PID
-u :显示进程的所属用户
[root@zhaoyulong home]# pstree -pu
二、文件管理
三、shell编程
1.概念
写一个例子
分号可以让我们在一行输入多个命令
编写
执行:
注意要修改hello.sh
文件的权限
还有就是执行方法有两种
bash的基本功能
别名
命名的别名其实就是其他命令的缩写,为了偷懒
输入allias查看已存在别名
定义别名
语法:alias 别名=原命令
alias 别名=原命令 选项 参数
说明:别名的内容可以包括命令,选项,参数
但是这是的别名是临时的
取消别名 unalias 别名
永久别名
用vim写到/.bashrc 里面
一个小问题:
vim突然退出Found a swap file by the name “.hello.sh.swp”
使用ll -a
发现一个.hello.sh.swp文件,把他删除就ok
历史命令
输入输出重定向
多命令顺序执行
特殊符号
3. shell变量
用户自定义变量
[root@zhaoyulong shelltest]# name="zyl" 设置自定义变量
[root@zhaoyulong shelltest]# set 查看自定义和系统变量
[root@zhaoyulong shelltest]# unset name 删除变量
只读变量 readonly
[root@zhaoyulong shelltest]# baidu="www.baidu.com" 自定义变量
[root@zhaoyulong shelltest]# readonly baidu 转换为只读变量
[root@zhaoyulong shelltest]# baidu="122" 修改这个变量
-bash: baidu: readonly variable
shell字符串
单引号引用和双引号引用的区别
字符串拼接
环境变量
环境变量还分为系统级环境变量和用户级环境变量
环境变量和用户自定义变量的区别
设置&查看环境变量
常用环境变量
添加环境变量路径
修改命令行的样式
位置参数变量
参数的意思就是执行文件的时候后面添加的参数列表。
例子
$* $@的区别
预定义变量
主要是Bash中已经定好的变量,名称不能自定义,作用也是固定的。
例子
4. shell运算符
declare
就是声明变量
数值运算
算数运算符
``和$()的用处
关系运算符
布尔运算符
逻辑运算符
字符串运算符
文件测试运算符
5. shell流程控制
安装环境
安装软件有三种方法:rpm,解压缩,yum
安装的命令
JDK安装
不是ivk是inh
配置环境变量
在/etc/profile
文件后面追加就ok
export JAVA_HOME=/usr/java/jdk1.8.0_291-amd64
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME%/jre/lib
export PATH=$PATH:$JAVA_HOME/bin;$JAVA_HOME/jre/bin:$PATH
java环境是安装在了/usr/java
目录下
source /etc/profile
使配置文件生效
tomcat安装
- 下载tomcat压缩包
- 解压缩
tar -vxzf apache-tomcat-9.0.46.tar.gz
- 启动Tomcat测试
启动 ./startup.sh
关闭 ./shutdown.sh
如果防火墙开了8080端口并且阿里云安全组也开放了8080端口,就可以联网访问了。
防火墙有关指令
# 查看firewall状态
systemctl status firewalld
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看firewall规则
# 查看全部信息
firewall-cmd --list-all
# 查看端口信息
firewall-cmd --list-ports
# 开启端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重启防火墙,不重启的话开启的端口不会生效
systemctl restart firewalld.service
--zone # 作用域
--add-port=80/tcp # 添加端口,格式:端口号/协议
--permanent # 永久生效,没有这个参数的话重启就失效了
要重启防火墙之后开启的端口才可以生效
防火墙出现如下报错
[zzfzbx@zhaoyulong ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
May 21 06:59:00 zhaoyulong systemd[1]: Starting firewalld - dynamic firewall daemon...
May 21 06:59:00 zhaoyulong firewalld[1490]: ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied: Connection ":1.21" is not al...tion file
May 21 06:59:00 zhaoyulong systemd[1]: Started firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[zzfzbx@zhaoyulong ~]#