Linux学习笔记 - Shell脚本编程实例

下面的例子基本上都是上面的知识点,比较扩展一点的就是awk命令的用法,下面代码仅作参考,写的不好,请见谅;错误的地方烦请指出,不胜感激!

1、测试Apache服务是否启动,若没有启动,则启动Apache服务

1
2
3
4
5
6
7
#! /bin/sh
# 测试Apache服务是否启动,若没有启动,则启动Apache服务
web=`/usr/bin/pgrep httpd`
if [ "ABC$web" = "ABC" ]
then
/etc/init.d/httpd start
fi

2、判断某个文件属于什么类型的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /bin/sh
# 判断一个文件属于什么类型
f [ -d $1 ]
then
echo "这是一个目录";
elif [ -f $1 ]
then
echo "这是个普通文件"
elif [ -c $1 ]
then
echo "这是字符特殊文件"
elif [ -b $1 ]
then
echo "这是块特殊文件"
else
echo "我也不知道这是啥玩意"
fi

3、踢出用户的脚本

1
2
3
4
5
6
7
8
9
10
11
12
#! /bin/sh
# 判断用户是否在线,存在的话踢出用户
username=$1
/usr/bin/w > whoIsOnline
userString=`/usr/bin/awk -v user=$username '{if($1 == user) print $1}' ./whoIsOnline`
if [ "ABC$userString" = "ABC" ]
then
echo "$1 is not online"
else
killId=`/usr/bin/ps aux | /usr/bin/grep $username | /usr/bin/eprep -v grep |/usr/bin/awk {print $2}`
kill $killId
fi

4、显示用户的信息

1
2
3
4
5
6
7
8
9
#! /bin/sh
# 显示用户的相关信息
user=$1
if [ "ABC$user" = "ABC" ]
then
echo "请在命令行后面输入要查询的用户名!"
else
/usr/bin/grep ^$1: /etc/passwd | /usr/bin/awk -F ":" '{print "用户ID为"$3 ; print"用户组ID为"$4 ; print "你其实是"$5 ; print "你的主目录为"$6 ; print"你的默认Shell为"$7}'
fi

5、加减乘除的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#! /bin/sh
# 加减乘除的小脚本,主要练习case语句
case $2 in
+)
echo "$1 + $3 = `expr $1 + $3` "
;;
-)
echo "$1 - $3 = `expr $1 - $3`"
;;
\*)
echo "$1 * $3 = `expr $1 \* $3`"
;;
/)
if [ $3 = 0 ]
then
echo "除数不能为0"
exit
else
echo "$1 / $3 = `expr $1 / $3`"
fi
;;
*)
echo "您的输入不符合规范,请重新输入"
esac

6、打印出1到10之间的平方数

1
2
3
4
5
6
7
8
9
#! /bin/sh
# 打印1-10之间的平方数,主要练习while语句
#赋值的时候注意不要加空格
i=1
while [ $i -le 10 ]
do
echo "$i 的平方为:`expr $i \* $i`"
i=`expr $i + 1`
done
1
2
3
4
5
6
#! /bin/sh
# 打印1-10之间的平方数,主要练习for语句
for i in {1..10}
do
echo "$i 的平方为:`expr $i \* $i`"
done

7、累加求和(使用shift命令)

