文章目录

  • 一、 部署虚拟环境安装Linux系统
  • 1. 安装VMware和Linux系统
  • 2. 重置root管理员密码
  • 3. RPM:红帽软件管理器
  • 常用命令
  • 4. Yum软件仓库
  • 常用命令
  • 5. systemd初始化进程
  • 系统启动过程
  • 系统目标
  • 系统管理服务
  • 二、简单命令
  • 查看帮助文档
  • 常用系统工作
  • 1. echo命令
  • 2. date命令
  • 3. poweroff/shutdown命令
  • 4. wget命令
  • 5. ps命令
  • 6. top命令
  • 7. pidof命令
  • 8. kill/killall命令
  • 检测系统状态
  • 1. ifconfig命令
  • 2. uname命令
  • 3. uptime 命令
  • 4. free命令
  • 5. df命令
  • 6. du命令
  • 7. who命令
  • 8. last命令
  • 9. history命令
  • 切换工作目录
  • 1. pwd命令
  • 2. cd 命令
  • 编辑文本文件
  • 1. cat命令
  • 2. more/less命令
  • 3. head/tail命令
  • 4. tr 命令
  • 5. wc命令
  • 6. stat 命令
  • 7. cut 命令
  • 8. diff 命令
  • 管理文件目录
  • 1. touch 命令
  • 2. mkdir 命令
  • 3. cp 命令
  • 4. mv 命令
  • 5. rm 命令
  • 6. dd 命令
  • 7. file命令
  • 文件归档打包和压缩
  • 1. tar 命令
  • 2. find 命令
  • 三、管道符、重定向与环境变量
  • 输入输出重定向
  • 1. 分类
  • 2. 重定向符号及作用
  • 常用的转义字符
  • 重要的环境变量
  • 新增变量
  • 修改变量值
  • 四、 Vim编辑器与Shell命令脚本
  • Vim编辑器
  • 三种操作模式
  • 命令模式常用命令
  • 末行模式常用命令
  • 配置主机名称
  • 配置网卡信息
  • 编写Shell脚本
  • 简单的脚本
  • 接收用户参数
  • shell脚本内置参数
  • 判断用户参数
  • 条件测试语句
  • 流程控制语句
  • if
  • for
  • while
  • case
  • 计划任务服务程序
  • 一次性计划任务
  • 长期性计划任务
  • 五、用户身份和文件权限
  • 用户UID
  • 查看用户ID和用户组
  • 添加用户
  • 添加用户组
  • 修改用户信息
  • 删除用户
  • 文件权限


一、 部署虚拟环境安装Linux系统

1. 安装VMware和Linux系统

略过

2. 重置root管理员密码

  1. 重启Linux系统进入引导界面时,按下键盘的e键进入内核编辑界面;
  2. linux16 /vmlinuz-这一行的最后追加rd.break参数,并按下Ctrl+X来运行修改过的内核程序;
  3. 大约30s后,进入系统的紧急救援模式;
  4. 依次输入以下命令:
  • mount -o remount,rw /sysroot :加载文件系统到指定的加载点
  • chroot /sysroot
  • passwd : 修改密码
  • 这里输入两次新密码
  • touch /.autorelabel
  • exit
  • ,reboot
  1. 重启后新密码生效

3. RPM:红帽软件管理器

在RPM之前,Linux系统中安装软件只能采取源码包的形式安装,运维人员需要自行编译代码并解决虚电的软件依赖关系;而且在安装、升级、卸载时需要考虑到其他程序的依赖关系。

RPM会建立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。

常用命令
  1. rpm -ivh filename.rpm:安装软件,其中 i表示installv表示打印冗余信息;h表示打印出软件包的hash码
  2. rpm -Uvh filename.rpm:更新软件 ,U表示update
  3. rpm -e filename.rpm:卸载软件,e表示erase擦除、消除

4. Yum软件仓库

为了进一步降低软件安装难度和复杂度,Yum软件仓库可以根据用户的要求分析出所需软件包机器相关的依赖关系,然后自动从服务器下载软件包并安装到系统。

常用命令
  1. yum repolist all:列出所有仓库
  2. yum list all: 列出仓库中所有的软件包
  3. yum info packname:查看软件包信息
  4. yum install packname:安装软件包
  5. yum update packname:升级软件包
  6. yum remove packname:卸载

