认识Linux之前,首先要了解它的目录结构的构成
目录结构
-
/bin
是binaries(二进制文件)的缩写,这个目录存放的是最常使用的命令。 -
/boot
存放的是启动Linux时的一些核心文件,包括一些链接文件和镜像文件 -
/dev
是device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式与访问文件的方式是一样的。 -
/etc
是etcetera(等等)的缩写,存放的是所有的系统管理所需要的配置文件和子目录。 -
/home
用户的主目录,Linux中,每个用户都会有一个自己的目录,一般目录名是以自己的账号名命名的。 -
/lib
是library(库)的缩写,存放着系统最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 -
/lost+found
,这个目录一般是空的,当系统非法关机后,这里就存放了一些文件。 -
/media
,Linux系统会自动识别一些设备,例如光驱,u盘等,识别后,Linux会把识别的设备挂载到这个目录下。 -
/mnt
,系统提供该目录是为了让用户临时挂载别的文件系统的,可以将光驱挂载在/mnt/
上,然后进入该目录就可以查看光驱里的内容了。 -
/opt
是optional(选项)的缩写,这给主机额外安装软件所摆放的目录。 -
/proc
是processes(进程)的缩写, /proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 -
/root
, 该目录为系统管理员,也称作超级权限者的用户主目录。 -
/sbin
, s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 -
/selinux
, 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。 -
/srv
, 该目录存放一些服务启动之后需要提取的数据。 -
/sys
,这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
-
/tmp
是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 -
/usr
是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 -
/usr/bin
, 系统用户使用的应用程序。 -
/usr/sbin
, 超级用户使用的比较高级的管理程序和系统守护程序。 -
/usr/src
, 内核源代码默认的放置目录。 -
/var
是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 -
/run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
用户
Linux中的每个用户都在 /etc/passwd 文件中有一个对应的记录行,它记录了用户的一些基本属性,/etc/passwd文件是所有用户都可以读的。
/etc/passwd
中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下 :
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow文件 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group存放用户组的所有信息
组名:口令:组标识号:组内用户列表
添加新的用户账号
useradd 选项 用户名
# 选项
# -c 指定一段注释描述
# -d 指定用户主目录,如果该目录不存在,则可以用 -m参数同时创建主目录
# -g 指定用户所属的用户组
# -G 指定用户所属的附加组
# -s 指定用户的登录shell,例如:/bin/bash
# -u 指定用户的用户号,如果同时有-o,可以重复使用其他用户的标识号
# 实例:
# 此命令创建了一个用户he,其中-d和-m选项用来为登录名he产生一个主目录 /home/he(/home为默认的用户主目录所在的父目录)。
useradd –d /home/he -m he
删除账号
userdel 选项 用户名
# 常用的选项是 -r,它的作用是把用户的主目录一起删除
# 实例
userdel -r he
修改账号
usermod 选项 用户名
# 常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
# 实例
# 此命令将用户he的登录Shell修改为sh,主目录改为/home/she,用户组改为test
usermod -s /bin/sh -d /home/she -g test he
用户口令管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd
。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
passwd 选项 用户名
# 选项
# -l 锁定口令,即禁用账号
# -u 口令解锁
# -d 使账号无口令
# -f 强制用户下次登录时修改口令
进程
netstat -alnp | grep 端口号 -----可以查询端口被占用进程
nohup java -jar server-client.jar 127.0.0.1 9696 >client_logs.log 2>&1 &
nohup java -jar xxx.jar 127.0.0.1 >xxx.log 2>&1 & 后台运行并生成对应日志文件
java -jar XXX.jar &
-
命令结尾没有 “&” ,则变成 “java -jar XXX.jar ” ,表示在当前ssh窗口,可按CTRL + C打断程序运行,或者直接关闭窗口,则程序直接退出
-
命令结尾添加 “&” ,则变成 “java -jar XXX.jar &” ,表示在当窗口关闭时,程序才会中止运行。&代表让该命令在后台执行。
nohup java -jar XXX.jar > Log.log &
或者
nohup java -jar XXX.jar >> Log.log &
-
命令 "nohup java -jar XXX.jar &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。注意,该作业的所有输出被重定向到nohup.out的文件中。
-
命令 "nohup java -jar XXX.jar > Log.log &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,并且该作业的所有输出被重定向到Log.log的文件中。“ > Log.log ” 该命令就是指定日志输出的文件。
-
">>"表示将输出以追加的方式重定向到Log.log中。
nohup java -jar XXX.jar > Log.log 2>&1 &
或者
nohup java -jar XXX.jar >> Log.log 2>&1 &
或者
nohup java -jar XXX.jar > /dev/null 2>&1 &
-
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
-
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
-
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
-
屏蔽输出,起到禁止输出作用:/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
-
“> Log.log 2>&1” :表示将 stdout 和 stderr 合并后重定向到 Log.log。
-
重定向: nohup ./execute.sh > /home/xxx/log.log 2>&1 & :这样日志会重定向到指定目录下
kill -9 pid 杀死进程
ps -ef |grep
ps命令将某个进程显示出来 ;
grep命令是查找 ;
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户
中间的|是管道命令 是指ps命令与grep同时执行 ;
& 最经常被用到:这个用在一个命令的最后,可以把这个命令放到后台执行
jobs 查看当前有多少在后台运行的命令
fg 将后台中的命令调至前台继续运行
bg 将一个在后台暂停的命令,变成继续执行
解压
解压/压缩命令
tar -zcvf xxx.tar.gz /xx # 打包成tar.gz格式压缩包
tar -zxvf xxx.tar.gz # 解压tar.gz格式压缩包
tar -zxvf xxx.tar.gz -C /xx # 解压到指定目录 例如:tar -zxvf apache-tomcat-8.5.57.tar.gz -C /home/tomcat/
tar -jcvf xxx.tar.bz2 /xx # 打包成tar.bz2格式压缩包
tar jxvf xxx.tar.bz2 # 解压tar.bz2格式的压缩包
zip -q -r xxx.zip xx/ # 压缩成zip格式
unzip xxx.zip # 解压zip格式的压缩包
# xxx.tar.xz解压 分两步解压
xz -d xxx.tar.xz
tar -xvf xxx.tar.xz
# 也可以直接解压
tar -xvJf xxx.tar.xz
防火墙
# 查看防火墙状态
systemctl status firewalld
# 开启、重启、关闭firewalld.service服务
service firewalld start # 开启
service firewalld restart # 重启
service firewalld stop # 关闭
# 查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 查看端口信息
# 开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent #开端口命令
systemctl restart firewalld.service #重启防火墙
# 命令含义
--zone # 作用域
--add-port=80/tcp # 添加端口,格式为:端口/通讯协议
--permanent # 永久生效,没有此参数重启后失效
硬链接与软链接
硬链接: A--B,假设B是A的硬链接,那么它们指向的是同一个文件。允许一个文件有多个路径,用户可以通过这种机制建立硬链接到一些重要文件上,防止误删。
软链接:类似windows下的桌面快捷方式,删除了源文件,快捷方式也访问不了。
# 创建文件
touch f1
# 创建硬链接
ln f1 f2
# 创建软链接
ln -s f1 f2
# 向f1里面输入内容
echo "something for nothing" >> f1
文件内容查看
-
cat
由第一行开始显示文件内容 -
tac
从最后一行开始显示 -
nl
显示的时候输出行号 -
more
一页页的显示文件内容(空格键代表翻页,enter键代表下一页,:f
行号) -
less
与more类似,但是它可以往前翻页(空格代表翻页,上下键代表翻动页面,q
命令退出,查找字符串:/要查找的字符
向下查询,?要查找的字符向上查询,n继续查询下一个,N向上寻找) -
head
只看头几行(通过-n 行数
参数来控制显示几行) -
tail
只看末尾几行 (通过-n 行数
参数来控制显示几行) -
df -lh
查看硬盘空间大小
可以使用man [命令]
来查看各个命令的使用文档,如:man ps。
Centos7网络配置目录:/etc/sysconfig/network-scripts
ifconfig
命令查看网络配置
文件基本属性
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
-
当为 d则是目录
-
当为 - 则是文件;
-
若是 l 则表示为链接文档(link file);
-
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
-
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限,第 7-9 位确定了其他用户拥有该文件的权限。。
其中 1、4、7 位表示读权限,如果用 r 表示,则有读权限,如果用 - 表示,则没有读权限。
第 2、5、8 位表示写权限,如果用 w 表示,则有写权限,如果用 - 表示,则没有写权限。
第 3、6、9 位表示可执行权限,如果 用 x 表示,则有执行权限,如果用 - 表示,则没有执行权限。
更改文件属性 :
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个。分别是 owner/group/others(拥有者/组/其他),三种身份有各自自己的 read/write/execute 权限。
先复习一下刚刚上面提到的数据,文件的权限字符为: -rwxrwxrwx,这九个权限是三个为一组的。其中,我们可以用数字来代表各个权限,各个权限的分数对照表如下:
-
r:4
-
w:2
-
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:
-
owner = rwx = 4+2+1 = 7
-
group = rwx = 4+2+1 = 7
-
others= --- = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是 770。
# 更改文件属组
# -R:递归更改文件属组,就是在更改某个目录文件的属组时,加上参数-R的参数,该目录下的所有文件的属组都会更改
chgrp [-R] 属组名 文件名
# 更改文件属主,也可以同时更改文件属组
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
# 更改文件权限
chmod [-R] xyz 文件或目录
# xyz:即为rwx属性数值相加
# -R:进行递归的持续变更,即连同子目录下的所有文件都会变更
目录管理
-
绝对路径:由根目录
/
写起,例如:/usr/local
-
相对路径:不是由
/
写起,例如要从usr/local/bin
到/usr/local/lib
时,可以写成:cd ../lib
,这就是相对路径的写法
常见的处理目录的命令:
-
ls(英文全拼:list files): 列出目录及文件名
-
cd(英文全拼:change directory):切换目录
-
pwd(英文全拼:print work directory):显示目前的目录
-
mkdir(英文全拼:make directory):创建一个新的目录
-
rmdir(英文全拼:remove directory):删除一个空的目录
-
cp(英文全拼:copy file): 复制文件或目录
-
rm(英文全拼:remove): 删除文件或目录
-
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
# 列出目录
# -a:全部的文件,包括隐藏文件;-d:仅列出目录本身,而不是目录内的文件内容;-l:长数据串列出,包含文件的属性与权限等
ls
# 切换目录
cd [相对路径或绝对路径]
# 显示当前所在的目录
# -P:显示出真实路径而不是使用链接路径
pwd [-P]
[root@www ~]# cd /var/mail <==注意,/var/mail是一个连结档
[root@www mail]# pwd
/var/mail <==列出目前的工作目录
[root@www mail]# pwd -P
/var/spool/mail <==怎么回事?有没有加 -P 差很多~
[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail
# 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail
# 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!
# 创建新目录
# -m :配置文件的权限;-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来
mkdir [-mp] 目录名
mkdir -m 711 test0
mkdir -p test1/test2/test3/test4
# 删除空目录
rmdir [-p] 目录名称
rmdir -p test1/test2/test3/test4
# -p :连同上一级『空的』目录也一起删除
# 复制文件或目录
# -d:若来源档为链接档的属性(link file),则复制链接档属性而非文件本身;
# -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
# -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
# -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
# -r:递归持续复制,用於目录的复制行为;(常用)
cp
#移除文件或目录
# -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息
# -i :互动模式,在删除前会询问使用者是否动作
# -r :递归删除
rm [-fir] 文件或目录
# 移动文件或修改名称
# -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
# -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
# -u :若目标文件已经存在,且 目标文件 比较新,才会升级
mv [-fiu] 需要移动的文件 目标文件
mv mvtest mvtest2 # 将mvtest文件改为mvtest2
MySQL常用命令
开启和关闭
# 开启
service mysql start
# 关闭
service mysq stop
# 重启
service mysq restart
登录
# 明文登录
# 语法 mysql -u 用户名 -p 密码
mysql -u root -p 123456
# 密文登录
# 语法 mysql -u 用户名 -p
mysql -u root -p
修改密码
# set password 命令(需登录)
# 语法 set password for 用户名@localhost=password('新密码');
set password for root@localhost=password('123456a');
# mysqladmin命令,密文(不需要登录)
# 语法 mysqladmin -u 用户名 -p 旧密码 password+回车,输入两次新密码
mysqladmin -u root -p 123456 password
# mysqladmin命令,明文(不需要登录)
# 语法 mysqladmin -u root -p 旧密码 password 新密码
mysqladmin -u root -p 123456 password 123456a
常规操作(登录后)
show databases; # 显示数据库列表
use mysql; show tables; # 显示指定数据库中的表
describe user; # 显示user表的表结构
导入、导出数据库(不需要登录)
# 导出所有数据库
mysqldump -u root -p 123456 --all-databases >/home/sqldump/all.sql
# 导出指定数据库
mysqldump -u root -p 123456 --databases test >/home/sqldump/test.sql
# 导出指定数据库的结构,无数据
mysqldump -u root -p 123456 --no-data --databases test >/home/sqldump/nodata_test.sql
# 导出指定数据库中的指定表
mysqldump -u root -p 123456 --databases test --tables user >/home/sqldump/user.sql
# 导出指定数据库中的指定表,设置查询条件
mysqldump -u root -p 123456 --databases test --tables user --where='user_id=1'>/home/sqldump/user.sql
# 通过sql文件导入数据库
mysql -u root -p 123456 < home/sql/test.sql
用户授权
# 授权
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
# 刷新
mysql> flush privileges;
all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
on:表示这些权限对哪些数据库和表生效格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录 identified by:指定用户的登录密码
with grant option:表示允许用户将自己的权限授权给其它用户
网络
hostname:
# hostname 显示主机名字。使用hostname --help 查看该命令的帮助文档
hostname -d # 显示机器所属域名
hostname -f # 显示完整的主机名和域名
hostname -i # 显示当前主机的ip地址
补充:
hostname 新主机名
命令还可以临时设置主机名。执行这个命令后,若要后续重启生效,必须要手动修改/etc/sysconfig/network
文件里面的 HOSTNAME
的值。
ifconfig:
查看用户网络配置。注意: windows下查看网络配置是 ipconfig。
iwconfig
工具与 ifconfig
和 ethtool
类似,是用于无线网卡的。可以用它查看基本的Wi-Fi网络信息,例如SSID,channel和encryption等等还有其他配置也可以查看和修改。
趣味命令
# 天气预报
curl wttr.in
# 使用Telnet观看星球大战的ASCII演绎。
# 如果没有telnet命令则安装:
# 安装telnet
rpm -qa telnet-server # 返回空则表示没有安装
yum install telnet-server # 安装telnet-server
rpm -qa telnet # 检测是否安装telnet-server,返回空表示没有,否则忽略下面步骤
yum install telnet # 安装
telnet towel.blinkenlights.nl
# cowsay 奶牛图案
yum install cowsay # 安装命令
cowsay # 输出奶牛
cowsay -l # 查看其他动物的名字
cowsay -f # 后面跟上动物
cowsay -f dragon-and-cow "something for nothing" # 输出龙和奶牛并附带附加文字
# lolcat 为Linux带来彩色
yum install ruby # Lolcat 是一个 ruby gem 程序,所以在你的系统中必须安装有最新版本的 ruby。
gem install lolcat # 安装lolcat命令
cowsay -f dragon-and-cow "something for nothing" | lolcat # 彩色的龙和奶牛
# figlet 是一个展示由常规的屏幕字符组成的巨大字符串的应用
yum install figlet
figlet KAI | lolcat -a -d 200 # 彩色展示 'KAI' 这里选项 -a 指的是 Animation(动画), -d 指的是 duration(持续时间)。在上面的例子中,持续 200 次动画。
# 盒子
yum install boxes
echo "be great" | boxes -d boy -a c # 以人形盒子输出文字
boxes -l # 查看有多少可以使用的盒子格式。
# sl - 跑火车
yum -y install sl # 安装sl命令
sl # 输出蒸汽火车
# fortune
yum -y install fortune-mod # 安装
fortune # 随机输出格言
查看可用内存
-
free -m(m表示以兆字节为单位显示输出)
-
vmstat -s (s 标签提供有关内存使用的详细信息)
-
/proc/meminfo
-
top
-
htop