主要就是对前一段时间学习Linux的笔记的一个整理,不过也会陆续分享今后学习Linux的一些感想和技巧,当然也欢迎其他关于Linux的好文章的加入。

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 显示所有的连接

Linux学习笔记-Shell脚本编程

Shell编程

基础

  • #!指定执行脚本的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 不执行,只检查语法错误

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

格式:

    case $var in
    c)
        echo "your selection is C"
        ;;
    d)
        echo "your selection is d"
        ;;
    e)
        echo "your selection is e"
        ;;
    *)
        echo
    esac
  • While 循环

格式:

    while 条件
    do
        command
    done
  • shift命令,参数向左移一位,$#值减一

示例练习

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

后续再贴上shell脚本...

Linux学习笔记-用户账户

前提

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

本想是总结在一篇文章上的, 可是感觉内容太长了,不方便浏览和复习,故改为一个合集,拆成6部分

用户账户

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

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

/etc/passwd & /etc/shadow

用户配置文件储存在/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登录时。

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

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

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

特殊权限位

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

  • 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代表目录。

添加用户

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

用户组管理命令

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

用户管理命令

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

实例

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

sudo

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

Linux学习笔记-进程管理

进程管理

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

PS

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

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

常用命令

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

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

Kill

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

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

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进程的优先级。

top

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

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

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

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

计划任务

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

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不允许用户列表

crontab

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

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

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

分钟 小时 星期 命令/脚本
30 17 * * 1-5 /usr/bin/wall
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学习笔记-磁盘管理&备份

磁盘管理

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

添加磁盘或分区

总共分为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添加卷标

添加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文件
  4. mkswap /var/swap/file.swp 使文件可用
  5. vim /etc/fstab 写入配置文件
  6. free 查看分区
  7. swapon /var/swap/file.swp 启用swap分区
  8. free 再次查看分区
    swap
    之前和之后的swap分区大小

磁盘配额(针对分区)

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