5. systemd初始化进程

系统启动过程
  • BIOS
  • 进入Boot Loader
  • 加载系统内核
  • 内核进行初始化
  • 启动初始化进程(systemd)
系统目标

systemd目标名称

作用

poweroff.target

关机

rescue.target

单用户模式

multi-user.target

多用户的文本界面

graphical.target

多用户的图形化界面

reboot.target

重启

修改系统默认的运行目标为多用户文本界面模式,使用ln命令把mutli-uer.target链接到/etc/systemd/system/目录:

$ ln -sf /lib/systemd/system/mutli-user.target /etc/systemd/system/default.target

系统管理服务

命令

作用

systemctl start *.service

启动服务

systemctl restart *.service

重启服务

systemctl stop *.service

停止服务

systemctl reload *.service

重新加载配置文件(不终止服务)

systemctl status *.service

查看服务状态

systemctl设置服务开机启动

命令

作用

systemctl enable *.service

开机自动启动

systemctl disable *.service

开机不自动启动

systemctl is-enabled *.service

检测指定服务是否开机自启

systemctl list-unit-files --type=service

查看各个级别下服务的启动与禁用情况

二、简单命令

查看帮助文档

  1. man command
  2. linux怎么学习java linux就这么学_Linux

  3. info command
  4. command --help/-h

常用系统工作

1. echo命令

用于在终端输出字符串或变量提取后的值

echo Hello_World

echo $PATH

2. date命令

用于显示和设置系统的时间/日期

date "+%Y-%m-%d %H:%M:%S":按照2019-05-21 13:11:11的格式显示,格式可选

date "+%j":显示当前是一年内的第几天

date -s "20190521 13:11:11":设置当前时间为2019-05-21 13:11:11

3. poweroff/shutdown命令

用于关闭机器,rebootshutdown -r效果一样,重启机器

4. wget命令

用于在终端下载网络文件

参数

作用

- b

后台下载

- p

下载到指定目录

-r

递归下载

wget url

5. ps命令

用于查看系统中的进程状态

参数

作用

-a

显示所有进程(包括其他用户的进程)

-u

用户以及其他详细信息

-x

显示没有控制终端的进程

ps -aux

6. top命令

用于动态地监控进程活动和系统负载等信息

top

linux怎么学习java linux就这么学_linux_02

结果

含义

第1行:概览

系统时间、运行时间、登录终端数、系统负载(分别是1分钟、5分钟、15分钟的平均值,数值和负载成正比)

第2行:各个状态进程数

进程总数、运行中的进程数、睡眠的进程数、停止的进程数、僵死的进程数

第3行:资源占用百分比

用户、系统内核、改变过优先级的进程、空闲的资源

第4行:物理内存

总量、空限量、使用量、内核缓存量

第5行:交换区内存

7. pidof命令

用于查询某个指定服务进程的PID

pid sshd

8. kill/killall命令

用于终止某个指定PID的进程(kill)或终止某个指定名称的服务的所有进程(killall)

kill -9 12222

killall httpd

检测系统状态

1. ifconfig命令

用户获取网卡配置与网络状态等信息

ifconfig

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.2 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:0c:29:46:17:61 txqueuelen 1000 (Ethernet)
RX packets 192858 bytes 136055437 (129.7 MiB)
 RX errors 0 dropped 0 overruns 0 frame 0