1
2
3
4
5
6
7
8
9
#! /bin/sh
# 使用shift命令累加求和
sum=0
while [ $# -gt 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "总和为:$sum"

Jekyll+多说,建立属于你的轻博客

Jekyll

什么是Jekyll,简单地说,它是一个静态博客网站;详细的说,请看Jekyll中文官网,请点击Jekyll中文官网。至于用法,请访问DOCUMENTATION

有时候,你明明知道有官方的说明文档,却总是以为不如去百度,Google来的方便,不断的变换关键词去搜索,而且还要去理解别人写的文档(没准他也不明白),其实你只要静下心来好好将官网文档看一遍,你会发现好多问题就解决了,还是不懂,再搜索时也会一眼辨出是不是你要的内容,这样会更加省时,而且学得扎实。

多说

多说是什么?

多说是追求最佳用户体验的社会化评论框,为中小网站提供新浪微博、QQ(QQ空间和腾讯微博)、人人、开心网、豆瓣、网易微博、搜狐微博、百度、淘宝、Google等多帐号登录并评论功能。它帮你搭建更活跃,互动性更强的评论平台。具有众多实用特性,功能强大且永久免费。

当然上面的文字不是我写的,“多说”自己说的,请查看

有人就会说了,既然上面的内容都能在官网查到了,我还要你干嘛?没错,对于更权威的文档,我是很有必要推荐大家看的,而这里我仅仅是将本人搭建轻博客的过程做一个记录,一来方便自己今后查看,二来给你做一个参考,而且前一个目的才是主要的,仅此而已。

轻博客(Jekyll+多说)

Jekyll是比较简单地一个静态博客框架,当然有在这基础上增强的jekyll-bootstrap项目,有兴趣的可以去了解一下,搭建jekyll-bootstrap默认就有主题、评论等增强功能,我之前也搭建过,但是感觉功能太全了,也就没有了自定义的乐趣了,而且它默认的评论系统是disqus(国外比较强大的一个评论系统),毕竟是国外的,对于本地化的效果不是很好,比如QQ、微博分享及账号方面,还是国内的评论系统比较合适,于是,我就选择了多说评论系统。

  1. 首先看一下Jekyll的项目目录

    dir
    还是简要介绍一下各个目录的用途。

    • .git git版本控制器
    • CNAME GitHub Pages自定义域名用的
    • _config.yml Jekyll配置文件
    • _includes 包含文件的,比如说网页的Header,Footer等重复利用文件
    • _layouts 网页HTML文件
    • _posts 你的文章(markdown格式)
    • _site 生成的文章html文档
    • assert 文档目录,比如存放首页LOGO、图片等
    • css 样式表
    • index.html 首页文档,当然也可以添加About、Tag等页面
  2. 直接通过jekyll serve,然后访问0.0.0.0:4000就可以访问你的博客网站了,如果懂一点css和设计,简单修改一下css/main.css文件就可以设计一个漂亮的首页了。

  3. 加上多说评论框,将多说的通用代码贴到你的页面<body>之间就OK了,下面是多说的通用代码。_注:将下面代码写到_layouts/default.html文件中的body标签之间,至于放到哪个div下,自己决定_ 。
    duoshuo_src
    这段代码有4个地方要填

    • data-thread-key填上
    • data-title 填上
    • data-url 填上 your web site/
    • short_name 注册多说时填写的二级域名

      duoshuo_html
      网址填上你自己的域名,当然也要写到CNAME文件中,使用GitHub Pages功能,访问你的Blog。不明白的请看Github Pages,下面是访问www.linux2me.com的首页效果。


      当然我这个是比较难看了,没有网站前端基础,就是为了体验一下,胡乱弄了一个,文章也是胡乱导了几篇进去。
      BLOG

  4. 到此,属于你的轻博客也就搭建完成了。在多说的控制平台中,可以看到评论及文章,以及其数量的统计。
    duoshuo_control

    注意

    • 上面的data-titledata-url只是为了在多说的控制平台上更方便地控制,其实可以不填。但是data-thread-key肯定要区分开,不然多说就不知道评论在哪个页面上显示了,那可就乱了。
    • 文章中的图片可以直接通过![pic](/assert/pic.png)来显示,当然图片要放到assert目录下
    • 网站logo也可以通过<img src="/assert/logo.png" alt="logo"/>标签实现,加到_layouts/default.html就OK了。

Linux命令行学习笔记

摘要

前段时间看了几章《Linux命令行与Shell脚本编程大全》一书,针对自己不太了解的地方记录笔记如下,方便以后自己查阅。

1、两个环境变量

  • PS1:控制默认命令行提示符格式
  • PS2:控制后续命令行提示符格式
  • 就是这个:PS

2、查看bash shell相关信息

  • 通过man bash命令可以查看

3、cp命令

  • -p 保留源文件的访问时间和修改时间
  • -R 递归复制

4、链接文件

  • 软连接
  • 硬连接

软链接可以通过cp -s来创建,也可以使用ln -s来创建;而硬连接就是创建一个独立的文件,通过cp -l或是默认的ln命令来创建。

5、stat,file命令

  • stat 查看文件的统计信息
  • file 查看文件的类型

6、tail,head命令

  • 两者均是无需加载全部文件,适合查看大文件的首尾部分
  • tail -f 保持活动状态查看,通常应用于查看log信息

7、PS命令的三种风格

  1. Unix风格参数,常用:ps -ef
  2. BSD风格参数,常用:ps l
  3. GNU全字参数,最好用的功能是--forest(层级)

8、kill命令

  • kill PID,例如,kill 3940
  • killall http*,杀掉所有http进程

9、mount命令

  • mount -t type(类型) device(设备名) directory(目录)

例如:mount -t vfat /dev/sdb1 /media/a,其中vfat(windows的文件格式),也可以替换成ntfs(windows的文件格式)、iso9660(CD-ROM)

  • -o参数

ro:read-only
rw:read-write
user:允许普通用户挂载文件系统
cheak=name:挂载文件系统时不进行完整性检验
loop:挂载一个文件

例如:mount -t iso9660 -o loop KDE4-LIVE-DVD_32.iso mnt,把文件挂载到mnt目录下。

10、du 命令

  • -c:显示所有已列出的文件总大小
  • -h:按人类可读格式
  • -s:显示每个输出参数的总计

11、sort排序命令

  • -n:将数字识别成数字而不是字符
  • -M:按月排序
  • -k:排序从pos1位置开始,如果指定了pos2的话,到pos2位置结束。(–key=pos1[,pos2])
  • -t:指定一个用来区分键位置的字符

eg1. 对/etc/passwd文件根据用户ID进行数值排序
sort -t ':' -k 3 -n /etc/passwd
eg2.查看目录下哪些文件占用空间最多
du -sh * | sort -nr

12、bzip2工具

  • bzip2:用来压缩文件
  • bzcat:用来显示压缩的文本文件内容
  • bunzip2:用来解压
  • bzip2recover:用来尝试恢复损毁文件

13、tar命令

列举几个例子:

  1. 创建一个归档文件
    tar -cvf test.tar test1/ test2/
  2. 列出归档文件中的内容
    tar -tf test.tar
  3. 解开归档文件
    tar -xvf test.tar
  4. 解压gz文件(非常常用)
    tar -zxvf test.tar.gz

14、printenv命令

查看全局变量,系统环境变量一律使用大写字母。

15、bash命令

  • 启动一个新的shell。

16、set命令

  • set 显示某个特定进程设置的所有环境变量
  • printenv 显示的环境变量均包含在了set显示中

17、创建全局变量方法

  1. 首先创建一个局部环境变量
  2. 用export命令申明变量

18、删除环境变量

  • 删除局部环境变量 unset
  • 删除全局环境变量
    • 如果在子进程中删除了一个全局环境变量,只对子进程有效。

19、启动bash shell有3种方式

  1. 登陆是当作默认的登陆shell
    • 依次会处理以下文件
      • /etc/profile
      • $HOME/.bash_profile
      • $HOME/.bash_login
      • $HOME/.profile
  • 作为非登录shell的交互式shell
    • 不是登陆时启动的,而是手动启动的shell称作交互式shell
  • 作为运行脚本的非交互shell

20、useradd命令

useradd命令用于添加新用户,当然不是讲这个功能。
useradd -D 查看你的Linux系统中系统默认值。

信息中有一项内容为:SKEL=/etc/skel
允许管理员创建一份默认的HOME目录配置,然后把它作为创建新用户HOME目录的模版。
默认情况下,useradd不会创建HOME目录,useradd -m创建HOME目录,并将/etc/skel复制过来。

21、userdel命令

  • userdel -r test 同时删除test用户的HOME目录

22、修改用户账户信息

  • passwd 修改密码
  • chpasswd 从文件中读取登陆名密码
  • chage 修改密码的过期日期
  • chfn 修改用户账户的备注信息
  • chsh 修改用户账户的默认登陆shell
  • usermod -l 用来修改用户账户的登陆名
  • usermod -L 锁定用户名
  • usermod -p 修改账户密码
  • usermod -U 解除锁定
  • “注意大小写哦”

23、umask命令

用于设置默认文件权限,设置用户创建文件和目录的默认权限。
umask 022表示从对象的全权限值中减去022权限,则表示新创建的文件的默认权限为666-022=644(-rw-r-r),新创建的目录权限为777-022=755(drwx-rx-rx)。

24、设置组ID

  • 设置组ID(SGID)实现文件共享,将共享目录设置SGID位,这样目录中的文件将均用目录的所属组。

25、减少grub默认的引导时间

  • sudo vim /etc/default/grub修改TIMEOUT值,然后sudo update-grub生效

26、加速应用程序加载时间

  • sudo apt-get install preload装完重启电脑,完成。

27、加速更新

#用官方apt-fast代替apt-get加速更新
sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update
sudo apt-get install apt-fast

28、网络相关

  • hostname
    • hostname -d显示所属域名;
    • hostname -f显示完整的主机名和域名;
    • hostname -i显示IP地址
  • ping命令不作介绍了
  • iwconfig 一般用于无线网卡
  • nslookup 在有IP地址时,可以用这个命令来显示主机名,可以找到给定域内所有的IP地址。
  • traceroute 查看数据包在提交到远程系统或是网站的时候所经过的路由器IP地址、跳数和响应时间。
  • finger 查看用户信息
  • telnet 连接目标主机
  • ethtool 显示网卡信息
    • ethtool -i 显示一个特定网卡的驱动信息(在检查软件兼容性时尤其有用)
    • ethtool -p 启动一个适配器指定行为
    • ethtool -s 显示网络统计信息
  • netstat 发现主机连接
    • netstat -g 查询该主机订阅的所有多播组(网络)
    • netstat -nap | grep port 显示使用该端口的应用程序id
    • netstat -tcp 显示所有的TCP连接
    • netstat -udp 显示所有的UDP连接
    • netstat -a 显示所有的连接

Git常用命令

学会这些命令,你就可以熟练的使用Git工具了,什么?想精通,那是不可能的。
基本上,Git就是以下面的命令顺序学习的。文中笔记是从廖雪峰老师的Git教程中总结出来的,方面查阅命令。详细原理请看Git教程

1、基础

  • git config --global user.name "Your Name"设置你的仓库用户名(用于标识提交者)
  • git config --global user.email "email@example.com"设置你的仓库邮箱(用于标识提交者)
  • git init 初始化一个git仓库
  • git add --all 添加所有更改的文件
  • git add filename1 当然可以指定添加filename1
  • git commit -m "commit message" 添加更改的信息,必须要有,不然报错,不建议不加。
  • git status 查看git当前状态
  • git diff filename1 查看filename1到底修改了哪些内容
  • git log 查看最近的提交日志
  • git log --pretty=oneline 单行显示提交日志
  • git reset --hard commitID 利用git log得到的commitID返回版本
  • git reset --hard HEAD^回到上一个版本
  • git reflog 查看命令的历史,可以找到git log看不到的commitID,因为git log只显示当前的提交日志,如果你提交了一次,退回版本后又后悔了,就能查看上次提交的commitID
  • git checkout -- filename1 利用版本库中的版本替换工作区中的文件。功能有2:
    • 撤销文件修改,分两种情况:
      • 撤销工作区中的修改(没有使用git add命令添加到暂存区)
      • 撤销暂存区中的修改(添加到了暂存区又做了修改)
    • 找回删除的文件
      • 工作区中文件误删了,可以通过此命令从版本库中找回
  • git reset HEAD filename1 撤销add,回到工作区
  • git rm filename1 删除文件
  • git remote add origin https://github.com/pengloo53/learngit.git 将本地库关联到github远程库上
  • git push -u origin master 第一次推送的时候要加上-u参数,可以将本地库的master分支与远程库的master分支关联起来;下次提交就不需要加-u了。
  • git clone https://github.com/pengloo53/learngit.git 克隆远程库到本地

2、分支管理

  • git checkout -b dev创建dev分支并切换到dev。相当于git branch devgit checkout dev两条命令。
  • git branch查看当前分支
  • git merge dev合并指定分支到当前分支,如,你现在master分支,那么执行命令就将dev分支合并到了master分支上。
  • git branch -d dev删除dev分支
  • git log --graph --pretty=oneline --abbrev-commit查看分支合并图
  • git merge --no-ff -m "merge with no-ff" dev禁用「Fast forward」,也就是保留分支的相关信息。
  • git stash 将工作区现场储藏起来,等以后恢复后继续工作。通常用于处理更为着急的任务时,例如:bug。
  • git stash list 查看保存的工作现场
  • git stash apply恢复工作现场
  • git stash drop 删除stash内容
  • git stash pop 恢复的同时直接删除stash内容
  • git stash apply stash@{0} 恢复指定的工作现场,当你保存了不只一份工作现场时。
  • git branch -D feature-vulcan 强行删除分支。用于不需要合并,就地删除的情况。
  • git remote 查看远程库的信息,一般返回origin。
  • git remote -v 查看远程库的详细信息。
  • git push origin master 将本地master分支推送到远程master分支。
    • master分支为主分支,因此要时刻与远程同步;
    • dev分支为开发分支,团队成员都需要在上面工作,所以也需要与远程同步;
    • bug分支只用于在本地修复bug,没有必要推送到远程;
    • feature新功能分支是否推送到远程,取决于你是否和其他人合作在上面开发。
  • git clone https://github.com/pengloo53/learngit.git 将远程库克隆到本地,默认只能看到master分支。
  • git checkout -b dev origin/dev 创建远程dev分支到本地
  • git pull 将远程分支的最新内容抓取下来。
  • git branch --set-upstream dev origin/dev将本地dev分支与远程dev分支之间建立链接。
多人协作工作模式
  1. 首先,可以试图用git push origin branch-name推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name);
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

