- /bin 全称binary,存储二进制文件
- /dev 存放外接设备,例如硬盘、光盘等,但不能直接使用,需要先挂载(Windows需要先分配盘符)
- /etc 存放配置文件
- /home 存放除root以外的账户个人文件(相当于Windows中的C:\Users)
- /proc 全称process,存储Linux运行时的进程
- /root 存放root账户的个人文件
- /sbin 全称super binary,存放二进制文件,但是必须得有super权限的账户才能执行
- /temp 全称temporary,存放临时文件(相当于Windows中的C:\WINDOWS\temp)
- /usr 存放用户安装的软件(相当于Windows中的C:\Program files)
- /var 存放日志文件
列出当前目录下所有文件和文件夹的名称。
相对路径:“./”表示当前目录(可省略),"../"表示上一级目录
绝对路径:以“/”开头,表示从根目录开始找
ls //当前路径
//蓝色→文件夹,黑色→文件,绿色→其权限为所有权限
ls [路径] //指定路径
ls -a //同时显示隐藏文件和文件夹
ls -l //以列表形式详细展示,第一列表示权限
//第一列第一个字符表示文档类型,"-"→文件,"d"→文件夹,"l"→快捷方式
//第三列、第四列标注文件/文件夹分别属于哪个用户和用户组
//第五列表示文件字节
//第六七八表示修改时间
//第九列表示文件名/文件夹名
ls -lh //-l且显示文件大小时优化显示单位(-h单独用无效,因为没有-l,不显示大小)
ls -[a][l][h]//效果叠加,顺序随意
全名:print working directory,打印当前工作目录。
pwd //没有参数
切换当前工作目录的路径。
cd 路径 //切换路径
cd ~ //切换到当前用户的家目录
cd //切换到当前用户的家目录
全称:make directory,创建目录。
mkdir 路径 //创建文件夹
mkdir -p 路径 //创建多层文件夹目录树,例如mkdir -p test/a/b/c
mkdir 路径1 路径2 路径3 ...//创建多个文件夹
创建文件。
touch 路径 //创建文件,其中路径的上层路径必须存在
touch 路径1 路径2 路径3 ...//创建多个文件
全称:copy,复制文件/文件夹。
cp 被复制路径 复制到路径 //复制文件,例如cp 1.txt 2.csv,例如
cp -r 被复制路径 复制到路径 //复制文件夹,例如cp folder1/ folder2/,亲测也可以不带"/"
全称:move,移动文件/文件夹,也可重命名。
mv 被移动路径 移动到路径 //移动文件
mv 被移动路径 移动到路径 //移动文件夹,不需要加"-r"
全称:remove,删除文件/文件夹。
rm 路径 //删除文件
rm 路径1 路径2 路径3 ... //删除多个文件
rm -f 路径 //"-f"表示force,强制删除且不提示
rm -r 路径 //删除文件夹
rm -r 路径/* //只删除文件夹下的所有文件,
rm -rf 路径 //“-r”+"-f"效果叠加,可以批量删除文件和文件夹
rm -f linux* //删除所有以"linux"为开头的文件
vim是一款文本编辑器。
vim 文件路径 //打开一个文件,无论是否存在
将终端的输出结果保存到文件中。
ls -la > 路径 //">"表示覆盖输出
ls -la >> 路径 //">>"表示追加输出
直接打开文件,或对多个文件进行合并输出。(经常配合输出重定向使用)
cat 文件路径 //直接打开文件,不受terminal端的字符行列数限制,一次性全部输出
cat 文件路径1 文件路径2... //对多个文件进行合并输出
查看磁盘的空间。
df //显示磁盘空间,单位为b
df -h //显示磁盘大小时优化显示单位
查看内存使用情况。
free //显示内存空间,单位为b
free -m //显示内存空间时以Mb为单位
free -g //显示内存空间时以Gb为单位
查看一个文件的前n行,n缺省值为10。
head 文件路径 //输出文件的前10行
head -n 文件路径 //输出文件的前n行
查看一个文件的后n行,n缺省值为10,或查看一个文件的动态变化,但是变化的内容不能是用户手动编辑的。
tail 文件路径 //输出文件的后10行
tail -n 文件路径 //输出文件的后n行
tail -f 文件路径 //实时输出文件在tail打开后被追加写入的数据
查看文件,以较少的内容进行输出,并能通过数字+回车 空格键 上下 以翻页,通过q键退出。
less 文件路径 //查看文件
统计文件信息,包括行数,单词数,字节数。
wc -l 文件路径 //统计line(行数)
wc -w 文件路径 //统计word(单词数),依据空格来统计
wc -c 文件路径 //统计字节数
操作时间和日期。
date //输出当前时间,例如2021年6月27日 星期日 12:55:40
date +%F //只输出年月日,例如2021-06-27
date "%Y-%m-%d" //只输出年月日,例如2021-06-27
date "%y-%m-%d" //只输出年月日,例如21-06-27
date "+%F %T" //输出年月日和时间,例如2021-06-27 12:55:40
date "+%Y-%m-%d %H:%M:%S" //输出年月日和时间,例如2021-06-27 12:55:40
date -d "-1 day" "+%F %T" //输出一天前的时间
date -d "+1 year" "+%F %T" //输出一年后的时间
//包括day,month,year
操作日历。
cal //在命令行中画出当前月份的日历
cal -3 //在命令行中画出上个月、当前月、下个月的日历
cal -y 2021 //在命令行中画出2021年的日历
cal -m //以星期一作为第一列
清屏。(把之间的输出顶到了屏幕的最上边)
clear //清屏
用于过滤、扩展处理、和特殊用途。
ls | grep y //筛选当前目录下包含"y"字符的文件/文件夹
cat 文件路径 | less //等价于less 文件路径
ls | wc -l //查看当前目录下的文件/文件夹个数
操作服务器主机名。
hostname //输出完整的主机名
hostname -f //输出主机名中的FQDN(全限定域名)
查看一个用户的基本信息,例如用户id、用户组id、附加组id等,缺省值为当前帐户。
id //显示该用户基本信息
id 用户名 //显示制定用户的基本信息
//信息存放在/etc/passwd中
显示当前登录的用户。
whoami //显示当前登录的用户
查看进程信息。
ps //查看服务器进程信息(Windows中的任务管理器)
ps -A //列出全部的进程(增加行)
ps -e //列出全部的进程(增加行)
ps -f //列出全部的信息(增加列)
//UID:用户id
//PID:进程id
//PPID:父级进程id(谁调用的该进程)
//C:CPU占用率,单位为%
//STIME:进程启动时间
//TTY:终端设备(哪个终端发起的)
//TIME:进程的执行时间
//CMD:进程的名称或对应的路径
查看进程所占的资源。
top //动态显示,按下q退出
//PR:优先级
//VIRT:虚拟内存
//RES:常驻内存
//SHR:共享内存
//实际占用内存=RES-SHR
//S:表示运行的状态,S→sleeping→睡眠,R→running→运行
//COMMMAND:进程的名称或对应的路径
快捷键:M→按内存占用进行降序排列
P→按CPU占用进行降序排列
1→显示多个CPU的占用情况
统计文件夹大小。
du [文件夹路径] //查看目录树中所有文件/文件夹的大小
du -s //只显示下一层文件/文件夹汇总的大小
du -sh //"-s"与调整单位效果叠加
寻找文件。
find 文件路径 -name 文件名称 //“文件路径”可以包含通配符
find 文件路径 -type 文件类型 //“文件类型”包括:"f"→文件,“d”→文件夹
控制软件服务的启动、停止和重启。
service 服务名 start //启动服务
service 服务名 stop //停止服务
service 服务名 restart //重启服务
关闭进程。
kill 进程PID //关闭指定PID的进程
killall 进程名称 //关闭指定名称的进程
查看网卡信息。
ifconfig //查看网卡信息
重启系统。
reboot //重启系统
reboot -w //模拟重启,仅向系统写日志,但是实际不重启
关闭系统。
shutdown -h now //立即关机
shutdown -h 12:25 //12:25时定时关机
shutdown -h 12:35 ["关机提示"] //设置关机提示
shutdown -c //取消关机
输出计算机从开机的正常运行时间。
uptime //输出计算机从开机的正常运行时间
获取系统信息。
uname //输出系统名称
uname -a //输出详细的系统信息,包括系统版本,发行时间,内部build版本号
查看网络的连接状态。
netstat -tnlp //"-t"只列出tcp协议的连接
//"-n"将环境变量转化成IP地址,协议转化成端口号来显示
//"-l"过滤出state中值为LISTEN的连接
//"-p"显示发起连接的进程pid和名称
//"-a"全部
全称为manual,包含了linux中全部命令。
man 命令 //查询命令的用法
创建快捷方式/软链接。
ln -s 文件原位置 快捷方式保存位置 //创建快捷方式
查看块状设备的挂载情况,包括光盘、硬盘。
lsblk
挂载/取消挂载。
umount 文件夹路径 //取消挂载
mount 设备原始地址 挂载路径 //挂载设备
//设备原始地址在/dev中,名称为lsblk显示的名称,以文件形式存在
//挂载路径按习惯为/mnt/SomeFolder
解压压缩包。
tar -zxvf *.tar.gz //"-z"→--gzip或--ungzip
tar -zxvf *.tar.bz2 //"-j"→bzip2
//"-x"→--extract或--get
//"-v"→显示操作过程
//"-f"→指定一个文件
光标前:Ctrl+U
光标后:Ctrl+K
tail -3 /etc/passwd
vim 文件路径 //打开文件
vim +数字 文件路径 //打开文件,同时将光标移动到指定行
vim +/字符串 文件路径 //打开文件,并且高亮显示关键词
vim 文件路径1 文件路径2 文件路径3... //同时打开多个文件
graph TB
A("终端")-->B("命令模式(默认)")
B -- 输入英文 -->C("末行模式")
C -- 按1下Esc退出,按2下Esc删除末行中全部命令 --> B
打开Vim后默认进入的模式。
- Shift+6:将光标移动到行首
- Shift+4:将光标移动到行尾
- gg:将光标移动到首行
- G / Shift+g:将光标移动到尾行
- PgUp / Ctrl+B:向上翻屏
- PgDown / Ctrl+F:向下翻屏
- yy:复制光标所在行
- 数字 yy:复制光标所在行的下n行,包括本行
- Ctrl+v:选中区块
- p:在光标所在行的下一行粘贴
- dd:剪切/删除光标所在行,然后下一行上移
- 数字 dd:剪切/删除光标所在行的下n行,包括本行,然后下一行上移
- D:剪切/删除光标所在行,下一行不上移
- :u / u:撤销
- Ctrl+r:恢复
- 数字 G:将光标移动到指定的行
- 数字 ↑:将光标向上移动n行
- 数字 ↓:将光标向下移动n行
- (末行模式):数字:移动到指定的行
- 数字 ←:光标向左移动n个字符
- 数字 →:光标向右移动n个字符
在命令模式按下:
进入,按下Esc
,Esc Esc
或删除:
退出。
:w
:保存文件:w
路径:另存为:q
:退出:wq
:保存并退出:q!
:强制退出,但不保存:!外部命令
:调用外部命令/关键词
:搜索关键词,按N
或n
切换至上一个/下一个搜索结果:nohl
:取消高亮:s/搜索的关键词/新的内容
:替换光标所在行的第一处符合条件的字符串:s/搜索的关键词/新的内容/g
:替换光标所在行的所有符合条件的字符串:%s/搜索的关键词/新的内容
:替换整个文件中所有行的第一处符合条件的字符串:%s/搜索的关键词/新的内容/g
:替换整个文件中的所有符合条件的字符串:set nu
:显示行号:set nonu
:不显示行号:files
:显示Vim当前打开的文件,%a
→当前正在查看的文件,#
→上一个打开的文件:open 文件名
:在当前打开的文件中切换至指定的文件:bn / :bp
:在当前打开的文件中切换至上一个/下一个文件
在命令模式下按下a
或i
进入编辑模式,按Esc
退出。
:syntax on //开启代码着色
:syntax off //关闭代码着色
先按下Ctrl+R
,再输入=要计算的表达式
,然后按下Enter
。
set nu //设置行号
//......
两个配置文件冲突时,以个人配置文件为准。
terminal强制关闭时,.swp
(交换文件)会导致Vim输出错误提示,删除即可。
依靠一个别名映射文件(~/.bashrc,创建自定义命令,创建后需要重新登录当前用户才能生效。
alias cls="clear" //添加"cls"命令,等效于"clear"
:x
:文件未修改时等价于:q
,文件已修改时等价于:wq
:wq
会使文件修改时间被更改。
:W
会加密文件,解密时只需设置空密码即可。
系统的init
进程的配置文件存放路径为/etc/inittab
(仅Red-Hat
系有,Ubuntu
没有)
0
:关机级别1
:单用户模式2
:多用户模式,不带NFS(Network File System),不能联网3
:多用户模式4
:没有使用的模式(保留模式)5
:X11,完整的图形界面模式6
:重启级别
sudo init 0 //关机
sudo init 3 //切换到纯命令行模式
sudo init 5 //切换到图形界面
sudo init 6 //重启
更改默认启动模式:
/etc/inittab
============================
id:数字:initdefault //数字含义与上述7种模式对应
/etc/passwd
:存储用户的信息
someusers:x:500:500::/home/someusers:/bin/bash
用户名:密码(x仅表示占位):用户ID:用户主组ID:注释:家目录:解释器shell
/etc/group存储
:存储用户组的信息
someuser:x:68:childuser
用户组名:密码:用户组ID:组内用户
/etc/shadow
:存储用户的密码
添加用户:
useradd 选项 用户名 //添加用户
//"-g"→指定用户主组(id或组名)
//"-G"→指定用户附加组(id或组名)
//"-u"→用户的标识符UID,默认从500之后分配
//"-c"→添加注释
修改用户:
usermod 选项 用户名 //"-g"→修改用户主组(id或组名)
//"-G"→修改用户附加组(id或组名)
//"-u"→修改的标识符UID,默认从500之后分配
//"-l"→修改用户名,如usermod -l newstr oldstr
//"-s 路径"→修改默认Shell
设置密码:
passwd [用户名] //进入修改密码的流程中,用户名缺省值为当前账户
切换当前登陆用户:
su [用户名] //切换至指定用户,用户名缺省值为root
删除用户:
userdel 选项 用户名 //删除指定用户
//"-r"→同时删除其家目录
ps -ef|grep 用户名
kill 用户名对应进程的父级进程的id //强制关闭正在运行的用户
添加用户组:
groupadd 选项 用户组名 //"-g"→设置用户组id,默认从500开始排
编辑用户组:
groupmod 选项 用户组名 //"-g"→修改用户组id
//"-n"→修改用户组名称
删除用户组:
groupdel 用户组名 //删除指定名称的用户组
//当这个组是某个用户的主组时,则不允许删除
网络配置信息保存在/etc/sysconfig/net
(Red-hat)或/etc/network/interfaces
(Ubuntu),以if-c
fg-网卡名称
命名。
- ONBOOT:开启开机启动
- BOOTPROTO:IP地址分配方式
- HWADDR:MAC地址
service network start //重启网络服务
/etc/init.d/network restart //重启网络服务
ifdown 网卡名 //关闭指定的网卡
ifup 网卡名 //启用指定的网卡
全称Service shell(安全外壳协议),用于做远程连接和远程传输,默认使用22端口,配置文件存储在/etc/ssh/ssh_config
。
service sshd start/stop/restart //注意是sshd!
/etc/init.d/sshd start/stop/restart //
Xshell、SecureCRT、Putty等软件。
可视化文件传输工具filezilla,最好使用SFTP协议。
瞧不起Xftp?瞧不起Xftp?瞧不起Xftp?瞧不起Xftp?瞧不起Xftp?:sweat_smile:
命令行文件传输工具pscp。
//windows shell
C:\>pscp 选项 用户名@linux 主机地址:资源路径 windows本地地址 //下载到win
C:\>pscp 选项 资源路径 用户名@linux 主机地址:远程路径 //上传到linux
C:\>pscp 选项 -ls 用户名@linux 主机地址 //列出远程路径目录树
瞧不起wget?瞧不起wget?瞧不起wget?瞧不起wget?瞧不起wget?:sweat_smile:
hostname 主机名 //临时设置主机名,重启后恢复原状
su //刷新终端,显示新设置的主机名
vim /etc/sysconfig/network //永久设置主机名,修改HOSTNAME字段即可,不加引号
vim /etc/hosts //更新FQDN,将新主机名绑定到回环口127.0.0.1
//在对应行后面+空格+新主机名,重启后生效
编辑开机启动项。(Red-Hat限定)
chkconfig --list //显示在对应的启动级别下,各项服务的自启动情况
chkconfig --del 服务名 //删除该服务所有启动级别下的的启动项,并从列表移出
chkconfig --add 服务名 //将服务移入列表,但所有级别下均不能运行
chkconfig --level 连续的数字 服务名 on //设置该服务在连续数字对应的启动级别下运行
chkconfig --level 连续的数字 服务名 off //设置该服务在连续数字对应的启动级别下关闭
对计算机的时间进行同步管理操作。
ntpdate 时间服务器的ip或域名
service ntpd start
/etc/init.d/ntpd start
防范网络攻击。
- ipatables(Centos 6.x)
- firewalld(Centos 7.x)
service iptables start/stop/restart //开启/停止/重启iptables服务
/etc/init.d/iptables start/stop/restart//开启/停止/重启iptables服务
service iptables status //查看当前iptables的运行状态
//第一列num:序号
//第二列target:允许/拒绝
//第三列prot:协议
//第四列opt:选项
//第五列source:来源,0.0.0.0表示任何ip
//第六列destination:目标
iptables -L //以环境变量方式显示iptables运行状态
iptables -L -n //以点分十六进制形式显示iptables运行状态
//"-A"→add添加到最后,"-l"→添加到最前
//"-p"→协议,"--dport"→端口
//"-j"→指定行为结果
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT //允许本机连本机
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT//允许已建立连接通行
iptables -A OUTPUT -j ACCEPT //允许本机出站的所有请求
iptables -A INPUT -p tcp --dport 80 j ACCEPT //允许连接80端口
iptables -A INPUT -j REJECT //禁止其他未允许规则的访问
iptables -A FORWARD -j REJECT //禁止其他未允许规则的访问
/etc/init.d/iptables save //保存当前规则,重启httpd后生效
查看、安装、卸载linux服务器上的软件包。
rpm -qa //"-q"→查询,"-a"→全部
rpm -e 软件名 //卸载软件包
rpm -e 软件名 --nodeps //强行卸载软件包,无视依赖项阻止
rpm -ivh 软件包路径 //安装软件包,"-i"→安装,"-v"→显示进度条,"-h"以#显示进度条
按照预先设定好的时间执行任务。
crontab 选项 //"-l"→展示计划列表,"-e"→编辑
//"-u"→指定用户名,"-r"→删除
=============================================
crontab会打开一个/tmp/*/crontab文件,在该文件中编辑即可
分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7,0和7均为Sun.) 命令
"*"→取值范围中的每一个数字
"-"→表示闭区间
"/"→例如:在分的位置写"*/10"表示每10分钟执行一次
","→表示多个离散的取值
=============================================
0 0 * * * reboot //每个月、每个周、每天的0时0分重启
10 1 * * 6,0 reboot //每周六、周日1:10分重启
*/30 12-23 * * * reboot //每天18:00-23:00之间每隔30分钟重启一次
root账户可以通过更改配置文件/etc/cron.d
来限制用户的计划任务权限。在里面一行一个地写入不允许设置计划任务的用户名即可(黑名单)。也可更改配置文件/etc/cron.allow
设置白名单(需要自己创建)。当白名单喝白名单冲突时,白名单优先级高。
用户身份有三类:owner,group(同在一个用户组),others,root。
权限有三种:读(文件夹→目录树,文件→内容)、写、执行。
使用ls -la
或者ll
查看文档权限属性信息。
如果只有w而没有r,则只能用echo "" >>
输入,无法用Vim编辑,因此尽量避免-w-或-wx。
$$
\bold{\underbrace{\textcolor{red}{d}}\underbrace{\textcolor{blue}{rwx}}\underbrace{\textcolor{green}{r-x}}\underbrace{\textcolor{brown}{---}}}=
\begin{cases}
\bold{\textcolor{red}{d}}&文件类型
\begin{cases}
d→文件夹\
-→文件\
l→快捷方式\
s→套接字\
\end{cases}
\ \bold{\textcolor{blue}{rwx}}&Owner权限\ \bold{\textcolor{green}{r-x}}&Group权限\ \bold{\textcolor{brown}{---}}&Others权限\ 字符含义: \begin{cases} r&read&可读\ w&write&可写\ x&exucute&可执行\ -&&没有对应权限\ \end{cases}\ \end{cases} $$
chmod 选项 权限模式 文件/文件夹路径 //例如 chmod -R
//"-R"→递归操作,专用于文件夹
选项 | 字母 | 含义 |
---|---|---|
谁 | u | Owner |
哪个组 | g | Group |
其他人 | o | Other |
所有人 | a | All |
作用 | + | 增加权限 |
作用 | - | 减少权限 |
作用 | = | 确定权限 |
权限 | r | 可读 |
权限 | w | 可写 |
权限 | x | 执行 |
chmod u+rwx,g+rx,o+r a.txt
chmod o-r a.txt
chmod u=rwx,g=rw-,o=xr a.txt
//当三个身份中有一个有全部权限时,ls结果中的文件名会变成不同的颜色
chmod +rwx a.txt
//如果不指定`ugoa`中的任意一个,则默认为`a`
数值 | 权限(读、写、执行) | 对应的字母形式 |
---|---|---|
0 | 000 | --- |
1 | 001 | --x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r-- |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
chmod 777 文件路径 //给文件赋予777(rwxrwxrwx)权限信息
root用户创建的文件的默认权限信息为rwxr-xr-x
。
chmod 777
并不代表Other一定可以删除该文件,因为Other可能没有该文件所在文件夹的w
权限。
属主即Owner,属组即Group。
chown [-R] user 文件/文件夹路径 //将文件/文件夹的owner改为名为user的用户
chgrp [-R] group 文件/文件夹路径 //将文件/文件夹的group改为名为group的用户组
chown [-R] user:group 文件/文件夹路径 //同时更改owner和group
全程为Switch User Do,root事先允许某些用户执行哪些指令,配置文件在/etc/sudoers
。
Vim只有r
权限,如果要编辑,则应该用visudo
命令打开。
visudo /etc/sudoers
=============================================
//用户名或%组名 允许登录的主机=(以谁的身份执行,all→root,该括号缺省时为all) 当前用户可以执行的命令,多个命令用","分割
root ALL=(ALL) ALL //root账户能执行所有命令
user1 ALL= /usr/sbin/useradd //允许user1使用useradd指令
//查看指令路径用 which 命令
user1 ALL= !/usr/bin/passwd //不允许user1修改其他账户的密码
user1 ALL= /usr/bin/passwd //允许user1修改其他账户的密码,包括root账户
user1 ALL= !/usr/bin/passwd root //不允许user1执行passwd root命令
使用sudo
指令时需要输入的密码时当前用户的,不是root用户的。
查看普通用户所拥有的特殊权限:sudo -l
检测当前主机与目标主机之间的连通性。
ping 主机地址(ip地址/主机名/域名) //测试本机与主机是否联通
查找当前主机与目标主机之间所有的网关(即路由器)。
traceroute 主机地址(ip地址/主机名/域名) //查看沿途路由器
//"* * *"表示路由器未响应
根据IP地址获取MAC地址(即物理地址)。
arp -a //查看本地arp缓存表
arp -d 主机地址 //删除主机地址对应的本地arp缓存记录
用于抓包。
tcpdump port 端口 [host 地址]
tcpdump -l 设备网卡名
- bash:默认Shell,存放于
/bin/bash
- sh:bash的最原始版本,功能少
- zsh:最庞大的Shell,较复杂
- nologin:用户不允许登陆操作系统,存放于
/sbin/nologin
test.sh
=======================================
#!/bin/bash //必须放在第一行,指定脚本使用的Shell
//"#"代表注释
echo "hello world!" //分号可加可不加,单双引号均可
//双引号支持变量引用和转义字符,但是单引号不支持
Terminal
=======================================
(base)root@localhost# chmod u+x test.sh
(base)root@localhost# ./tesh.sh //方法一
hello world!
(base)root@localhost# /bin/bash test.sh //方法二
hello world!
与terminal中命令语法一致。
test.sh
=======================================
#!/bin/bash
name="string" //"="左右不能有空格,不然bash会报错找不到name指令
echo $name
time=`date +'%F %T'` //执行命令并将结果赋给变量时需要用反引号
//不然会将命令本身当作字符串
str1 = "123" "456" //字符串的连接,中间不加任何符号
echo $time
readonly fixed=10 //创建只读变量,强行修改时会报Warning
read -p "input something" info //接受用户输入,将输入赋给变量,变量不需要提前定义
echo $info
unset info //删除变量,如果删除后强行调用变量,则返回空字符串
test.sh
=======================================
if [condition1]
then
command1
elif [condition2]
then
command2
else
command3
fi
原生bash脚本不支持数学运算,但是可以通过其他的命令来实现,例如expr
或awk
。
表达式和运算符中间必须有空格!
除了变量的赋值不需要空格,其他都需要空格。
注意:*会被识别成通配符,因此乘法应该写为\*
。
val=`expr $num1 + $num2`
val=$num
[ $a -eq $b ] //判断两个数是否相等
[ $a -ne $b ] //判断两个数是否不相等
[ $a -gt $b ] //判断左边的数是否大于右边的数
[ $a -lt $b ] //判断右边的数是否大于左边的数
[ $a -ge $b ] //判断左边的数是否大于等于右边的数
[ $a -le $b ] //判断右边的数是否大于等于左边的数
[ ! false ] //返回true
[ $a -o $b ] //或运算
[ $a -a $b ] //与运算
[ $a = $b ] //判断字符串a,b是否相等
[ $a != $b ] //判断字符串a,b是否不相等
[ -z $a ] //判断字符串a是否为空
[ -n $a ] //判断字符串a是否不为空
[ $a ] //判断字符串a是否不为空
[ -b $file ] //判断文件路径a对应的文件是否为块设备文件
[ -c $file ] //判断文件路径a对应的文件是否为字符设备文件
[ -d $file ] //判断文件路径a对应的文件是否为目录
[ -f $file ] //判断文件路径a对应的文件是否为普通文件
[ -g $file ] //判断文件路径a对应的文件是否设置SGID位
[ -k $file ] //判断文件路径a对应的文件是否设置粘着位
[ -p $file ] //判断文件路径a对应的文件是否有名管道
[ -u $file ] //判断文件路径a对应的文件是否设置SUID位
[ -r $file ] //判断文件路径a对应的文件是否可读
[ -w $file ] //判断文件路径a对应的文件是否可写
[ -x $file ] //判断文件路径a对应的文件是否可执行
[ -s $file ] //判断文件路径a对应的文件是否不为空文件
[ -e $file ] //判断文件路径a对应的文件或目录是否存在
test.sh a b c d ....
其中的a,b,c,d,....分别对应着脚本中可以使用的$1,$2,$3,$4,....
默认端口号3306。
一款纯命令行浏览器,需要先安装。
互联网真奇妙,梦回千禧年网上冲浪,捏麻麻滴太潮辣:sweat_smile:
(base)root@localhost# mysql
Enter current password for root(enter for none): //初次登陆时root密码为空,按回车
Set root password?(Y/N)Y //是否设置root密码,选择是
设置密码:
(base)root@localhost# service mysqld start/stop/restart
//进入MySql
(base)root@localhost# mysql -uroot -p
Enter password:
Welcome to Mysql Shell!
mysql>exit
(base)root@localhost#
数据库存储目录为/var/lib/mysql
,配置文件存放在/etc/my.cnf
。
- 数据库:整个数据库文件,等价于Excel的*.xls文件
- 数据表:等价于Excel中的worksheet
- 记录:等价于Excel中的行
- 表头:等价于Excel中的列
mysql> show databases; //展示所有数据库名称
mysql> create database 库名; //创建数据库
mysql> drop database 库名; //删除数据库
mysql> use 库名; //切换数据库
mysql> use 库名; //选择数据库
mysql> show tables; //显示当前数据库中的所有表名
mysql> create table 表名称( //创建数据表
-> 列名称1 数据类型 [NOT NULL AUTO_INCREMENT],
-> 列名称2 数据类型,
-> 列名称3 数据类型,
-> private key(主键字段名)
-> );
mysql> desc 表名; //查看数据表
mysql> drop table [IF_EXISTS] 表名; //删除数据表
//实战操作
mysql> use test; //选择MySql安装自带的演示数据库test
mysql> create table table1{
-> id int(11) not null auto_increment,
-> username varchar(20),
-> password char(32),
-> primary key(id)
-> );
Query OK, 0 rows affected (0.38sec)
mysql> desc table1;
mysql> drop table if exists table1;
数据类型:
- int:整形数字
- char:定长字符
- varchar:不定长字符串
//增加记录
mysql> insert into 表名称 values (值1,值2,值3,...);
mysql> insert into 表名称 (列1,列2,列3,...) values (值1,值2,值3,...);
//实战操作,`string`表示这是字段,如果能确定这是字段则不用加反引号
mysql> insert into table1 (`username`,password) values ('刘运昊','123456');
//查询记录
mysql> select 列名称1,列名称2 from 表名称 where 条件;
mysql> select * from 表名称 where 条件; //"*"是通配符,在此表示所有的列
//实战操作
select username,password from table1 where id=2;
select * from table1 //查询全部字段
//更新记录
mysql> update 表名称 set 列名称1=新值1,列名称2=新值2,.... where 列表值=新值
//一定要写where!否则更新所有行的值!
//实战操作
update table1 set password='111111' where id >=2;
//删除记录
mysql> delete from 表名称 where 列名称=值;
//一定要写where!否则直接删除整个表!
//实战操作
mysql> delete from test where id=2;
//备份文件可以取.tar.gz或.spl等,其中.spl文件可以直接用vim打开
//备份所有数据库,包括表头和数据
(base)root@localhost# mysqldump -uroot -p123456 -A > 备份文件路径
//备份所有数据库,只包括数据
(base)root@localhost# mysqldump -uroot -p123456 -A -t > 备份文件路径
//备份指定库,包括表头和数据
(base)root@localhost# mysqldump -uroot -p123456 库名 > 备份文件路径
//备份多个库,包括表头和数据
(base)root@localhost# mysqldump -uroot -p123456 --databases db1 db2 > 备份路径
(base)root@localhost# mysqldump -uroot -p123456 -B db1 db2 > 备份路径
//用mysql命令行的source方法还原全部数据库
mysql> source 备份文件路径
//用系统命令行还原全部数据库,警惕大于号小于号的方向
(base)root@localhost# mysql -uroot -p123456 库名 < 备份文件路径
//用mysql命令行的source方法还原单个数据库(先指定数据库)
mysql> use 库名
mysql> source 备份文件路径
//用系统命令行还原单个数据库
(base)root@localhost# mysql -uroot -p123456 库名 < 备份文件路径
//用mysql命令行的source方法还原多个数据库(备份文件有多个数据库的备份,此时不需要指定数据库)
mysql> source 备份文件路径
//用系统命令行还原多个数据库(备份文件有多个数据库的备份,此时不需要指定数据库)
(base)root@localhost# mysql -uroot -p123456 < 备份文件路径
设置MySql连接字符集(只能临时设置,前提是保证数据库、远程连接终端、服务器三者的字符集一样):
mysql> set names utf8;
常用的MySql管理工具有B/S架构、C/S架构两类。(B→browser,C→client,S→service)
- B/S:phpMyAdmin
- C/S:navicat、mysql workbrach(体积过大)
允许MySql远程登录:
mysql> use mysql; //选择mysql数据库
mysql> select host,user from user //显示允许登录的ip和用户
//由于这个table中的表头太多,直接添加一行的话很麻烦,因此最好直接修改已有的行
//将其中一个记录的host值更改为"%",表示允许任何ip登录
mysql> update user set host = '%' where host = 'yunwei';
//最后刷新权限表或重启mysql
mysql> flush privileges; //刷新权限表