TX packets 165876 bytes 22161518 (21.1 MiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2. uname命令

用于查看系统内核与系统版本信息

uname -a

Linux study.rambo 3.10.0-957.10.1.el7.x86_64 #1 SMP Mon Mar 18 15:06:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

要查看当前系统版本的详细信息:

cat /etc/redhat-relaease

CentOS Linux release 7.6.1810 (Core)
3. uptime 命令

用于查看系统的负载信息

uptime

13:50:59 up 8 days, 2:43, 1 user, load average: 0.00, 0.01, 0.05
4. free命令

用于查看当期系统中内存的使用量

free -h:打印可读的内存用量信息

total used free shared buff/cache available
 Mem: 972M 442M 78M 8.8M 451M 276M
 Swap: 2.0G 363M 1.6G
5. df命令

用于查看系统磁盘使用量

df -h

文件系统 容量 已用 可用 已用% 挂载点
 /dev/mapper/centos_study-root 10G 5.2G 4.9G 52% /
 devtmpfs 475M 0 475M 0% /dev
 tmpfs 487M 0 487M 0% /dev/shm
 tmpfs 487M 14M 473M 3% /run
 tmpfs 487M 0 487M 0% /sys/fs/cgroup
 /dev/sda2 1014M 199M 816M 20% /boot
 /dev/mapper/centos_study-home 5.0G 187M 4.9G 4% /home
 tmpfs 98M 0 98M 0% /run/user/1000
6. du命令

用户查看指定目录/文件的磁盘占用

du -h w3m-0.5.3.tar.gz

2.2M w3m-0.5.3.tar.gz
7. who命令

用户查看当前登入主机的用户终端信息

who

rambo pts/0 2019-05-20 10:33 (192.168.2.16)
8. last命令

用于查看所有系统的登录记录,该记录以日志形式保存在系统中,可以被修改

last

rambo pts/0 192.168.2.16 Mon May 20 10:33 still logged in
 rambo pts/0 192.168.2.16 Mon May 13 11:08 - 19:02 (4+07:53)
 reboot system boot 3.10.0-957.10.1. Mon May 13 11:08 - 14:38 (8+03:30)
 rambo pts/1 192.168.2.16 Wed May 8 12:00 - crash (4+23:07)
 rambo pts/0 192.168.2.16 Tue May 7 10:28 - crash (6+00:39)
 rambo pts/0 192.168.2.16 Mon May 6 12:25 - 12:34 (00:08)
 rambo pts/0 192.168.2.16 Tue Apr 30 17:13 - 17:18 (00:04)
 rambo pts/0 192.168.2.16 Tue Apr 30 15:38 - 16:32 (00:54)
 rambo pts/0 192.168.2.16 Tue Apr 30 15:05 - 15:33 (00:28)
 rambo pts/0 192.168.2.16 Tue Apr 30 11:58 - 12:41 (00:42)
 reboot system boot 3.10.0-957.10.1. Tue Apr 30 11:58 - 14:38 (21+02:40)
9. history命令

用户显示历史执行过的命令,!line_num可以直接执行该行命令

history

1066 free -h
 1067 ds
 1068 dk
 1069 fd
 1070 fs
 1071 df -h
 1072 du -h
 1073 du
 1074 df -h
 1075 cd
 1076 du -h
 1077 df -h
 1078 cd /dev/mapper/
 1079 du
 1080 du -f
 1081 du -h
 1082 ll
 1083 cd
 1084 ll
 1085 du -h playground
 1086 ll
 1087 du -h w3m-0.5.3
 1088 du -h w3m-0.5.3.tar.gz

!1088

du -h w3m-0.5.3.tar.gz
 2.2M w3m-0.5.3.tar.gz

cat ~/.his

切换工作目录

1. pwd命令

用户显示当前所处的工作目录

pwd

/home/rambo
2. cd 命令

cdcd ~:切换到家目录

cd -:切换到上次的目录

cd /:切换到根目录

编辑文本文件

1. cat命令

用户查看内容较少的纯文本文件

cat -n 文件

linux怎么学习java linux就这么学_x系统_03

2. more/less命令

more:一个基于vi编辑器的文本过滤器,只能向前浏览

less:与more相似,差别在于其可以向前或向后浏览

按键

作用

Space空格键

下一屏

Enter回车

下一行

PageDown

向下翻页

PageUp

向上翻页

/+字符串

匹配查找

n

下一个匹配

N

上一个匹配

3. head/tail命令

head:用于显示文件开通的内容,默认前十行

tail:用于显示文件的尾部内容,而且持续刷新一个文件的内容

参数

作用

-n<数字>

指定显示头部内容的行数

按键内容和less相似

4. tr 命令

用于替换文本文件或标准输入的字符

选项

作用

-c

取代所有不属于第一字符集的字符

-d

删除所有属于第一字符集的字符

-s

把连续重复的字符以单独一个字符表示

$ echo “HELLO WORLD” | tr [A-Z] [a-z]
 hello world$ echo “HELLO WORLD sss” | tr -d [a-z]
 HELLO WORLD
5. wc命令

用于统计指定文本的行数、字数和字节数

参数

作用

-l

只显示行数

-w

只显示单词数

-c

只显示字节数

$ wc /etc/passwd
 22 40 1029 /etc/passwd表示该文件有22行;40个单词;1029个字节
$ wc -l /etc/passwd
 22 /etc/passwd
 $ wc -w /etc/passwd
 40 /etc/passwd
 $ wc -c /etc/passwd
 1029 /etc/passwd
6. stat 命令

用于查看文件的具体存储信息和时间等信息

stat /etc/passwd
文件:"/etc/passwd"
大小:1029 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:17094533 硬链接:1
权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2019-05-23 12:01:01.413802969 +0800
最近更改:2019-03-05 11:53:05.231107128 +0800
最近改动:2019-03-05 11:53:05.232107140 +0800

7. cut 命令

用于按列提取文本字符

参数

作用

-f

指定要提取的列

-d

指定间隔符号

$ cut -d: -f1 /etc/passwd
 root
 bin
 daemon
 adm
 lp
8. diff 命令

用于比较多个文本文件的差异

$ diff --brief diff_A.txt diff_B.txt
 文件 diff_A.txt 和 diff_B.txt 不同$ diff -c diff_A.txt diff_B.txt
 *** diff_A.txt 2019-05-20 12:02:59.646072244 +0800
 — diff_B.txt 2019-05-20 12:03:21.945384356 +0800*** 1,5 ****
 ! Welcome to linuxprobe.com Red Hat certified
 ! Free Linux Lessons
 Professional guidance
 Linux Course
 — 1,6 ----
 ! Welcome tooo linuxprobe.com Red Hat certified
 ! Free Linux LeSSonS
 ! …
 Professional guidance
 Linux Course

管理文件目录

1. touch 命令

用于创建空白文件或设置文件的时间。也可以用vi等编辑器直接编辑不存在的文件后就新建文件

参数

作用

-a

仅修改 读取时间 atime

-m

仅修改 修改时间 mtime

-d

同时修改 atime 和 mtime

$ touch file.txt

2. mkdir 命令

用于创建空白的目录

$ mkdir {2007…2009}-0{1…9} {2007…2009}-{10…12}
 $ ls
 2007-01 2007-07 2008-01 2008-07 2009-01 2009-07
 2007-02 2007-08 2008-02 2008-08 2009-02 2009-08
 2007-03 2007-09 2008-03 2008-09 2009-03 2009-09
 2007-04 2007-10 2008-04 2008-10 2009-04 2009-10
 2007-05 2007-11 2008-05 2008-11 2009-05 2009-11
 2007-06 2007-12 2008-06 2008-12 2009-06 2009-12
3. cp 命令

用于复制文件或目录

参数

作用

-p

保留原始文件的属性

-d

若对象为“链接文件”,则保留该属性

-r

递归持续复制

-i

若目标文件存在则询问是否覆盖

-a

相当于-pdr

4. mv 命令

用于剪切或将文件重命名

$ mv x.log linux.lg

对同一个目录中对一个文件进行剪切操作就是重命名文件

5. rm 命令

用于删除文件或目录

6. dd 命令

用于按照制定大小和个数的数据块来复制和转换文件

参数

作用

if

输入的文件名称

of

输出的文件名称

bs

设置每个块的大小

count

设置要复制块的个数

$ dd if=/dev/zero of=file.file count=1 bs=500M
 记录了1+0 的读入
 记录了1+0 的写出
 524288000字节(524 MB)已复制,2.74164 秒,191 MB/秒
7. file命令

用于查看文件的类型

$ file anaconda-ks.cfg
 anaconda-ks.cfg: ASCII text
 $ file /dev/sda
 /dev/sda: block special

文件归档打包和压缩

1. tar 命令

用于文件归档,将多个文件归档到一个文件中;在归档的同时也可对文件进行压缩,文件格式一般为*.tar*.tar.gz*.tar.bz2

参数

作用

-c

创建归档文件

-x

解开归档文件

-t

查看归档包里有哪些文件

-z

使用gzip压缩或解压

-j

用bzip2压缩或解压

-v

显示归档过程

-f

目标文件名

-p

保留原始的权限与属性

-P

使用绝对路径

-C

解压到指定目录

tar czvf linuxprobe.tar.gz diff_A.txt diff_B.txt file.file
 diff_A.txt
 diff_B.txt
 file.file
 [rambo@study linuxprobe]$ ll
 总用量 517724
 -rw-rw-r–. 1 rambo root 98 5月 20 12:02 diff_A.txt
 -rw-rw-r–. 1 rambo root 122 5月 20 12:03 diff_B.txt
 -rw-rw-r–. 1 rambo root 4862064 5月 23 15:42 etc.tar.gz
 -rw-rw-r–. 1 rambo root 524288000 5月 23 15:12 file.file
 -rw-rw-r–. 1 rambo root 10 5月 20 14:12 LinuxDemo.txt
 -rw-rw-r–. 1 rambo root 509099 5月 23 15:44 linuxprobe.tar.gz
2. find 命令

用于按照指定条件来查找文件

参数

作用

-name

匹配名称

–type [b/d/c/p/l/f]

匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管

道、链接文件、文本文件)

