cd /opt
进入opt目录tar -zxvf xx.tar.gz
解压./xx-install.pl
安装pwd
显示当前用户在哪个目录/
,windows中,我们可以有c,d,e盘,但是也可以改名为文件盘,游戏盘等等,但是在linux中,/
不可以修改名字ifconfig
,来得知ip地址vi和vim的三种模式
上下左右
按键来移动光标,你可以使用删除字符或删除整行
来处理文档内容,也可以使用赋值.粘贴
来处理你的文件数据i I o O a A r R
字母后才可以进入编辑模式,一般按i就可以,摁esc
退出插入模式:
进入命令行模式,在这个模式中,可以提供你相关指令,完成读取,存盘,替换,离开vim,显示行号等动作
写一个简单的c++程序并运行
vim hello.cpp
i
进入编辑模式,输入以下代码#include
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
g++ hello.cpp
, 就会生成一个 a.out 可执行文件(这里注意,wim平台下生成的应该是.exe文件)g++ hello.cpp -o hjl
即可./hjl
执行,终端输出 hello world
快捷键
u
shutdown -h now
立即进行关机 h->halt 停止shutdown -h 1
一分钟后关机shutdown -r now
现在重新启动计算机halt
关机reboot
重启sync
把内存的数据同步到硬盘注意 :
不论是重新启动还是关机,首先要运行sync命令,把内存的数据写入到硬盘中
目前的shutdown/halt/reboot指令均会在关机前进行sync,但是小心驶得万年船
sudo - 用户名
来切换成系统管理员身份,注意-和用户名之间有空格useradd milan
创建用户名称为milan的用户passwd milan
给用户milan设置密码userdel milan
userdel -r milan
su - 要切换的用户名
who am i
类似于角色,系统可以对有共性/权限的多个用户进行统一的管理
groupadd 组名
groupdel 组名
usermod -g 新用户组名 用户名
例如 usermod -g mojiao king
用户的配置文件,记录用户的各种信息
每行的含义 :
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
口令的配置文件
每行的含义 :
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
组(group)的配置文件,记录linux包含的组的信息
每行含义 :
组名:口令:组标识号:组内用户列表
0 :关机
1 :单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是 3 和 5 ,也可以指定默认运行级别, 后面演示
在 centos7 以前, /etc/inittab 文件中 . 进行了简化 ,如下:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
# To view current default target, run: systemctl get-default
# To set a default target, run: systemctl set-default TARGET.target
在终端输入
systemctl set-default multi-user.target
man ls
基本语法 : man[命令或配置文件](功能描述 : 获得帮助信息)
案例 : 查看ls命令的帮助信息
基本语法 : help 命令(功能描述 : 获得shell内置命令的帮助信息)
mkdir /home/dog
mkdir -p /home/animal/tiger
rm -rf 要删除的目录
但是使用该命令要非常的谨慎touch 文件名称
touch hello.txt
cp /home/hello.txt bbb/
cp -r /home/bbb /opt/
\cp -r /home/bbb /opt
就可以强制覆盖,不提示方法rm [选项] 要删除的文件或目录
rm /home/hello.txt
rm -r /home/bbb
rm -rf /home/bbb
mv oldNameFile newNameFile
mv /temp/movefile /targetFolder
mv /home/cat.txt /home/pig.txt
mv /home/pig.txt /root
,如果是mv home/pig.txt home/cat.txt
就是移动并重命名mv /opt/bbb /home
cat -n /etc/profile
cat -n /etc/profile | more[进行交互]
enter
,就可以再看下一行,摁space
可以看下一页more 要查看的文件名
less 要查看的文件
echo [选项] [输出内容]
echo $PATH
echo $HOSTNAME
echo hello,world!
head 文件
,显示文件的前10行head -n 5 文件
查看文件的前5行tail 文件
tail -n 5 文件
tail -f 文件
实时追踪该文档的所有更新,退出追踪摁ctrl + c
例如 : 实时监控mydate.txt,看看文件是否有变化,是否看到实时的追加
touch mydate.txt
tail -f /heme/mydate.txt
这个时候打开另一个终端输入 :
echo > hello world > /home/mydate.txt
ls -l > 文件
列表的内容写入文件中ls -al >> 文件
列表的单列内容追加写入文件中cat 文件1 > 文件2
将文件1的内容覆盖到文件2echo 内容
>> 文件,将文件1的内容覆盖到文件2ls -l > /home/info.txt
,如果info不存在,系统会为我们创建ln -s [原文件或目录] [软链接名]
给原文件创建一个软连接ln -s /root /home/myroot
rm /home/myroot
[root@hjl home]# ln -s /root /home/myroot
[root@hjl home]# cd /home/myroot
[root@hjl myroot]# pwd
/home/myroot 而不是 /root
history
history
history 10
!5
date
date "+%Y-%m-%d"
date "+%Y %m %d %H:%M:%S
date -s 字符串时间
date -s "2020-11-03 20:02:10"
cal [选项]
如果不加选项,显示当月日历cal
cal 2020
find [搜索范围] [选项]
搜索范围 : 在哪个目录下查找find /home -name hello.txt
find /opt -user nobody
find / -size +200M
locate 搜索文件
locate hello.txt
which ls
|
,表示将前一个命令的处理结果输出传递给后面的命令处理。grep [选项] 查找内容 源文件
cat /home/hello.txt | grep -n yes
grep -n yes /home/hello.txt
gzip 文件
(功能描述:压缩文件,只能将文件压缩为*.gz 文件)gunzip 文件.gz
(功能描述:解压缩文件命令)gzip /home/hello.txt
gunzip /home/hello.txt.gz
zip [选项] XXX.zip
将要压缩的内容(功能描述:压缩文件和目录的命令)unzip [选项] XXX.zip
(功能描述:解压缩文件)zip -r /home/ myhome.zip
unzip -d /opt/tmp /home/myhome.zip
tar [选项] XXX.tar.gz
打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
注意,压缩的时候会保存目录架构,比如说我们的打包压缩命令是tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
,那么最后我们压缩的文件的目路结构就是/home/pig和cattar -zcvf myhome.tar.gz /home/
tar -zxvf pc.tar.gz
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
-C代表指定解压目录ls –ahl
chown 用户名 文件名
chown hjl apple.txt
groupadd 组名
groupadd monster
useradd -g monster fox
-rw-r--r--. 1 fox monster 0 8月 24 11:38 ok.txt
chgrp 组名 文件名
chgrp -> change grouptouch orange.txt
ls -l
groupadd fruit
chgrp fruit orange.txt
显示 :
-rw-r--r--. 1 root fruit 0 8月 24 11:50 orange.txt
usermod –g 新组名 用户名
usermod –d 目录名 用户名
改变该用户登陆的初始目录。特别说明:用户需要有进入到新目录的权限。usermod -g wudang zwj
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
1. 第一列10个数字说明
1. 第 0 位确定文件类型(d, - , l , c , b)
l 是链接,相当于 windows 的快捷方式
d (directory)是目录,相当于 windows 的文件夹
c (character)是字符设备文件,鼠标,键盘
b (block)是块设备,比如硬盘
- 普通文件
2. 第 1-3 位确定所有者(该文件的所有者)拥有该文件的权限。---User
3. 第 4-6 位确定所属组(同用户组的)拥有该文件的权限,---Group
4. 第 7-9 位确定其他用户拥有该文件的权限 ---Other
2. 第二列 :硬链接数,目录,子目录数
3. 第三列 : 所属用户
4. 第四列 : 所属组
5. 第五列 : 大小(B)
6. 第六列 : 最后的修改时间
7. 第七列 : 名称
注意 : rwx可用数字表示为: r=4,w=2,x=1 因此 rwx=4+2+1=7 , 数字可以进行组合
chmod u=rw,g=rx,o=rx abc
chmod u-x,g+w,o+w adc
chmod a+r adc
chmod u=rwx,g=rx,o=x 文件目录名
chmod 755 /home/abc.txt
chown newowner 文件/目录
改变所有者chown newowner:newgroup 文件/目录
改变所有者和所在组chown king /home/abc.txt
chown -R king /home/test
chgrp newgroup 文件/目录
【 改变所在组】chgrp shaolin /home/abc.txt
chgrp -R shaolin /home/test
police , bandit
jack, jerry: 警察
xh, xq: 土匪
groupadd police
groupadd bandit
useradd -g police jack
useradd -g police jery
useradd -g bandit xh
useradd -g bandit xq
touch jackFile.txt
chmod 640 jackFile.txt
chmod o=r,g=wr jackFile.txt
crontab
进行 定时任务的设置crontab [选项]
设置任务调度文件:/etc/crontab
设置个人任务调度。执行 crontab –e 命令。
接着输入任务到调度文件
如:*/1 * * * * ls –l /etc/ > /tmp/to.txt
意思说每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WnmqtffP-1630734433338)(…/images/5ab156a8f447acd157ece50b000698dab7d2b1df3365971d1af66c4460d80196.png)]
先写脚本my.sh
date >> /tmp/mycal
cal >> /tmp/mycal
之后给my.sh增加可执行权限 chmod u+x my.sh
crontab -e
增加一句话
*/1 * * * * /home/my.sh
1) at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行。
2) 默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则 运行此作业。
3) at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
4) 在使用 at 命令的时候,一定要保证 atd 进程的启动 , 可以使用相关指令来查看 ps -ef | grep atd //可以检测 atd 是否在运行
at [选项] [时间]
Ctrl + D
结束 at 命令的输入, 输出两次ps -ef
检测当前有哪些运行的进程[root@hjl ~]# at 5pm + 2 days
at> /bin/ls /home<EOT>
job 1 at Sat Aug 28 17:00:00 2021
[root@hjl ~]# atq
1 Sat Aug 28 17:00:00 2021 a root
atq
at 5pm tomorrow
date > /root/date100.log
at now + 2 minutes
date > /root/date200.log
atrm 编号
lsblk
或者 lsblk -f
fdisk /dev/sdb
[root@hjl ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x074210b3 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@hjl ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part
sr0 11:0 1 1024M 0 rom
lsblk -f
会发现,系统没有给新的分区设置uuid
mkfs -t ext4 /dev/sdb1
lsblk -f
会发现,系统没有给新的分区设置挂载点
mount 设备名称 挂载目录
mount /dev/sdb1 /newdisk
umount /dev/sdb1
或者 umount /newdisk
mount –a
即刻生效df -h
, df -h /目录
可以查看对于目录的磁盘占用情况,默认为当前目录[root@hjl /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 17G 5.7G 11G 37% /
devtmpfs 895M 0 895M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 11M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 976M 144M 766M 16% /boot
.host:/ 238G 157G 81G 67% /mnt/hgfs 这个这么大,是我们设置的虚拟目录,所以显示的是我们windows对于磁盘大小
tmpfs 182M 4.0K 182M 1% /run/user/42
tmpfs 182M 28K 182M 1% /run/user/0
du -h
[root@hjl opt]# du -h --max-depth=1 /opt
4.0K /opt/ccc
4.0K /opt/rh
20K /opt/tmp
96M /opt/tmp2
163M /opt/vmware-tools-distrib
315M /opt ->这是汇总
-- 连带文件显示
[root@hjl opt]# du -ha --max-depth=1 /opt
4.0K /opt/ccc
4.0K /opt/rh
54M /opt/VMwareTools-10.3.22-15902021.tar.gz
3.5M /opt/杂文.txt
20K /opt/tmp
96M /opt/tmp2
163M /opt/vmware-tools-distrib
315M /opt
-- 显示总大小
[root@hjl opt]# du -hac --max-depth=1 /opt
4.0K /opt/ccc
4.0K /opt/rh
54M /opt/VMwareTools-10.3.22-15902021.tar.gz
3.5M /opt/杂文.txt
20K /opt/tmp
96M /opt/tmp2
163M /opt/vmware-tools-distrib
315M /opt
315M 总用量
ls -l /opt | grep "^-" | wc -l
[root@hjl opt]# ll
总用量 58676
drwxr-xr-x. 2 root root 4096 8月 23 21:59 ccc
drwxr-xr-x. 2 root root 4096 10月 31 2018 rh
drwxr-xr-x. 3 root root 4096 8月 24 10:51 tmp
drwxr-xr-x. 3 root root 4096 8月 24 11:10 tmp2
-rw-r--r--. 1 root root 56414224 3月 25 2020 VMwareTools-10.3.22-15902021.tar.gz
drwxr-xr-x. 9 root root 4096 3月 25 2020 vmware-tools-distrib
-rw-r--r--. 1 root root 3642757 8月 24 08:40 杂文.txt
[root@hjl opt]# ls -l /opt | grep "^-"
-rw-r--r--. 1 root root 56414224 3月 25 2020 VMwareTools-10.3.22-15902021.tar.gz
-rw-r--r--. 1 root root 3642757 8月 24 08:40 杂文.txt
[root@hjl opt]# ls -l /opt | grep "^-" | wc -l
2
ls -l /opt | grep "^d" | wc -l
ls -lR /opt | grep "^-" | wc -l
ls -lR /opt | grep "^d" | wc -l
yum install tree
安装 tree /home/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myxQsdMn-1630734433343)(…/images/efea682b7a26539d4fde94700284861b531dc4a4b288ec5f74ae5c9fd85fd5c0.png)]
ipconfig
ifconfig
ping 目的主机
,测试当前服务器是否可以连接目的主机vim /etc/sysconfig/network-scripts/ifcfg-ens33
要求:将 ip 地址配置的静态的,比如: ip 地址为 192.168.200.130ifcfg-ens33 文件说明
DEVICE=eth0 #接口名(设备,网卡)
HWADDR=00:0C:2x:6x:0x:xx #MAC地址
TYPE=Ethernet #网络类型(通常是 Ethemet)
UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机 id
#系统启动的时候网络接口是否有效(yes/no)
ONBOOT=yes
# IP 的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配 IP|BOOTP 协议|DHCP 协议) BOOTPROTO=static
#IP 地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="a11c3585-6021-4ace-9997-ba53c0fb6618"
DEVICE="ens33"
ONBOOT="yes"
#IP 地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
service network restart
、reboot
hostname
: 查看主机名ping 192.168.200.130
来检测是否ping通,如果你想通过host来ping,即输入ping hjl
,就需要设置host映射C:\Windows\System32\drivers\etc\hosts
文件指定即可# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
#127.0.0.1 activate.navicat.com
192.168.200.130 hjl # 加上这一行即可
/etc/hosts
文件 指定 添加 192.168.200.128 surface4
本地域名服务器
根域名服务器
顶级(二级,三级)域名服务器
权威域名服务器
ps
命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数.[root@hjl ~]# ps
PID TTY TIME CMD
19583 pts/2 00:00:00 bash
20007 pts/2 00:00:00 ps
# pid : 进程识别号
# tty : 终端机号
# time : 此进程消耗的cpu时间
# cmd : command 进程名 执行该进程的指令
System V展示风格
USER:用户名称
PID:进程号
%CPU:进程占用 CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TT:终端名称,缩写 .
STAT:进程状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用 CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
kill [选项] 进程号
(功能描述:通过进程号杀死/终止进程)killall 进程名称
(功能描述:通过进程名称杀死进程,连带的杀死其子进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)-9
, 强迫进程立即停止,比如要踢掉某个非法用户,终止远程登录服务sshd,终止多个gedit,强制杀掉一个终端kill 11421
kill sshd 对应的进程号
;/bin/systemctl start sshd.service
killall gedit
kill -9 bash
对应的进程号pstree [选项]
,可以更加直观的来看进程信息service network start
ls -l /etc/init.d/
可以查看还可以用service控制的服务1. `setup` 即可,之后就会进入一个窗口
![图 6](../images/ff9ce83b4d3748fe5c3e473b41403eb20df555a536fadcfb3464c6d27fa29275.png)
2. /etc/init.d 看到 service 指令管理的服务 `ls -l /etc/init.d`
- Linux 系统有 7 种运行级别(runlevel):常用的是级别 3 和 5
1. 运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动
2. 运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
3. 运行级别 2:多用户状态(没有NFS),不支持网络
4. **运行级别 3**:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式
5. 运行级别 4:系统未使用,保留
6. **运行级别 5**:X11 控制台,登陆后进入图形GUI 模式
7. 运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
- 修改当前系统的默认运行级别 :
1. 获取运行级别 : `systemctl get-default`
2. 修改运行级别 : `systemctl set-default multi-user.target` 修改为3级别
- multi-user.target : 3 多用户命令行界面
- graphical.target : 5 图形界面
chkconfig --list
[root@hjl ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
vmware-tools 0:关 1:关 2:开 3:开 4:开 5:开 6:关
比如network服务,在运行级别3的时候是开启的,在运行级别1的时候是关闭的
chkconfig --level 3 network off/on
systemctl [start | stop | restart | status] 服务名
systemctl stop firewalld.service
systemctl list-unit-files
查看服务开机启动状态,可以使用grep过滤[root@hjl ~]# systemctl list-unit-files | grep firewalld.service
firewalld.service enabled
systemctl enable 服务名
: 设置服务开机启动systemctl disable 服务名
: 关闭服务开机启动systemctl is-enabled 服务名
: 查询某个服务是不是自启动的[root@hjl ~]# systemctl is-enabled firewalld.service
enabled
systemctl [enable|disable] 服务名
netstat -anp
firewall-cmd --permanent --add-port=端口号/协议
firewall-cmd --permanent --remove-port=端口号/协议
firewall-cmd --reload
firewall-cmd --query-port=端口/协议
top [选项]
9
强制kill即可top -d 10
netstat [选项]
netstat -anp | grep sshd
rpm用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有.RPM扩展名的文件。RPM
是RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似windows 的 setup.exe,这一文件格式名称虽然打上 了RedHat 的标志,但理念是通用的。
Linux 的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准了。
rpm -qa
,例如 : 查看是否安装了firefox rpm -qa | grep firefox
一个 rpm包名:firefox-60.2.2-1.el7.centos.x86_64
名称:firefox
版本号:60.2.2-1
适用操作系统: el7.centos.x86_64 表示 centos7.x 的 64 位系统
如果是 i686、i386 表示 32 位系统,noarch 表示通用
rpm -q 软件包名
: 查询软件包是否安装 例如 rpm -q firefox
rpm -qi 软件包名
: 查询软件包信息rpm -ql 软件包名
: 查询软件包中的文件 rpm -ql firefox
rpm -qf 文件全路径名
: 查询文件所属的软件包 rpm -qf /etc/passwd
[root@hjl ~]# rpm -qf /etc/passwd
setup-2.8.71-10.el7.noarch
[root@hjl ~]# rpm -qf /root/install.log
错误:文件 /root/install.log:没有那个文件或目录
rpm -e RPM包的名称
rpm -e firefox
rpm -e foo
rpm -e --nodeps foo
rpm -ivh RPM包全路径名称
rpm -e firefox
; rpm -ivh firefox
yum list|grep xx
软件列表yum install xxx
下载安装rpm -e firefox
; yum list | grep firefox
;yum install firefox
mkdir /opt/jdk
,注意这里不需要加 -r
,以为opt目录以及存在,所以这里创建的不是多级目录tar -zxvf jdk-8u261-linux-x64.tar.gz
mv /opt/jdk /usr/local/java
cd /usr/local/java/jdk/bin
,bin下存放和java有关的指令,这个时候输入./java -version
就可以查看jdk版本信息vim /etc/profile
,在文件的最下面输入export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
echo $PATH
依然不会显示我们刚刚配置的环境变量的路径,我们需要刷新source /etc/profile
即可,之后我们可以在任意路径下使用java有关指令vim ./Hello.java
public class Hello{
public static void main(String[] args){
System.out.println("hello world");
}
}
javac Hello.java
就会产生编译后的.class文件java Hello
就会在终端输出hello world
,注意,这里不要写java文件的后缀名cd /opt/tomcat/
tar -zxvf apache-tomcat-8.5.59.tar.gz
cd /opt/tomcat/apache-tomcat-8.5.59
cd bin/
./startup.sh
开启tomcat服务192.168.200.128
,发现无法跳转,这是因为我们没有开启tomcat对应的8080端口,防火墙拦截了firewall-cmd --permanent --add-port=8080/tcp
开启端口号firewall-cmd --reload
重新载入,不然端口还是没有开启firewall-cmd --query-port=8080/tcp
检查看8080端口开启没有192.168.200.128:8080
cd /opt/tomcat/apache-tomcat-8.5.59/webapps/ROOT
进入tomcat部署文件的默认路径192.168.200.128:8080/hjl.html
这里的hjl.html就是刚刚写的简单的html页面rpm -qa | grep mari
查询是否有该数据库rpm -e --nodeps mariadb-libs
卸载rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
systemctl start mysqld.service
,启动mysql服务grep "password" /var/log/mysqld.log
,然后修改该密码,因为不修改初始密码,我们无法进行任何操作mysql -u root -p默认密码
登录mysql,之后set password for 'root'@'localhost' =password('新密码');
来修改密码flush privileges
使得修改生效,一般如果是对mysql进行了配置修改,最好使用一次该代码,否则很可能修改暂时不生效use mysql;
update user set host = '%' where user = 'root';
flush privileges
mkdir /opt/jdkk/
,是无法直接被linux内核理解并执行的,所以,linux内核和指令之间存在一个shell,shell就是一个命令行解释器,会负责将我们的指令,解释成为linux内核可以理解并执行#!/bin/bash
开头.sh
#!/bin/bash
echo "hello world"
./hello.sh
即可sh hello.sh
#!bin/bash
#案例1 : 定义变量
A=100
# 输出变量需要加上$符号
echo \$A=$A
#案例2 : 撤销变量
unset A
echo "\$A=$A"
#案例3 : 声明静态的变量B=2,不可以撤销
readonly B=2
echo "B=$B"
unset B #这里会报错反设定,因为静态变量不可以撤销
vim /etc/profile
export 变量名=变量值
source /etc/profile
,更新echo $环境变量名
即可输出对应的变量值$n
n为1/2/3/4等等数字,如果n>10,则因写成格式类似于${10}
,可以获得命令行的第n个参数$*
获取命令行全部参数,将全部参数当作一个整体$@
获取命令行全部参数,但是会将每个参数区分对待$#
获取命令行中参数的个数#!/bin/bash
echo "$1 $2 $3"
echo "所有的参数为$*"
echo "$@"
echo "参数的个数$#"
#!/bin/bash
echo "当前执行的进程 id=$$"
#加&代表以后台的方式运行一个脚本,并获取他的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程 id=$!"
echo "执行的结果是=$?"
$((运算表达式))
$[运算表达式]
expr 表达式
注意,表达式中,运算符两边必须用空格隔开
#!/bin/bash
#案例1:计算(2+3)*4的值
#使用第一种方式
RES1=$(((2+3)*4))
echo res1=$RES1
#第二种方式:推荐
RES2=$[(2+3)*4]
echo res2=$RES2
#第三种方式,不推荐,注意,运算符号两边必须有空格,并且*必须写成\*
TEMP=`expr 2 + 3`
echo TEMP=$TEMP
RES3=`expr $TEMP \* 4`
echo RES3=$RES3
#案例2:计算命令行的两个参数的和
RES4=$[$1+$2]
echo RES4=$RES4
=
字符串比较#!/bin/bash
#案例 1:"ok"是否等于"ok" 判断语句:使用 =
if [ "ok" = "ok" ]
then
echo "equal"
fi
#案例 2:23 是否大于等于 22 判断语句:使用 -ge
if [ 23 -ge 22 ]
then
echo "大于等于"
fi
#案例 3:/root/shcode/aaa.txt 目录中的文件是否存在 判断语句: 使用 -f
if [ -f /root/shcode/aaa.txt ]
then
echo "文件存在"
fi
#!/bin/bash
#单分支
if[ $1 -ge 60 ]
then
echo "不及格"
fi
#案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 "及格了",如果小于 60,则输出 "不及格"
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
#!/bin/bash
#案例1 : 当命令行参数是 1 时,输出 "周一", 是 2 时,就输出"周二", 其它情况输出 "other"
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other..."
;;
esac
#!/bin/bash
#案例 1 :打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别]
#注意,$*是吧输入的参数当作一个整体,所以只会输出一句话
for i in "$*"
do
echo "number is $i"
done
#$@是吧输入的参数当作一个整体,所以会输出多句话
echo "=================================="
for i in "$@"
do
echo "number is $i"
done
#!/bin/bash
#案例2 : 从 1 加到 100 的值输出显示
#定义一个变量SUM负责保存1到100的和
SUM=0
for(( i=1; i<=$1; i++))
do
#写上你的业务代码
SUM=$[$SUM+i]
done
echo $SUM
#!/bin/bash
#案例 1 :从命令行输入一个数 n,统计从 1+..+ n 的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+i]
#i自增
i=$[$i+1]
done
echo $SUM
read -p "请输入一个数NUM1=" NUM1
read -t 3 -p "请输入一个数NUM2=" NUM2
#!/bin/bash
#案例 1:读取控制台输入一个NUM1 值
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#案例 2:读取控制台输入一个NUM2 值,在 10 秒内输入
read -t 3 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"
basename 路径 后缀名
如果加上后缀名,你们最后得到的文件名称,会再删除掉尾部的匹配的后缀[root@hjl shcode]# basename /home/aaa/test.txt
test.txt
[root@hjl shcode]# basename /home/aaa/test190219012.txt
test190219012.txt
[root@hjl shcode]# basename /home/aaa/test190219012.txt txt
test190219012.
[root@hjl shcode]# basename /home/aaa/test190219012.txt .txt
test190219012
[root@hjl shcode]# basename /home/aaa/test190219012.txt 012.txt
[root@hjl shcode]# dirname /home/aaa/test.txt
/home/aaa
#!/bin/bash
#函数getSum可以返回两个参数的和
#定义函数
function getSum() {
SUM=$[$n1+$n2]
echo "SUM=$SUM"
}
#输入两个值
read -p "请输入n1=" n1
read -p "请输入n2=" n2
#调用自定义函数
getSum $n1 $n2
~