3、标签管理

  • git tag v1.0 给当前分支打上标签
  • git tag 查看所有的标签,按时间顺序列出。
  • git log --pretty=oneline --abbrev-commit缩略commitID并单行显示提交信息
  • git tag v0.9 commitID通过上一条命令查看commitID,然后打上标签。用于忘记打标签的情况,因为标签其实就是只想某个commitID的指针,默认情况下,标签打在最新的提交上。
  • git show v0.9 查看标签信息。
  • git tag -a v0.1 -m "version 0.1 released" commitID创建带有说明的标签,-a指定标签名,-m指定说明文字。
  • git tag -d v0.1 删除标签v0.1
  • git push origin v1.0 推送标签1.0到远程
  • git push origin --tags 推送所有的标签到远程
  • git push origin :refs/tags/v0.9 删除远程标签,但是前提是要先在本地删除对应标签。

4、自定义Git

  • git config --global color.ui true 让Git显示颜色
  • .gitignore在这个文件里编辑你要忽略的文件,并提交到Git中,就可以忽略特殊文件的检查。如将*.db写入.gitignore文件中,将忽略所有db文件。可以参考github收集的所有.gitignore
  • git config --global alias.st status将status的别名设置成st,那么git st=git status
  • git config --global alias.unstage 'reset HEAD' 那么git reset HEAD filename=git unstage filename
  • git config --global alias.last 'log -1'git last就显示最后一次提交了。