可分为三类限制:

  • 软限制(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系统运维最频繁的工作了,不过大部分情况下,都是通过自动化脚本进行自动备份。

备份策略

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

备份分类

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

备份相关命令

其实主要就是通过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学习笔记-Shell脚本编程实例

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

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

#! /bin/sh
# 测试Apache服务是否启动,若没有启动,则启动Apache服务

web=`/usr/bin/pgrep httpd`
if [ "ABC$web" = "ABC" ] 
then
    /etc/init.d/httpd start
fi

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

#! /bin/sh
# 判断一个文件属于什么类型

if [ -d $1 ]
then
    echo "这是一个目录";
elif [ -f $1 ]
then
    echo "这是个普通文件"
elif [ -c $1 ]
then
    echo "这是字符特殊文件"
elif [ -b $1 ]
then
    echo "这是块特殊文件"
else
    echo "我也不知道这是啥玩意"
fi

3、踢出用户的脚本

#! /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、显示用户的信息

#! /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、加减乘除的脚本

#! /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

示例:sh calc.sh 9 + 10执行。

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

#! /bin/sh
# 打印1-10之间的平方数,主要练习while语句

#赋值的时候注意不要加空格
i=1
while [ $i -le 10 ]
do
    echo "$i 的平方为:`expr $i \* $i`"
    i=`expr $i + 1`
done

#! /bin/sh
# 打印1-10之间的平方数,主要练习for语句

for i in {1..10}
do
    echo "$i 的平方为:`expr $i \* $i`"
done

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

#! /bin/sh
# 使用shift命令累加求和

sum=0
while [ $# -gt 0 ]
do
    sum=`expr $sum + $1`
    shift
done
echo "总和为:$sum"

示例:sh shift.sh 8 9 10 11 12执行。

Linux-RPM&YUM软件管理器

RPM

  • rmp -vih packageName.rpm 安装rpm软件包
  • rmp -e ftp 卸载ftp软件(具体版本号可以不用写)
  • rpm -U packageName 升级功能(删除旧版本,安装新版本)
  • rpm -q 查询已安装软件功能
    • rpm -qa 查询系统中已经安装的所有软件
    • rpm -qi 查询指定安装软件包详细信息,eg.rpm -qi bash
    • rpm -ql 查询指定软件安装路劲与文件列表,eg.rpm -ql bash
    • rpm -qc 查询指定软件的配置文件,eg.rpm -qc bash
    • rpm -qf 查询指定文件为哪个软件所安装,eg.rpm -qf /etc/inittab
  • rpm -qpi 查询尚未安装软件信息,eg. rpm -qpi packageName
  • rpm -V packageName 查看软件哪些状态被修改,未被修改的软件将没有任何提示。出现的字符及其意义如下:
    • 5 MD5值被改变
    • S 文件大小改变
    • L 链接文件的源已经被改变
    • T 文件最后修改时间已经改变
    • D 设备改变
    • U 用户发生改变
    • G 组发生改变
    • M 包括权限与类型在内的模式已经被改变
    • ? 不可读文件

YUM

YUM-Yellow dog Update Modified,YUM是RPM软件管理器的改进版,可以很好的解决RPM所面领的软件包依赖问题。

YUM源

CentOS6 yum的源定义文件存放在/etc/yum.repos.d,查看repo文件的格式如下图。

name为yum源名称;mirrorlist为镜像站点目录;bashurl为yum源指定的URL地址;enable是否激活该yum源(0:禁用;1:激活;默认为激活);gpgcheck安装软件是否检查签名(0:禁用;1:激活);gpgkey检查签名的密钥文件。

从上图中,看到$releaserver的变量,它指的是系统发型版本号。还有其他的如arch代表CPU架构;如basearch代表系统架构;YUM0-9使用Shell对应的0-9个同名变量替换

YUM命令

  • yum check-update 列出可更新的软件清单
  • yum update 安装所有更新软件
  • yum install PackageName 安装指定软件
  • yum remove PackageName 卸载指定软件
  • yum update PackageName 更新指定软件
  • yum search PackageName 查找某个软件

  • yum list

    • yum list updates 列出可更新的软件
    • yum list installed 列出已安装的软件包
    • yum list extras 列出已安装但是不在Repository内的软件包
  • yum info

    • yum info PackageName 获取软件包信息
    • yum info updates 列出可更新的软件包信息
    • yum info installed列出已安装的软件包信息
    • yum info extras 列出已安装但不在Repository内的软件包的信息
  • yum provides列出软件包提供了哪些文档

  • yum clean
    • yum clean packages 清除缓存目录(/var/cache/yum)下的软件包
    • yum clean headers 清除缓存目录(/var/cache/yum)下的Headers
    • yum clean oldheaders 清除缓存目录(/var/cache/yum)下旧的Headers
    • yum clean , yum clean all 清除所有缓存

创建YUM源

当我们收集软件包越来越多的时候,有必要创建自己的YUM源,实现软件集中管理,下面三步帮你实现。

  1. 安装createrepo软件
  2. 将所有的软件包保存在某个目录下,如/softkit
  3. 运行createrepo /softkit即可

《Linux运维之道》笔记一

  • 忘记root登录密码

    1. 开机出现GRUB引导程序时,按e编辑GRUB引导参数
    2. 选择以kernel开始的行按e进行编辑
    3. 在kernel行末尾加上single后回车,按b启动系统进入单用户模式
    4. 在单用户模式下输入命令passwd root,输入两次密码
    5. 修改成功,shutdown -r now重启系统
    6. 新密码登入,成功。
  • history命令显示所有命令记录,然后通过!命令编号调用该命令

  • 清屏命令大家都知道clear,还有一个快捷键更方便——ctrl+l
  • Vim普通模式下输入ZZ,可以实现保存并退出文档
  • echo "hello123" | passwd --stdin jack 通过管道为用户jack设置密码
  • uptime 监控CPU使用情况

一、ACL访问控制权限

两个命令:getfaclsetfacl

  • getfacl 查看文档的ACL权限
  • setfacl 设置文档ACL权限

    • -b 删除所有附加的ACL条目
    • -k 删除默认的ACL
    • -m 添加ACL权限
    • -x 删除指定的ACL条目
    • -R 递归处理所有的子文件与子目录
  • 实例

    • getfacl 2.log 查看文档2.log的ACL权限
    • setfacl -m u:user01:rw 2.log 添加ACL条目,使用户user01对2.log文件可读可写
    • setfacl -m g:group01:r 2.log 使用户组group01对文件2.log有可写权限
    • setfacl -x u:user01 2.log 删除用户user01的ACL条目
    • setfacl -x g:group01 2.log 删除组的权限
    • setfacl -b 2.log 清除文件2.log所有ACL权限

二、磁盘分区

之前在一篇笔记里已经介绍了fdisk命令的用法,这里就不重复了,这里说一下另外两个命令partprobeparted

  • partprobe

    • partprobe /dev/sdb 让内核立即读取新的分区表,无需重启电脑就可以识别新创建的分区
  • parted GPT分区方式,不同与传统的MBR分区(使用fdisk

三、开机启动

学习开机启动命令,先要了解Linux的6种运行级别。

  • 0 关机模式
  • 1 单用户模式
  • 2 无NFS(共享服务)网络的字符界面模式
  • 3 全功能字符界面模式
  • 4 暂时未定义使用
  • 5 图形模式
  • 6 重启模式

通过runlevel命令可以查看当前所处的运行级别。服务器版本的Linux一般都是3级别,通过init命令可以改变当前的运行级别,如init 0命令可以直接关机.

好了,可以进入正题了,如何设置开机启动呢?使用命令chkconfig,用法如下:

  • chkconfig --list 查询系统服务运行级别信息
  • chkconfig --level 指定操作的运行级别,不指定级别时默认为2,3,4,5级别
  • 实例:
    • chkconfig --list sshd 查看sshd命令的运行级别
      enter image description here
    • chkconfig sshd on 设置sshd服务在2.3.4.5级别开机启动
      enter image description here

四、内存和硬盘使用情况

1、内存使用

内存的使用情况查看命令,应该很熟悉了,那就是free,但是你真的知道显示出来的各个数据都代表的是什么意思吗?至少之前我是没怎么去了解。

enter image description here

每次看的时候,也就扫了一眼,总共498M,用了263M,还剩235M,就完事了。其他的数据就没怎么看了,这里简单介绍一下其他数是什么含义。

在Linux开机后就会预先提取一部分内存,并划为buffer与cache以供进程随时使用。第一行的used就是这部分内存数263,而后面的buffers代表的是buffer使用剩余的内存数65,cached就是cache剩余的内存数145。那么buffer和cache用了多少呢?第二行中used就是buffer和cache使用的内存数51,那么就有等式263=65+145+51,接下来446系统总剩余的内存数,为分配的有235,分配了但是没有用完的有65+145,那么446=65+145+235

细心的读者也许一眼就看出了,等式根本不等嘛!别着急,换成字节单位,你再算算!至于原因就很明了了

enter image description here

2、硬盘使用

这里就补充两点。

  • df -hTT的参数代表显示文件系统 enter image description here
  • df -ii代表的是磁盘inode使用量信息 enter image description here
    这里可以看出根分区还剩下313077个inode节点,也就是说如果在更分区下创建313077个空文件,那么就算该磁盘还有容量也再也容不下新增文件了。

五、网络

1、网络参数设置

有两种方式设置网络参数,一是通过命令行设置;二是通过修改参数文件。

命令行设置不外乎ifconfigroute这两个命令,具体使用可以自行查询帮助文档,这里介绍一下修改参数文件来设置网络。

网络的参数文件在/etc/sysconfig/network-scripts/ifcfg-<iface>,其中iface为网卡接口名称。如果只有一块以太网网卡,则一般为ifcfg-eth0,文件有一下字段:

  • DEVICE 设备名称 eh0,eth1...
  • TYPE 设备类型 ethernet
  • BOOTPROTO 启动协议 none|dhcp|static
  • HWADDR 硬件地址 MAC地址
  • NM_CONTROLLED 网卡是否可以被NetworkManager控制 yes|no
  • ONBOOT 开机是否启动该网卡 yes|no
  • ONPARENT 真实接口启动后虚拟接口是否启动 yes|no
  • IPADDR IP地址
  • PREFIX 网络位掩码个数
  • NETMASK 子网掩码
  • GATEWAY 默认网关
  • DNS{1,2} DNS服务器

如我网卡eth1设置静态IP,配置如下图
enter image description here

2、网络故障排错

这块主要介绍5个命令,pingtraceroutenslookupdignetstat

  • ping 非常常用的命令,测试基本就是4步

    1. ping 127.0.0.1 ping本地回环,测试本地网络协议是否正常
    2. ping 192.168.1.101 ping本地IP,测试本地网络接口是否正常
    3. ping 192.168.1.1 ping本地网关,测试网关是否正常工作
    4. ping 61.135.169.121 ping外部网络,测试服务商网络是否正常工作
    5. ping www.baidu.com ping网址,如果上述都正常,而这步ping不通,那么肯定是DNS的问题了
  • traceroute 跟踪数据包的路由过程,可以查看数据包在互联网中哪个节点出现问题,如图
    enter image description here

  • nslookup 检测本地设置的DNS服务器工作是否正常

    • nslookup www.baidu.com 检测本地DNS服务器是否能解析到百度,如图
      enter image description here
      本地设置的DNS服务器是8.8.8.8,检测到百度对应的两个IP地址
  • dig 查看更多关于DNS记录的信息

    • dig www.baidu.com 显示比nslookup更详细的信息
  • netstat 网络监控命令,该命令比较强大,可以自行查看帮助文档学习

    • netstat -nutlp 查看当前系统开启端口信息 enter image description here

转载保存:Linux | LP's Blog

《Linux运维之道》笔记二

{}花括号的用法

  • 逗号,分隔多个项目

    echo {a,b,c} #打印出a b c  
    echo user{01,02,03} #打印出user01 user02 user03  
    mkdir a{1,2,3} #创建文件夹a1,a2,a3
    
  • 连续两点..创建连续序列

    echo a{1..10} #打印出a1 a2 a3 a4 a5 a6 a7 a8 a9 a10  
    mkdir b{1..5} #创建文件夹b1 b2 b3 b4 b5
    

一、变量

  • typeset 为变量添加只读属性,防止误操作,当你想改值的时候,会报错。

    NAME=pengloo53
    typeset -r NAME
    NAME=pengloo
    

  • read -p "Please input your name:" NAME 提示符后输入值赋值给变量

  • export NAME 将普通变量转换成环境变量

1、变量的展开替换

  • ${varname:-word} 若varname存在且非null,则返回其值,否则返回word
  • ${varname:=word} 若varname存在且非null,则返回其值,否则设置为word
  • ${varname:?message} 若varname存在且非null,则返回其值,否则显示varname:message
  • ${varname:+word}若varname存在且非null,则返回word,否则返回null
  • ${variable#key} 从头开始删除关键词,执行最短匹配
  • ${variable##key} 从头开始删除关键词,执行最长匹配
  • ${variable%key} 从尾开始删除关键词,执行最短匹配
  • ${variable%%key} 从尾开始删除关键词,执行最长匹配
  • ${variable/old/new}将old替换成new,仅替换第一个出现的old
  • ${variable//old/new}将old替换成new,替换所有的old

2、数组

  • ${name[subscript]}调用数组变量的值,如果subscript为@*则调用所有的数组成员。

    A=(11 22 33)
    echo ${A[0]}  #显示11
    echo ${A[@]}  #显示11 22 33
    echo ${A[*]}  #显示11 22 33
    
  • ${ #name[subscript]}返回${name[subscript]}的长度。

    B=(aa bbb cccc)
    echo ${ #B[2]} #显示4(cccc字符串的长度)
    echo ${ #B[@]} #显示3(数组成员个数)
    

3、算数运算

expr命令工具大部分应该都知道,如下:

  • expr 8 + 4 加法
  • expr 8 - 4 减法
  • expr 8 \* 4 乘法
  • expr 8 / 4 除法

然而你也可以通过变量表达式来进行算术运算,语法为:$((expression)),例如:

  • $((x+y))
  • $((x-y))
  • $((x*y))
  • $((x/y))
  • $((x%y)) 取余
  • $((x++)) 自加
  • $((x--)) 自减
  • $((x**y)) 幂运算

4、测试运算

命令行工具test ,应该不陌生,这里举几个例子就清楚了。

  • test -d /etc/ && echo "yes" || echo "no"/etc/是目录就显示yes,不是就显示no,它等价与[ -d /etc/ ] && echo "yes" || echo "no"

一对中括号就替代了test,这里注意的是,中括号左右都要留有空格。

二、正则表达式

1、基本正则表达式(grep)

  • . 任意单个字符
  • * 匹配前一个字符出现零次或者多次
  • [] 匹配集合中任意单个字符
  • [x-y] 匹配连续的字符串范围
  • ^ 匹配字串的开头
  • $ 匹配字串的结尾
  • [^] 集合取反
  • \ 转义后的字符串
  • \{n,m\} 匹配前一个字符重复n到m次
  • \{n,\} 匹配前一个字符重复至少n次
  • \{n\} 匹配前一个字符重复n次
  • \(\)\(\)之间的内容存储在『保留空间』,最大存储9个
  • \n 通过\1\9调用保留空间中的内容

除了最后两个,其他的都比较好理解,针对最后两个举个例子:grep --color "\(root\)\(:\).*\2\1" /etc/passwd 筛选出以root:开头,以:root结尾的行。

2、扩展的正则表达式(egrep)

  • + 匹配前一个字符出现一次或者多次
  • ? 匹配前一个字符出现零次或者一次
  • | 匹配逻辑or
  • () 匹配正则集合

egrep --color '(root|admin)' /etc/passwd 找出包含root或者admin的行。

3、Others

除了上述的一些表达式,还有基于其他规范的正则表达式,例如POSIX规范以及GNU规范。这里不列举了,可以自行搜索了解。

转载保存:Linux | LP's Blog