linux 学习内容总结:
linux 的基本介绍和安装(MobaXterm 连接跳板机) ,linux的常用命令和权限调整,shell编程注意点,linux定时任务
linux的基本介绍
Linux是一款广泛应用于服务器的操作系统。操作系统是硬件基础上的第一层软件,而应用软件需要安装到操作系统上才能用。 Linux 的特点: 安全 免费开源 多用户 一个用户的操作不会影响到其他用户 十分稳定而且有效率。而且作为服务器,linux 具有目前最好的生态系统,服务端的各种软件都为它而设计,默认操作系统环境为linux。
llinux 学习环境 :
采用 VMware Workstation Pro+CentOS 6.5 +MobaXterm(远程终端软件)
VMware Workstation Pro官网下载地址:
https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
CentOS 6.5下载详解:
http://blog.csdn.net/u012453843/article/details/52819756
在VMwareWorkstationPro上安装CentOS6.5 来模拟真实的物理机器。VMware是一种虚拟机,可以在其上安装windows,也可以安装linux,数量不限。由于linux在服务器上,而服务器却在遥远的地方,所以一般不直接在其上操作,在者,也并不方便,所以在学习中采用了MobaXterm 。
如果在使用MobaXterm 时需要使用跳板机,如何加入:
创建seesion:
添加跳板机秘钥文件:
在VMware安装CentOS成功之后, 登陆后修改net连接方式。nat方式是给虚拟机一个块独立的网卡 稳定 ip不变 。具体步骤:鼠标在虚拟机上右键- 》设置-》网络适配器 -》右侧选自定义vmnet8 保存虚拟机-》编辑-》虚拟网络编辑器-》更改设置-》将net8改成NAT模式 应用 确定退出 很多情况下改为 并没有生效 可以先改成桥接或其他 -》保存 然后再改回 -》保存
修改网络成功之后,右键桌面,在弹出的列表中选择 open in Terminal,输入命令 ping+电脑的ip地址,如果成功,则说明你的net修改成功。然后再输入命令 ifconfig ,把显示的ip地址 用户 密码加入到MobaXerm 连接中即可。
linux 常用命令:
- cd 切换目录 cd / 根目录
cd ~ 家目录
cd a/b/c 相对路径:当前目录下的a文件夹下的b文件夹下的c
cd /a/b/c 绝对路径:根目录下的a 文件夹下的b文件夹下的c
cd .. 回到上一级目录 cd - 回到上一层目录 - 查看目录
ls 选项 -a 全部 包括隐藏文件
-R 级联显示
ll 详细查询 -h kb显示文件大小 - 创建文件夹
mkdir 创建文件夹 mkdir -p 连续创建多层文件夹 - rm 删除命令 rm 删除文件 rm -r 删除文件夹
- cp 复制 可以复制到当前 目录 或其他目录 同时可以修改文件名
cp 要复制的文件名 目标目录/文件名 eg cp file /usr/men/tmp/file1 把file文件复制到该目录下,并且把file 文件改名为file1
cp -r 复制目录 eg cp -r /usr/men /usr/zh 将/usr/men下的所有文件复制到/usr/zh中 - mv 移动 改名 源文件被移至目标文件有两种不同的结果:
- 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
- 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 详见:http://man.linuxde.net/
-
touch 文件名 Linux不分扩展名 创建文件
已存在的文件名 更新 -
vim 编辑器 i 写入
按esc退出
:-> wq 保存并退出
:-> q!强制退出 -
cat 查看文本内容
cat a > b 将a的内容给b
cat a >> b 将a的内容追加给b -
tar 打包压缩 打包:将一大堆文件或目录变成一个总的文件 压缩:通过压缩算法将大文件变成一个小文件
两个功能 一个压缩 一个是解压缩
选项 -c 压缩 创建新的备份文件
-x 解压缩 从备份中还原文件
-f 指备份文件
-v 显示指令执行过程 -z 指以-gzip压缩 压缩 tar -czvf 压缩后文件名 目标文件
解压缩 -xzvf 目标名
-xzvf 目标名 -C 目标目录 -
pwd 显示当前所在位置
-
date 指令 显示或者设置系统日期时间 格式 date <+时间日期格式>:指定显示时使用的日期时间格式 eg: date +"%Y-%m-%d" 具体见http://man.linuxde.net/date
-
cut 指令 用来显示行中指定部分,显示文件内容 格式 cut (选项)(参数) 选项有: -d : 指定字段的分隔符 通常使用的为“TAB” -f :显示指定字段内容
-
| 两段可以放置不同的命令 把前一个命令的输出作为后一个命令的参数
用户和组的权限命令:
基本知识:
权限:通过ll或ls -l 可以查看文件的类型和权限 ,一共有10位 第一位是类型位 d 表示为目录 —表示为文件 剩下9位 每三位一组 分别表示 所属用户 (u)组 ( g) 其他 (o ) 。 权限的表示 x代表可执行 w代表可写 r代表可读 。更方便的可以使用 1 2 4来表示执行写读 这样他们的和结果组合形式只有一种可能。
所以我们还可以使用三个数字来表示755用户本身具有所有权限而组和其他都只具有执行和读权限 。
修改权限:chmod 命令 修改权限 用+增加权限,用-删除某项权限。注:权限的调整只能在root用户登陆时
具体用法
chmod u+x,g+w fileName //为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r fileName
chmod 764 fileName
chmod a+x fileName //对文件f01的u,g,o都设置可执行属性
更改一个文件夹的用户所属:
chmod hadoop:hadoop -R fileName
shell编程注意点
- 变量的创建:直接使用字母为变量命令 使用等号赋值 注意变量和等号之间不可以有空格 使用$变量名 ${变量名} 引用变量名 eg a="hello"
- 数组的创建:同变量的创建类似,只是用小括号中的元素表示数组中的内容 eg array=('hh' 'qq')
-
变量的输出:采用echo 输出变量中的内容 eg echo $a
-
变量的比较:如果是数字,采用 -gt -lt -eq,如果是字符串 采用 == 在两端 必须有空格
-
函数的编写:定义函数 语法: function 函数名 () { 函数体 } 调用函数 函数名 参数1 参数2 $1 取第一个参 echo 输出结果 $(函数名取结果) 如果函数存在返回值,那么可以在函数中使用echo语句,将结果输出到标准输出上,所以在主程序中可以使用变量接收
-
文件的创建编写和执行:采用vim命令可以创建一个文件,同时修改文件中用户的权限,该文件必须是可执行的文件才可以执行;编写:第一行应该写 #!/bin/bash 表示什么文件版本 #表示注释;执行:./文件名 执行可执行文件 bash 文件名 强制执行文件
if 语法:
if [ ] #中括号两段要有空格
then 要执行的语句
elif [ ]
then 要执行的语句
else 要执行的语句
fi 表示结束
case语法:case 变量 in
选项1) 要执行的语句;; #注意!两个分号
*) default
esac 表示结束
while语法: while [ $i -lt 10 ]
do #表示循环体开始
done #表示循环体结束
注意 在变量自增的时候 如果直接 a=$num+1 字符串拼接 a中的内容就为 1+1
num=$(($num+1)) #当数字计算 或者 num=$[$num+1]
for语法: for n in a b c d
do
$n
done
注:linux中的双小括号,中括号,小括号的用法区别:转载自 http://blog.csdn.net/ztf312/article/details/52317571点击打开链接
小括号:
- 得到命令输出 a=$(cmd) 等同于 a=$`cmd` 便是将cmd 中得到的输出结果传递给变量a
- 初始化数组 array=(a b c)
双小括号(()):
- $((exp)) 只要exp是符合c语言的运算规则的表达式,运算符
- 省去$的算数运算 for((i=1;i <5;i++));if(($i<6));a=5 ((a++));那么a的值被更改为6
中括号 []:
- 字符串比较 ==和!==
- 数字比较 -gt -lt -eq
- 数组索引 array[0]
linux中单引号,双引号的区别:
单引号:被单引号括起来的字符都作为普通字符出现
双引号:双引号括起来的字符除了 $ ,',",,保留本身意义外,其他也当作普通字符处理。
使用范例:
判断某个文件是否存在,如果不存在,创建该文件:
-f 可用于判断文件是否存在
-d 可用于判断目录是否存在
if [ ! -f ${WORKROOT}/source_log/logs/${day}/${log_name} ]; then
touch ${WORKROOT}/source_log/logs/${day}/${log_name}
fi
判断某个字符的长度是否大于10:
if [ ${#WORKROOT} -lt 10 ]; then
exit 1
fi
判断传入的参数个数:
if [ $# -eq 2 ];then
day=$1
hour=$2
elif [ $# -eq 1 ];then
day=$1
hour=`date -d -1hour +%H`
else
day=`date --date='1 days ago' +%Y%m%d`
hour=`date -d -1hour +%H`
fi
shell 脚本实例
输出某一段时间中的每天:
#!/bin/sh
if [ $# -eq 2 ];then
date1=$1
date2=$2
fi
echo "date1: $date1"
echo "date2: $date2"
tempdate=`date -d "-0 day $date1" +%Y%m%d`
enddate=`date -d "-0 day $date2" +%Y%m%d`
tempdateSec=`date -d "-0 day $date1" +%s`
enddateSec=`date -d "-0 day $date2" +%s`
hour=`date -d -1hour +%H`
echo "####################################"
echo 'tempdateSec:'$tempdateSec
echo 'tempdate: '$tempdate
echo 'enddate: '$enddate
echo $hour
#for i in `seq 1 130`; do
for i in `seq 1 600`; do
if [[ $tempdateSec -gt $enddateSec ]]; then
break
fi
echo $tempdate
sh realtime_daily.sh $tempdate
if [[ $hour -eq 23 ]]; then
sleep 5m
fi
sleep 10m
tempdate=`date -d "$i day $date1" +%Y%m%d`
tempdateSec=`date -d "$i day $date1" +%s`
done