5、搭建Git服务器

  1. sudo apt-get install git 安装Git;
  2. sudo adduser git 添加Git用户;
  3. sudo git init --bare sample.git 初始化git仓库;
  4. sudo chown -R git:git sample.git修改仓库的所属用户为git;
  5. 将git用户的信息git:x:1001:1001:,,,:/home/git:/bin/bash改成git:x:1001:1001:,,,:/home/git:/bin/git-shell,为了禁用shell登录。
  6. git clone git@server:/director/sample.git 克隆Git服务器上的仓库

PS. 想方便管理公钥,用Gitosis;想控制权限,用Gitolite

Linux学习笔记 - Shell编程

Shell编程

1、基础

  • #!指定执行脚本的shell
  • # 注释行
  • 使用变量时,要在前面加上$,如echo $PATH,打印PATH变量的值
  • 将命令执行结果的值赋给变量

    TIME=`date`
    
  • unset 删除变量

  • 位置变量,ls -l file1 file2 file3

    • $0 表示程序的文件名ls -l
    • $1 表示第1个参数值,也就是file1
    • $2 表示第2个参数值,也就是file2
    • $3 表示第3个参数值,也就是file3
    • $9 表示第9个参数值
  • 特殊变量

    • $* 表示这个程序的所有参数
    • $# 表示这个程序参数的个数
    • $? 执行上一个命令的返回值(0为执行正常,非0为执行错误)
    • $$ 这个程序的PID
    • $! 执行上一个后台命令的PID
  • 执行脚本

    • sh filename.sh 执行脚本
    • sh -x filename.sh 可以显示脚本执行过程
    • sh -n filename.sh 不执行,只检查语法错误