-exec ······ {} \

后面可跟用于进一步处理搜索结果的命令

$ find -name ‘diff*’ -exec cp -a {} ~ ;
 [rambo@study ~]$ ll
 总用量 64008
 drwxrwxr-x. 2 rambo root 23 4月 11 11:13 admin
 drwxrwxr-x. 2 rambo root 42 5月 14 12:47 bin
 -rw-rw-r–. 1 rambo root 98 5月 20 12:02 diff_A.txt
 -rw-rw-r–. 1 rambo root 122 5月 20 12:03 diff_B.txt

其中的 {} 表示find命令搜索出的每一个文件,并且命令的结尾必须是 \;

三、管道符、重定向与环境变量

输入输出重定向

1. 分类

名称

描述符

作用

标准输入重定向

STDIN, 0

默认从键盘输入,也可从其他文件或命令中输入

标准输出重定向

STDOUT, 1

默认输出到屏幕

错误输出重定向

STDERR, 2

默认输出到屏幕

2. 重定向符号及作用

符号

例子

作用

<

命令 < 文件

将文件作为命令的输入

<<

命令 << 分界符

从标准输入中读取,直到遇见分界符才停止

< >

命令 < 文件1 > 文件2

将文件1作为命令的标准输入并将执行结果的标准输出重定向到文件2

