1 Linux基础命令
1.1 最基础命令
-
所有命令后台执行 – 在命令的末尾加 &
-
pwd 查看当前目录
-
ping www.baidu.com
-
查看ip ifconfig
-
netstat -tunlp|grep 端口--查看占用进程的端口号(ps –ef|grep 端口 也可以)
-
解压与压缩(zip/tar)
-
解压zip包
#|$ unzip ZIPNAME.zip
-
压缩为zip包
#|$ zip ZIPNAME.zip FILE
-
解压tar包
#|$ tar -zxvf TARNAME.tar
-
解压到指定目录
#|$ tar -zxvf TARNAME.tar PATH
-
压缩为tar包
#|$ tar -zcvf TARNAME.tar.gz FILE
-
1.2 文件管理命令
-
文件的创建
-
创建方式1
#|$ touch FILENAME
-
创建方式2
#|$ vi FILENAME
-
-
文件夹创建
-
普通创建
#|$ mkdir DIRECTORY
-
创建多级目录,必须加参数-p, 表示目录不存在也创建
#|$ mkdir -p DIRECTORY01/DIRECTORY02/DIRECTORY03
-
-
链接的创建
-
创建一个文件或文件夹的软链接,-s表示软链接
#|$ ln -s FILENAME/DIRECTORYNAME LINKNAME
-
创建一个文件或文件夹的硬链接,-P表示硬链接
#|$ ln -P FILENAME/DIRECTORYNAME LINKNAME
-
-
**文件的追加
>>
,重定向输出到指定文件>
**- 重定向
#|$ echo 'CONTENT' >> FILENAME
- 重定向
-
自带编辑工具vi的使用
-
编辑文件内容
# vi filename
-
进入编辑插入模式
#|$ i
-
退出编辑模式
#|$ ESC键
-
保存并退出
#|$ :wq
-
不保存退出
#|$ :q!
-
-
文件的编辑
vi/vim FILENAME
快捷键:
在vi查看的模式下,
-
删除光标所在的一行
dd
-
保存文件并退出
ZZ
-
删除光标覆盖的字符
x
-
下一行进行插入
o
-
跳转到最后一行
shift + g
-
-
-
文件内容的查看
-
查看全部内容,文件内容比较少
#|$ cat FILENAME
-
翻页查看
#|$ more FILENAME
-
查看文件末尾的内容,通常与-f参数连用,适合查看系统的日志信息
#|$ tail FILENAME
-
查看文件开头的内容,适合查看文件的格式,内容模板样式
#|$ head FILENAME
-
-
文件的拷贝
-
拷贝一个文件到一个目录中
#|$ cp FILENAME DIRECTORY
-
拷贝一个文件的内容到一个新的文件中
#|$ cp FILENAME NEWFILENAME
-
拷贝一个文件夹到另外一个文件夹中
#|$ cp -R DIRECOTRY NEWDIRECTORY
-
-
文件的移动或重命名
-
同一个目录下就是重命名
#|$ mv FILENAME NEWfILENAME
-
不同目录下就是移动
#|$ mv FILENAME DIRECTORY
-
-
文件的删除
-
删除目录,如果目录有内容,需要加递归参数 -R,如
#|$ rm -R DIRECTORY
注意事项:删除的目标最好是绝对路径,不要相对路径
-
-
文件的搜索
-
搜索指定目录下的某个文件
#|$ find -name PATH/FILENAME
-
模糊搜索指定目录下的某个文件
#|$ find PATH/FILENAME*
-
1.3 用户管理
-
创建用户
-
新增用户
# useradd USERNAME
-
修改密码
# passwd USERNAME
在Linux系统下,默认情况下,创建一个用户的同时,会给用户在系统的目录下创建一个属于自己的用户目录,该目录称为用户主目录/宿主目录
规则: /home/username
exp: /home/moyue,用户主目录可以使用 ~ 表示
-
-
切换用户
- 切换用户
#|$ su - USERNAME
- 切换用户
1.4 系统管理
-
系统内核版本信息
- 使用什么系统
#|$ uname
- 使用什么系统
- 使用的内核版本
#|$ uname -r
-
系统的服务器信息(cpu信息)
#|$ cat /proc/cpuinfo
-
系统的内存信息
#|$ cat /proc/meminfo
1.5 磁盘管理
-
查看磁盘的使用情况
#|$ df -lh
-
查看当前目录占用的内存
#|$ du
-
查看指定目录占用的内存大小
#|$ du -sh DIRECTORY
-
查看创建系统的内存划分情况
# fdisk -l
-
修复磁盘,自动修复(重启虚拟机遇到提示某个磁盘损坏)
# fsck 磁盘名 [fsck: file system check]
-
查看挂载磁盘信息
# mount
-
挂载磁盘
# mount 磁盘名 设备名
-
卸载磁盘
# umount 磁盘名
1.6 内存管理
-
查看系统内存使用情况
#|$ free
-
查看系统进程
查看进程命令
#|$ top
查看进程更加详细
#|$ top -M
2 Linux系统常用文件
2.1 目录认识
目录 | 介绍 |
---|---|
/usr/bin、bin | 存放所有用户可以执行的命令 |
/usr/sbin、sbin | 存放只有root可以执行的命令 |
/home | 用户默认的宿主目录 |
/proc | 虚拟文件系统,存放当前进程信息 |
/dev | 存放设备文件 |
/lib | 存系统程序运行所需的共享库 |
/lost+found | 存放系统出错的检查结果 |
/tmp | 存放临时文件 |
/etc | 存放系统配置文件 |
/var | 包含经常发生变动的文件,如日志文件,计划任务等 |
/usr | 存放所有命令、库、手册等,通常程序会安装在/usr/local目录下 |
/boot | 内核文件及自举程序保存位置 |
/mnt | 临时文件系统的安装点 |
2.2 环境变量配置文件etc/profile
-
重新加载环境变量配置文件
# source PROPERTIES
-
通过回声查看环境变量
#|$ echo $PATH
,echo $JAVA_HOME
2.3 Host文件 /etc/hosts
配置为: ip地址 主机名 域名
例如: 192.168.169.136 moyue www.moyue.com
主机名称与ip地址映射的好处:可以直接使用主机名称或域名代替ip地址
2.4 查看网卡配置信息
-
查看网卡
/etc/sysconfig/network-scripts/ifcfg-eth0
-
如何重启网络设置
#|$ service network restart
-
如何启动图形管理界面来配置网卡
#|$ setup
-
2.5 权限文件 /etc/sudoers
在文件的最上插入 USERNAME ALL=(root)NOPASSWD:ALL
修改权限文件如上,则凡是需要root用户的操作的命令,前面加sudo即可
2.6 系统的编码文件 /etc/sysconfig/i18n
修改系统的编码为UTF,解决不能保存中文问题: LANG="en_US.UTF-8"
Windows的默认编码为GBK,Linux的默认编码为UTF-8。在Windows下编辑的中文,在Linux下显示为乱码。为了解决此问题,修改Linux的默认编码为GBK。方法如下:
- 方法1
vi /etc/sysconfig/i18n
, 文件内容默认为:
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
修改为:
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
- 方法2
- vi /etc/profile
修改为:
LANG="zh_CN.GBK"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
2.7 防火墙文件 /etc/sysconfig/iptables
查看 # service iptables status
关闭 # service iptables stop
开启 # service iptables start(restart)
永久性设置防火墙关闭/开启 # chkconfig iptables off/on
放行某个端口 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
2.8 开机执行脚本文件
编辑 /etc/rc.d/rc.local
文件内容,往里面添加开机想执行的内容即可
2.9 修改远程登录进入默认目录
-
进入当前用户目录
cd ~
-
编辑
.bashrc
,往里面添加要跳转的目录,比如cd /usr/local
3 定时调度
在Linux当中,自带的调度功能Crontab,针对用户,每个用户都可以调度自己的任务
-
列出当前所有的定时任务
#|$ crontab -l
-
删除所有的定时任务(若要删除部分,直接编辑文件,用#注释即可)
#|$ crontab -r
-
编辑自己的定时任务
#|$ crontab -e
crontab的基本定义: * * * * * command
(6个字段,前面固定5个,所有字段之间空格隔开),前面5个代表时间,即:每分、时、日、月、星期执行一次,command代表具体命令
每个星的解释:
* | * | * | * | * |
---|---|---|---|---|
分:1-59 | 时:0-23 | 日:1—31 | 月:1-12 | 星期:0-6 |
1. 每2分钟执行一次 */2 * * * * command
2. 每2小时执行一次 * */2 * * * command
3. 每2天执行一次 * * */2 * * command
4. 每2个月执行一次 * * * */2 * command
5. 每2星期执行一次 * * * * */2 command
6. 每晚9:30执行一次 30 21 * * * command
7. 每月1号、11号、21号的2:31执行一次 31 2 1,11,21 * * command
技巧:
如果是数字,则遇到数字就执行一次
如果是星星,*代表每单位执行一次,*/2代表每2个单位执行一次,依此类推
8. 每天20:00 到23:00, 每半个小时执行一次
语意翻译: 每30分钟执行一次,在20点21点22点23点的时候执行
即:
*/30 20,21,22,23 * * * command
补充:
20点开始,所以可以认为每半个小时就是每次遇到0和30的时候;
20到23点这段连续的时间,也可以写作20-23
因此,上面的命令也可以写作:
0,30 20-23 * * * command
4 Shell基础编程
Shell是一段写好的可以执行的脚本,通常以.sh作为后缀名
bin目录下的Shell脚本执行程序:sh和bash
**sh是bash的一个软链接**
#|$ cd /bin
#|$ ll得到
lrwxrwxrwx. 1 root root 4 Oct 7 05:43 sh -> bash
由此可以看出,sh是bash的一个软链接[sh -> bash]
通常情况下,再sh脚本的第一行,会指定用哪个脚本来执行它本身 #!/bin/bash
或者 #!/bin/sh
除了第一行,其他行中出现#都代表注释
-
变量
-
根据作用域,变量分为:
本地变量:在shell脚本中声明,只在该脚本有效
环境变量:又称全局变量,在shell脚本中,所有的进程都有效
-
变量的赋值
VARIABLENAME=VALUE
注意事项:等号两边不能有空格,如果要赋值为空值,可以在等号后边加上一个换行符
-
显示变量的值
echo $VARIABLENAME 或 echo ${VARIABLENAME}
显示所有的变量 set
-
清除变量
unset $VARIABLENAME
-
创建全局变量
export VARIABLE=VALUE
-
注意事项:
* 全局变量按照惯例全部都应该大写
* 可被所有的shell环境下访问
* 如果父工程产生了子工程,则环境变量可被继承并复制
-
位置参量
-
sh脚本后面所加的参数就是位置参量,多个参数之间用空格隔开那么如果某个参数有空格,那么该参数必须用引号括起来
-
位置参量是一组特殊的内置变量,通常被shell脚本用来接收命令行接受的参数,或被函数用来保存传递给它的参数
-
在脚本中,如果需要使用传递过来的位置参量,用$NUM来接收,其中NUM为参数的位置,$1:第一个参数
-
注意事项:
大于9的参数位置都必须用{}包裹,即${10}
$0: 表示当前脚本的文件名
$#: 表示实际传入的参数个数
$*: 将所有的参数拼成一个字符串显示出来,每个参数用一个空格隔开
$@: 没有加双引号的时候和$*一样,加了双引号有区别
$$: 脚本运行的当前进程号
$!: 最后一个运行的进程号
$?: 显示前面最后一个命令的退出状态,0表示么有错误,其他值为有错误
备注:linux所有的命令都有一个状态码
- 数组
-
数组的定义
arr=(var1 var2 ..)
-
获得数组的值
${arr[index]}
-
备注:
获得所有的元素 ${arr[*]}
获得元素的个数 ${#arr[*]}
-
给数组中的元素赋值
arr[index]=NEWVAL
-
时间
-
显示时间
date
-
格式化(不会就man或help一下)
date +%Y-%m-%d
或date +%Y/%m/%d
-
赋值某个变量
var=$(date)
-
时间的增加和减少
-
var=$(date --date='1 days') : 明天
var=$(date --date='-1 days') : 昨天
var=$(date --date='1 days ago') : 昨天
var=$(date --date='-1 days ago') : 明天
-
日历
-
cal
-
cal 2016
-
cal 09 2016
-
-
test判断
test -e filename
-e: 该文件/文件夹是否存在[exists]
-f: 该文件是否存在
-d: 该文件夹是否存在
-r: 该文件/文件夹是否可读
-w: 该文件/文件夹是否可写
-x: 该文件/文件夹是否可执行
test -eq NUMBER
-eq: -ne: -gt: -lt: -ge: -le: 两个整数之间的数值判断
test -z string
-z: 字符串是否为0?若为空字符串,则为true
-n: 字符串是否非为0?若为空字符串,则为false
str1 = str2: 两个字符串是否相等
str1 != str: 两个字符串是否不等
test 等价
test -e filename 等价于 [ -e filename]
- if判断
if [ balabala ]; then
balabala
elif [ balabala ]; then
balabala
else
balabala
fi
- 循环
for循环1
for var in 1 2 3 4 5
do
balabala
done
for循环2
for((i=0;i<${num};i=i+1))
do
balabala
done
while循环1
while [condition]
do
balabala
done
while循环2
until [condition]
do
balabala
done
-
$(整体):
因为$(num1) + $(num2)不是整体,所以需要变成整体 ($(num1) + $(num2))
编程整体后,使用$()对整体进行解析,才能完成相加 $(($(num1) + $(num2)))