2、Shell命令

  • read 从键盘读入数据后,赋给变量
  • expr 对整数型变量进行算术运算
    • expr 3 + 5 注:加号前后有空格
    • expr $var1 - 5
    • expr $var1 / $var2
    • expr $var3 \* 10
  • test 变量测试语句

    • test str1=str2 测试是否相等
    • test str1 测试是否非空
    • test -n str1 测试是否非空
    • test -z str1 测试是否为空
  • test 文件测试语句

    • test -d file 指定文件是否为目录
    • test -f file 指定文件是否为常规文件
    • test -x file 指定文件是否可执行
    • test -r file 指定文件是否可读
    • test -w file 指定文件是否可写
    • test -a file 指定文件是否存在
    • test -s file 指定文件大小是否为0
  • test 变量对比语句

    • test int1 -eq int2 判断int1 == int2
    • test int1 -ge int2 判断int1 >= int2
    • test int1 -gt int2 判断int1 > int2
    • test int1 -lt int2 判断int1 < int2
    • test int1 -le int2 判断int1 <= int2
    • test int1 -ne int2 判断int1 != int2
  • exit 退出语句

    • 0 为正常退出
    • 非0 为不正常退出
  • awk 命令

    • 这个命令非常强大,这里只介绍一个用法。
    • 格式:awk -F 分隔符 '命令'
    • 实例:
      1. awk -F : '$3==0 {print $1}' /etc/passwd 检测系统中UID为0的用户
      2. awk -F : 'length($2)==0 {print $1}' /etc/shadow 检测系统中密码为空的用户
  • if ... then 语句

    if test 1 -lt 2
    then
        echo "YES"
    else
        echo "NO Possible"
    fi
    
  • For ... done语句

    格式:

    for 变量 in 名字表
    do
        命令列表
    done
    
  • select 循环语句

    格式:

    select 变量 in 关键词
    do
        command1
        ...
        commandn
    done
    
  • case ... esac

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
case $var in
c)
echo "your selection is C"
;;
d)
echo "your selection is d"
;;
e)
echo "your selection is e"
;;
*)
echo
esac
  • While 循环

格式:

1
2
3
4
while 条件
do
command
done
  • shift命令,参数向左移一位,也就是$#减一

3、示例

  1. 测试Apache服务是否启动,若没有启动,则启动Apache服务
  2. 判断某个文件属于什么类型的文件
  3. 踢出用户
  4. 显示用户的信息
  5. 加减乘除的脚本
  6. 打印出1到10之间的平方数
  7. 批量增加用户,同时设置密码
  8. 批量删除用户
  9. 累加求和(使用shift命令)

Linux学习笔记 - 磁盘管理&备份

磁盘管理

关于dudf之类的命令这里就不介绍了,这里主要介绍的是如何添加磁盘和分区、如何添加swap分区以及磁盘配额的内容。

1、添加磁盘或分区

总共分为4大步。

  1. fdisk,划分分区。

    • fdisk -l /dev/sdb,查看磁盘分区情况
    • fdisk /dev/sdb,对磁盘进行操作,见下面基本操作
      • m 帮助
      • p 打印分区表
      • n 增加新的分区
      • t 改变分区文件系统ID
      • L 查看文件系统ID
      • d 删除分区
      • w 保存分区表
      • q 退出(不保存)
  2. mkfs,创建文件系统。

    • mkfs.ext3 /dev/sdb 将分区格式化为ext3文件系统类型
  3. mount,挂载分区。

    • mount /dev/sdb /mnt 将sdb分区挂载到mnt目录下
  4. df -h 查看系统磁盘,可以看到mnt分区
    fdisk_sdb
    注意:我这是在虚拟机中测试的

  5. 写入配置文件,编辑/etc/fstab。文件的内容信息格式如下;


































    物理分区名 挂载点 文件系统 缺省设置 是否检测(1:检测;2:检测) 检测顺序(0:是否检测;1:优先检测;2:期后检测)
    LABEL=1 / ext3 default 1 2
    /dev/sda1 / ext3 default 0 0
    /dev/sdb1 /web ext3 default 1 1
    • e2label /dev/sdb1 检测是否有卷标
    • e2label /dev/sdb1 name添加卷标

2、添加Swap分区

两种方法扩大swap分区

  • 新建磁盘,分swap分区
  • 在已有磁盘上使用swapfile文件增大swap分区