>

命令 > 文件

将标准输出重定向到文件中,覆盖写模式

>>

命令 >> 文件

将标准输出重定向到文件中,追加写模式

2>

命令 2> 文件

将错误输出重定向到文件中,覆盖写模式

2>>

命令 2>> 文件

将错误输出重定向到文件中,追加写模式

>> 2>&1或者 &>>

命令 >> 文件 2>&1

或者

命令 &>> 文件

将标准输出和错误输出都写入文件中,追加写模式

常用的转义字符

符号

作用

例子

反斜杠 \

使反斜杠后面的一个变量变为单纯的字符串

$ echo "Price is \$$PRICE"

Price is $5

单引号 ''

转义其中所有的变量为单纯的字符串

$ echo 'Price is $PRICE’

Price is $PRICE

双引号 ""

保留其中的变量属性,不进行转义处理

$echo "Price is $PRICE"

Price is 5

反引号 | 把其中命令的执行结果返回 | $ echouname -a`

Linux study.rambo 3.10.0-957.10.1.el7.x86_64 #1 SMP Mon Mar 18 15:06:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

重要的环境变量

新增变量
[root@linuxprobe ~]# mkdir /home/workdir
 [root@linuxprobe ~]# WORKDIR=/home/workdir
 [root@linuxprobe ~]# cd $WORKDIR
 [root@linuxprobe workdir]# pwd
 /home/workdir
修改变量值
[root@linuxprobe ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 86: …t@linuxprobe ~]#̲ PATH=PATH:/root/bin
 [root@linuxprobe ~]# echo $PATH
 /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

四、 Vim编辑器与Shell命令脚本

Vim编辑器

三种操作模式
  1. 命令模式:刚打开文件/Esc进入该模式;控制光标移动,对文本进行复制、剪切、粘贴、删除和查找等功能
  2. 输入模式:正常的录入模式,进入方式
  • o:光标后一位
  • i/insert:光标当前位置
  • a:光标下新建一行
  1. 末行模式:保持或退出文档,也可以在此执行一些命令

linux怎么学习java linux就这么学_linux怎么学习java_04

命令模式常用命令

命令

作用

dd

删除(剪切)光标所在整行

5dd

删除(剪切)从光标处开始的 5 行

yy

复制光标所在整行

5yy

复制从光标处开始的 5 行

n

显示搜索命令定位到的下一个字符串

N

显示搜索命令定位到的上一个字符串

u

撤销上一步的操作

p

将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

末行模式常用命令

命令

作用

:w

保存

:q

退出

:q!

强制退出,不保存

:wq!

强制保存退出

:set nu

显示行号,当shell脚本报错时通过报错信息定位问题

:set nonu

不显示行号

:命令

执行该命令

:整数

跳转到该行

:s/one/two

将光标所在行的第一个one替换成two

:s/one/two/g

将光标所在行的所有one替换成two

:%s/one/two/g

替换全文中的one

?字符串

从下到上搜索

/

从上到下搜索

配置主机名称
  1. vi编辑/etc/hostname文件;修改内容
  2. hostname命令查看。
配置网卡信息
  1. 进入/etc/sysconfig/network-scripts/目录;
  2. 编辑相应的网卡名称的文件,如ifcfg-ens33
➢ 设备类型: TYPE=Ethernet
➢ 地址分配模式: BOOTPROTO=static
➢ 网卡名称: NAME=eno16777736
➢ 是否启动: ONBOOT=yes
➢ IP 地址: IPADDR=192.168.10.10
➢ 子网掩码: NETMASK=255.255.255.0
➢ 网关地址: GATEWAY=192.168.10.1
➢ DNS 地址: DNS1=192.168.10.1
  1. 重启网络服务:systemctl restart network

编写Shell脚本

Shell脚本命令的工作方式分为两种

- 交互式:用户每输入一条命令就立即执行
  • 批处理:由用户事先编写好一个完整的 Shell 脚本, Shell 会一次性执行脚本
    中诸多的命令。

查看终端解释器:

[rambo@study ~]$ echo $SHELL
 /bin/bash
简单的脚本
  • 导入shell解释器
  • 注释
  • shell命令
[root@linuxprobe ~]# vim example.sh #!/bin/bash 导入bash作为解释器 #For Example BY本脚本的注释
 pwd
 ls -al

执行:

  • 解释器执行:
[root@linuxprobe ~]# bash example.sh /root/Desktop
 total 8
 drwxr-xr-x. 2 root root 23 Jul 23 17:31 .
 dr-xr-x—. 14 root root 4096 Jul 23 17:31 …
  • 直接执行
[root@linuxprobe ~]# ./example.sh
 bash: ./Example.sh: Permission denied
 [root@linuxprobe ~]# chmod u+x example.sh [root@linuxprobe ~]# ./example.sh
 /root/Desktop
 total 8
 drwxr-xr-x. 2 root root 23 Jul 23 17:31 .
 dr-xr-x—. 14 root root 4096 Jul 23 17:31 …
 -rwxr–r--. 1 root root 55 Jul 23 17:31 example.sh
bash: ./Example.sh: Permission denied
 [root@linuxprobe ~]# chmod u+x example.sh [root@linuxprobe ~]# ./example.sh
 /root/Desktop
 total 8
 drwxr-xr-x. 2 root root 23 Jul 23 17:31 .
 dr-xr-x—. 14 root root 4096 Jul 23 17:31 …
 -rwxr–r--. 1 root root 55 Jul 23 17:31 example.sh
接收用户参数
shell脚本内置参数

参数名

作用

$0

脚本程序名称

$?

对应上次命令的返回值

$#

参数的个数

$*

所有位置的参数值

$1-$6

分别对应第N个参数的值

判断用户参数

Shell脚本中的条件测试语法可以判断表达式是否成立,如果成立返回0;否则返回其他随机数值。

语法

[ 条件表达式 ]

条件测试语句

分为4种:

  • 文件测试语句;

运算符

作用

-d

测试文件是否为目录

-e

测试文件是否存在

-f

判断是否为一般文件

-r

测试当前用户是否有权限读取

-w

测试当前用户是否有权限写入

-x

测试当前用户是否有权限执行

[rambo@study ~]$ [ -d /etc/favicon.png ]
 [rambo@study ~]$ echo $?
 1
  • 逻辑测试语句;

命令

作用

&&

逻辑与,当前面的命令执行成功后才会执行后面的命令

||

逻辑或,当前面的语句执行失败才执行后面的命令

!

非,将测试条件的结果取反

[rambo@study ~]$ [ $USER = root ] && echo “root” || echo “user”
 user[rambo@study ~]$ su - root
 [root@study ~]# [ $USER = root ] && echo “root” || echo “user”
 root
  • 整数值比较语句

参数

作用

-eq

是否相等

-ne

是否不等

-gt

是否大于

-lt

是否小于

-le

是否小于等于

-ge

是否大于等于

[rambo@study ~]$ [ 10 -eq 10 ]
 [rambo@study ~]$ echo  [ 10 -lt 10 ]
 [rambo@study ~]$ echo $?
 1
  • 字符串比较语句

参数

作用

=

比较字符串是否相同

!=

比较字符串是否不同

-z

判断字符串是否为空

[rambo@study ~]$ [ -z  echo $?
 1

流程控制语句

if

从技术角度区分:

  • 单分支结构

if 条件测试操作

then 命令

fi

  • 双分支结构
if 条件测试操作
then 命令1
else 命令2
fi
#!/bin/bash
 ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
 if [ $? -eq 0 ]
 then
 echo “Host $1 is On-line.”
 else
 echo “Host $1 is Off-line.”
 fi
  • 多分支结构
if 条件测试操作1
then 命令1
elif 条件测试操作2
then 命令2
else
命令3
fi
#!/bin/bash
read -p “Enter your score(0–100):” GRADE
 if [ $GRADE -lt 0 ] || [ GRADE is Error"
 elif [ $GRADE -ge 85 ] && [ GRADE is Excellent"
 elif [ $GRADE -ge 70 ] && [ GRADE is Pass"
 else
 echo “$GRADE is Fail”
 fi
for
for 变量名 in 取值列表
do
命令序列
done
[rambo@study linuxprobe]$ cat ipadds.txt
 192.168.2.3
 192.168.2.1
 8.8.8.8
 1.1.1.1
 114.114.114.114[rambo@study linuxprobe]$ vi CheckHosts.sh
#!/bin/bash
 HLIST=$(cat ./ipadds.txt)
 for IP in $HLIST
 do
 ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
 if [ $? -eq 0 ]
 then
 echo “Host $IP is On-line.”
 else
 echo “Host $IP is Off-line.”
 fi
 done[rambo@study linuxprobe]$ bash CheckHosts.sh Host 192.168.2.3 is Off-line.
 Host 192.168.2.1 is On-line.
 Host 8.8.8.8 is On-line.
 Host 1.1.1.1 is On-line.
 Host 114.114.114.114 is On-line.
while
while 条件测试操作
do
命令序列
done
#!/bin/bash
 PRICE=$(expr $RANDOM % 1000)
 TIMES=0
 echo “商品实际价格0-999之间,猜猜看是多少?”
 while true
 do
 read -p “请输入您猜测的价格:” INT
 let TIMES++
 if [ $INT -eq PRICE,您共猜了 $TIMES 次"
 exit 0
 elif [ $INT -gt $PRICE ]
 then
 echo “太高了”
 elif [ $INT -lt $PRICE ]
 then
 echo “太低了”
 fi
 done[rambo@study linuxprobe]$ bash Guess.sh 商品实际价格0-999之间,猜猜看是多少?
 请输入您猜测的价格:500
 太高了
 请输入您猜测的价格:250
 太低了
 请输入您猜测的价格:325请输入您猜测的价格:296
 太高了
 请输入您猜测的价格:291
 太低了
 请输入您猜测的价格:293
 太高了
 请输入您猜测的价格:292
 恭喜您答对了。实际价格是292,您共猜了 11 次
case
case 变量值 in
模式1)
 命令序列1
;;
模式2)
命令序列2
;;
…
*)
默认命令序列
esac
[rambo@study linuxprobe]$ cat Checkkeys.sh #!/bin/bash
 read -p “请输入一个字符,并按Enter键确认:” KEY
 case “$KEY” in
 [a-z]|[A-Z])
 echo “字母”
 ;;
 [0-9])
 echo “数字”
 ;;
 *)
 echo “空格、功能键、或其他控制字符”
 esac

计划任务服务程序

一次性计划任务

命令

作用

at

设置任务,交互式

echo “命令序列” | at 时间

设置任务,非交互式

at -l

罗列一次性计划任务

atrm 任务序号

删除任务

[root@linuxprobe ~]# echo “systemctl restart httpd” | at 23:30
 job 4 at Mon Apr 27 23:30:00 2017
 [root@linuxprobe ~]# at -l
 3 Mon Apr 27 23:30:00 2017 a root
 4 Mon Apr 27 23:30:00 2017 a root[root@linuxprobe ~]# atrm 3
 [root@linuxprobe ~]# at -l
 4 Mon Apr 27 23:30:00 2017 a root
长期性计划任务

命令

作用

crontab -e

创建、编辑任务

crontab -l

查看当前任务

crontab -r

删除指定任务

crontab -u

编辑其他用户的任务

crontab的参数:星期命令

字段

说明


[0-59]


[0-23]


[1-31]


[1-12]

星期

[0-7],0和7 都为星期日

命令

要执行的命令或脚本

[root@linuxprobe ~]# crontab -l
 25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
 0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

五、用户身份和文件权限

用户UID

id范围

分类

0

系统的管理员用户

1-999

系统用户

1000及以上

普通用户,由管理员创建的用于日常工作的用户

查看用户ID和用户组
[rambo@study ~]$ id
 uid=1000(rambo) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
 [rambo@study ~]$ id rambo
 uid=1000(rambo) gid=0(root) 组=0(root)
 [rambo@study ~]$ id root
 uid=0(root) gid=0(root) 组=0(root)

在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且
这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户
组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满
足日常的工作需要。

添加用户

useradd [选项] 用户名

参数

作用

-d

指定用户的家目录,默认: /home/username

-e

账户的过期时间,格式为YYYY-MM-DD

-u

指定该用户的默认UID

-g

指定一个初始的用户基本组(必须已存在)

-G

指定一个或多个扩展用户组

-N

不创建与用户同名的基本用户组

-s

指定该用户的默认Shell解释器

[rambo@study ~]$ sudo useradd -d /home/rambo -u 8888 -g rambo rambo2
 [sudo] rambo 的密码:
 useradd:警告:此主目录已经存在。
 不从 skel 目录里向其中复制任何文件。
 [rambo@study ~]$ id rambo2
 uid=8888(rambo2) gid=1000(rambo) 组=1000(rambo)
添加用户组

groupadd [选项] 群组名

修改用户信息

usermod [选项] 用户名

用户信息保存在/etc/passwd文件中,可以直接编辑该文件来修改用户;也可以使用usermod命令修改已经创建的用户信息,诸如用户的 UID、基本/扩展
用户组、默认终端等 。

参数

作用

-c

填写用户账户的备注信息

-d -m

参数连用,重新指定用户的家目录并自动把旧数据迁移

-e

账户的过期时间,格式为`YYYY-MM-DD