第一种方法可以根据上面增加分区的步骤一样进行操作,这里主要记录一下使用swapfile文件增大swap分区的步骤。

  1. mkdir /var/swap 新建swap目录
  2. chmod 700 /var/swap 设置目录权限
  3. dd if=/dev/zero of=/var/swap/file.swp bs=1024 count=3000 创建swp文件,大小为3MB
  4. mkswap /var/swap/file.swp 使文件可用
  5. vim /etc/fstab 写入配置文件
  6. free 查看分区
  7. swapon /var/swap/file.swp 启用swap分区
  8. free 再次查看分区
    swap
    如图,之前和之后的swap分区大小。

3、磁盘配额(针对分区)

磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。

可分为三类限制:

  • 软限制(Soft limit):定义用户可以占用的磁盘空间数。当用户超过该限制后会收到已超过配额的警告。
  • 硬限制(Hard limit):当用户试图将文件存放在其已经超过该限制目录时,报告文件系统错误。
  • 宽限制(Grace period):定义用户在软限制下可以使用其文件系统的期限。

操作步骤

  1. 开启分区配额功能,vim /etc/fstab,编辑配置文件,在挂载属性上加上标志userquota或grpquota,然后重新挂载mount -o remount /home,或重新启动系统sudo init 6
  2. 建立配额数据库,quotacheck -Cvuga,会生成aquota.user、aquota.group两文件。
  3. 启动配额功能,quotaon 分区名称;关闭配额功能,quotaoff 分区名称
  4. 编辑配额
    • edquota username 编辑用户配额
    • edquota -g groupname 编辑用户组配额
    • edquota -t 设置宽期限 设置宽期限
    • edquota -p 模版用户 复制用户1 复制用户2
    • quota username 查看用户的配额使用情况
    • repquota -a 管理员查看配额信息

备份

备份几乎是Linux系统运维最频繁的工作了,不过大部分情况下,都是通过自动化脚本进行自动备份。

1、备份策略

  • 完全备份
  • 增量备份:通常是这种情况

2、备份分类

  • 系统备份:/etc , /boot , /usr/local , /var , /log
  • 用户备份:/home

3、备份相关命令

其实主要就是通过cptar命令

  • cp -Rpu 复制文件
    • -p 保持文件原本属性
    • -u 增量备份
    • -R 循环复制
  • scp 远程备份,类似cp命令
  • tar -zcf /backup/sys.tar.gz /etc /boot 备份/etc , /boot
  • tar -ztf /backup/sys.tar.gz 查看备份包中的文件(不解包)
  • tar -zxf /backup/sys.tar.gz 还原备份目录,其实就是解包
  • tar -zxf /backup/sys.tar.gz -C ./backup 解压到指定目录backup
  • tar -zxf /backup/sys.tar.gz etc/group 恢复指定文件
  • tar -rf /backup/sys.tar /etc/file1 /etc/file2 追加文件到备份包中
  • tar -uf /backup/sys.tar /etc/file 将修改过的文件做备份

Linux学习笔记 - 计划任务&文件系统构成

计划任务

计划任务最常用的两个命令就是atcrontabat命令是一次性执行任务;crontab是周期性运行作业。

1、at

格式:at [-f filename] time,这里的time也就是时间分为两类:

  • 绝对计时
    • hh:mm MM/DD/YY
  • 相对计时
    • now + n minutes
    • now + n hours
    • now + n days

实例

  • at 5:30pm
  • at now + 18minutes
  • at 17:30 1/11/11

    接下来输入命令,输入完后ctrl+D保存任务。注意:命令一定要是绝对路径。

  • at -l列举任务

  • at -d删除任务

配置文件

  • /etc/at.allow允许用户列表
  • /etc/at.deny不允许用户列表

2、crontab

作用:用于生成cron进程所需要的crontab文件;
格式:crontab {-l|-r|-e}

  • -l显示当前的crontab
  • -r删除
  • -e编辑

编辑规则,将知道的具体时间填上,不知道的填*

|| 分钟 || 小时 || 天 || 月 || 星期 || 命令/脚本 ||
|| 30 || 17 || * || * || 1-5 || /usr/bin/wall < x.txt ||
|| 45 || 17 || * || * || 1-5 || /sbin/shutdown -r now ||
|| */2 || 12-14 || * || 3-6,9-12 || 1-5 || 检测脚本 ||

上面第一例,每个周一到周五的17:30进行广播操作;第二例,每周一到周五17:45进行重启操作;第三例,3-6月和9-12月,每周一到周五,每隔2分钟进行脚本检测。

文件系统构成

  • /usr/bin & /bin 可执行的命令
  • /usr/sbin & /sbin root可执行的的命令
  • /proc 虚拟文件系统,存放当前内容镜像
  • /dev 存放设备文件
  • /lib 存放系统程序运行所需的共享库
  • /lost+found 存放一些系统出错的检查结果
  • /tmp 临时文件
  • /etc 系统配置文件
  • /var 存放经常发生变动的文件,比如邮件、日志等
  • /usr 存放所有的命令、库、手册页等
  • /mnt 临时文件系统的安装点
  • /boot 内核文件及自带程序文件保存位置
  • /usr/local 安装第三方软件默认路劲

Linux学习笔记 - 进程管理

进程管理

进程管理不得不介绍的四个命令,pskillnice/renicetop.

1、PS

查看进程的命令,非常强大哦。它有三种表达方式,具体可以参照man文档的description部分。
ps_des

  • a 显示所有的用户
  • u 显示用户名和启动时间
  • x 显示没有控制终端进程
  • -e 显示所有进程
  • -f 显示完整格式

常用命令

  • ps aux or ps -ef都是显示所有用户进程,只是不一样的表达方式
  • ps -uU username查看系统中指定用户执行的进程

很有必要看一下ps命令的man说明文档,下面图片贴出文档中example部分内容。
ps_example

2、Kill

这个命令也很常用的,杀死进程.

  • kill PID根据进程号,直接终止进程
  • kill -9 PID强行关闭
  • kill -1 PID重启进程
  • xkill关闭图形程序
  • killall 进程名结束该进程

3、nice/renice

改变进程的优先级,每一个进程都有一个优先级(也称nice值),其范围为[-20,19],最高到最低,注意-20是最高的哦,默认情况下,进程的优先级都是0,优先级高的进程会比较频繁的被调用运行。

  1. nice设定进程的优先级。格式:nice -n command,eg. nice -n 19 dd if=/dev/cdrom of=~/mdk.iso利用最低优先级创建一张cd的镜像,防止复制操作阻碍其他进程。

  2. renice更改用户的优先级。格式:renice -n pid , eg. renice -5 777提高777进程的优先级。

4、top

知道Windows下的任务管理器吧,这个命令就是命令行下的任务管理器。
top

很强大的命令,介绍下简要用法。

  • d:指定刷新间隔
  • c:显示整个命令行
  • u:查看指定用户进程
  • k:终止执行进程
  • h:帮助

Linux学习笔记 - 用户账户

前提

对前一段时间学习Linux做一个总结,主要是整理笔记,写的可能比较乱,但是内容比较丰富,还是值得一看的。内容总共分为:用户账户、进程管理、计划任务、文件系统构成、磁盘管理、备份、Shell编程。内容都是比较基础,比较常用的,过一遍会加深你的印象。

用户账户

Linux用户基本上分为下面三类:

  • 超级用户(root , UID=0)
  • 普通用户(UID=[500,60000])
  • 伪用户(UID=[1,499])

用户配置文件储存在/etc/passwd文件下,文件中每一行代表一个用户,每一列代表用户的基本信息,第一列代表用户的用户名,第二列代表用户的密码,密码使用*代替。

因为密码是通过加密后存储在/etc/shadow文件下了,这个文件的权限只有root用户才能访问。

pwunconv命令可以将密码回写到/etc/passwd文件中,执行了这个密码后,再次进入/etc/passwd文件中,就会发现第二列的*被一串字符串所替代,这就是加密后的密码。

pwconv命令正好与上面的命令意思相反,它将密码从passwd中写入到shadow中,这个命令一般是在我们创建用户后就会自动执行。

同样的道理,用户组文件、用户组密码文件分别是/etc/group/etc/gshadow

用户配置文件:/etc/login.defs/etc/default/useradd

新用户信息文件:/etc/skel,在创建新用户后,会自动将此文件夹中的内容拷贝到新用户的HOME目录下,作为新用户的配置文件。

登录显示信息:/etc/motd成功后、/etc/issue登录时。

1、普通用户为什么可以改密码?

上面说过密码存放在/etc/passwd以及/etc/shadow中,而这两个文件对其他用户均没有写权限。

普通用户用passwd命令改密码,该命令的全路径是/usr/bin/passwd,你可以通过ls -l /usr/bin/passwd查看到该命令的权限,为-rwsr-xr-x,可以看到有个s权限位。
这个s权限位的意思就是当其他用户在使用这个命令的时候,将暂时获得这个命令的所属用户的权限。换句话就是说当普通用户在使用passwd命令的时候,会暂时获取root权限,从而可以改变/etc/passwd里的密码值,达到改密码的效果。

2、特殊权限位

那么,像上面那样的特殊权限位有哪些呢?又如何设置呢?

  • setUID:就是上面的s权限位,可以通过以下命令进行设置
    • chmod u+s filename
    • chmod 4755 filename
  • setGID: 大概意思同setUID,就是执行行默认获取命令所属组的权限,同样,可以通过下面命令进行设置
    • chmod g+s filename
    • chmod 2755 filename
  • 粘着位:用t表示,你可以通过查看/tmp目录的权限就知道了,那么,它的作用是什么呢?

/tmp目录的权限代表什么意思?
粘着位只是针对目录进行设置,大家知道/tmp目录的权限为drwxrwxrwt,意思就是什么人都具有读、写、执行的权限,那么,如果我建的文件或者目录被别人删了怎么办?所以,粘着位的作用就是:每个人在目录里都有读、写、执行的权限,但是只有自己可以删除自己创建的文件。

很神奇是不是?来看看怎么设置?
同样两种方式,chmod o+t dir&chmod 1777 dir,dir代表目录。

3、添加用户

useradd -D 其实就是根据/etc/default/useradd默认配置来创建的
default

4、用户组管理命令

  • usermod -G 组名 用户名 将用户加入用户组
  • gpasswd -a 用户名 组名 将用户加入用户组
  • groups查看用户隶属那些用户组
  • newgrp 切换用户组
  • grpck 用户组配置文件检查
  • chgrp修改文件所属用户组
  • vigr 编辑/etc/group文件