-g

变更所属用户组

-G

变更扩展用户组

-L

锁定用户,禁止登录

-U

解锁用户

-s

变更默认终端

-u

修改UID

[rambo@study ~]$ sudo usermod -G rambo rambo
 [sudo] rambo 的密码:
 [rambo@study ~]$ id rambo
 uid=1000(rambo) gid=0(root) 组=0(root),1000(rambo)passwd [选项] 用户名

passwd 命令用于修改用户密码、过期时间、认证信息等 。

参数

作用

-l

锁定用户

-u

解锁

–stdin

允许通过标准输入修改用户密码;echo "new_password" | passwd --stdin Username

-d

使该用户可以使用空密码登录

-e

强制用户下次登录时修改密码

-S

显示用户的密码是否被锁定,以及密码所采用的加密算法

[root@linuxprobe ~]# passwd
 Changing password for user root.
 New password:
 Retype new password:
 passwd: all authentication tokens updated successfully.
 [root@linuxprobe ~]# passwd linuxprobe
 Changing password for user linuxprobe.
 New password:
 Retype new password:
 passwd: all authentication tokens updated successfully
删除用户

userdel [选项] 用户名

参数

作用

-f

强制删除用户

-r

同时删除用户及其家目录

文件权限

字符

类型

-

普通文件

d

目录文件

l

链接文件

b

块设备文件

c

字符设备文件

p

管道文件

linux怎么学习java linux就这么学_文本文件_05


linux怎么学习java linux就这么学_linux怎么学习java_06