5、用户管理命令

  • pwck 检测/etc/passwd文件
  • vipw 编辑/etc/passwd文件
  • id 查看用户详细信息
  • finger 查看用户详细信息,有些Linux发行版默认不带此命令
  • passwd -S 查看用户密码状态
  • who or w查看当前登录用户信息

6、实例

  • 添加用户组:groupadd -g 888 webadmin
  • 删除用户组:groupdel webadmin
  • 修改用户信息:groupmod -n apache webadmin(将webadmin组名修改为apache)
  • 检测用户:passwd -S username
  • 锁定用户:passwd -l username

7、sudo

使普通用户以root的方式执行命令。
配置文件/etc/sudoers
格式:用户名(组名) 主体地址=命令(绝对路径);
实例:sudoer文件中有编写规则说明,具体参照下图。
sudoer

如何在公司控制宿舍里的Mac电脑

前提

宿舍电脑Mac mini,通过路由上网,2兆带宽,2人用;公司电脑Windows 7 32位,通过代理服务器上网,固定IP。我有一个小需求,就是在上班的时候突然想到某个电影,想回去就看,能不能远程操作一下电脑提前下载完电影?省得回去跟舍友抢带宽,主要是宿舍没人上网,带宽闲着也是闲着嘛,嘿嘿。
答案是肯定的。

一、Mac(宿舍)电脑设置

1、屏幕共享设置

打开Mac电脑的设置,找到共享选项,进入,界面如下
Mac设置
可以看到Mac电脑的默认共享方式非常多,当然这里我们只用看屏幕共享这项,你会发现屏幕共享用的是VNC协议,这只是一种连接协议,姑且这么记住,就像ssh一样。接下来点击电脑设置,会弹出一个设置窗口,如图
电脑设置
两个选项都勾选,然后设置一个连接密码。记住密码,到时候连接的时候要用上的。Mac电脑上的设置就差不多完成了。接下来就是路由器的设置了,为什么要设置路由器呢?因为我说过,我在宿舍是通过路由器上网的,要让外网能够访问我的电脑就一定需要在路由器上设置一个转发规则。

2、路由转发设置

进入路由器,这个我不想多讲了,还是上个图吧.
路由器
左侧进入转发规则,如图,
转发规则
当然,不一样的路由,界面可能不一样,找到相关字样就可以了。
接下来就来设置转发规则了,还是先上图。
转发规则设置

这里比较重要了,要好好记住了

  1. 首先你要知道Mac电脑的IP地址,这个比较简单,用命令ifconfig或者图形界面查看都可以,最好是像我这样设置一个固定IP。
    固定IP
  2. 照着我圈出来的那行进行设置。这里有个问题,为什么服务端口号是5900?不要问为什么,记住VNC的默认服务端口就是5900,就像你要记住输入网址时前面一定要有www一样。其他的不用设置了,设置一个转发规则就可以了。设置完后点击保存。有的时候需要重启一下路由,不过一般不用。
    转发5900
  3. 获取公网IP。上面转发规则设置好了,外网要是访问Mac电脑总不能连192.168.1.188吧,所以要知道路由器拨号得到的那个公网IP,怎么获取呢?方法很多,最简单的方法莫过于进入网站:www.ip138.com,首页就显示出来了。
    公网IP

好了,基本上,宿舍Mac电脑就准备就绪了。可以去公司了鼓捣Windows 7了。

二、Windows(公司)电脑设置

1、工具

远程连接就需要两台主机达成某种协议,而这里我们用的是VNC的一个软件,为什么用它呢?没有为什么,因为Mac电脑原生支持VNC的通信协议,那就只有委屈Windows啦,装上VNC Viewer客户端,就可以连上Mac了。
VNC Viewer for Windows,下载地址:VNC ,注意下载的版本,有32、64位之分。

2、VNC设置

  1. 首先,双击启动软件,输入公网IP,不要着急点connect。如图界面
    VNC_Viewer_conn
  2. 然后,打开软件Options,设置代理服务器(为什么?上面说过公司用代理服务器上网,当然,直接上网的用户可以跳过这个步骤),设置界面如下
    VNC_proxy
  3. 接着,点击connect,输入连接密码。(什么密码?之前在Mac上设置的密码,还记得不),到这一步说明你的网络连接一切正常了,如果报错,自己反思去吧!(这么详细的教程都设置不对)
    VNC_password
  4. 最后,没有最后了,点击OK吧,连接成功!打开你Mac上的浏览器,打开你的迅雷下载吧!
    success

三、总结

1、常用协议端口

HTTP–>80
SSH–>22
VNC–>5900
还有SMTP、POP3、FTP等等常用服务的默认端口都可以记住,实在记不住就问google和度娘也可以,其实常用的也没有多少,最起码比起咱们小时候背得文言文篇数要少得多吧。

2、代理服务器上网

这种上网方式非常蛋疼,不过也木有办法呀。记住在你要联网的软件上都设置上代理吧!!!

3、路由转发设置

需要用到什么端口就设置哪个端口,一般对于远程连接就用到ssh 22端口或者vnc 5900端口。有时自己写个web应用什么的也可以自定义端口。