指令的基本用法与选项介绍。
man 是 manual 的缩写,将指令的具体信息显示出来。
当执行 man date
时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下:
代号 | 类型 |
---|---|
1 | 用户在 shell 环境中可以操作的指令或者可执行文件 |
5 | 配置文件 |
8 | 系统管理员可以使用的管理指令 |
info 与 man 类似,但是 info 将文档分成一个个页面,每个页面可以跳转。
/usr/share/doc 存放着软件的一整套说明文件。
cd /etc/yum.repos.d
备份
mv ./CentOS-Base.repo ./CentOS-Base.repo.bak
mv ./epel-7.repo ./epel-7.repo.bak
mv ./epel.repo ./epel.repo.bak
获取阿里云yum源
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget https://mirrors.aliyun.com/repo/epel-7.repo
清除缓存&更新yum源
yum clean all
yum makecache
yum update
查看当前的 yum list
问题:
已加载插件:fastestmirror
Determining fastest mirrors
There are no enabled repos.
Run “yum repolist all” to see the repos you have.
To enable Red Hat Subscription Management repositories:
subscription-manager repos --enable
To enable custom repositories:
yum-config-manager --enable
解决方案:
yum install epel-release
安装net-tools工具包
net-tools工具包包含以下命令: arp, hostname, ifconfig, ipmaddr, iptunnel, mii-tool, nameif, netstat, plipconfig, rarp, route und slattach.
支持 HTTP,HTTPS,FTP 三种协议,可以下载网络资源。
wget -O 指定文件保存到哪
安装wget,通过命令:yum install wget -y
安装:rpm -ivh 包
查看:rpm -a 包
卸载 : rpm -e 包的全名
Linux的目录结构如下图所示:
对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。
最主要的几个组成部分如下:
除此之外还包括:
对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。
而对于 FAT 文件系统,它没有 inode,每个 block 中存储着下一个 block 的编号。
指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能。
在 Ext2 文件系统中所支持的 block 大小有 1K,2K 及 4K 三种,不同的大小限制了单个文件和文件系统的最大大小。
大小 | 1KB | 2KB | 4KB |
---|---|---|---|
最大单一文件 | 16GB | 256GB | 2TB |
最大文件系统 | 2TB | 8TB | 16TB |
一个 block 只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较小的 block。
inode 具体包含以下信息:
inode 具有以下特点:
inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都需要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号。因此引入了间接、双间接、三间接引用。间接引用让 inode 记录的引用 block 块记录引用信息。
建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。
可以看到文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。
如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。
ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。
挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。
为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下:
df 命令可以输出以下信息:默认是以 KB为单位,-h 可以以友好的方式展示。磁盘信息,使用率及挂载的位置。
du 命令 + 文件或者目录,默认单位为 kb ,同上 加上 -h 也会以更易阅读的方式展示。
du 命令查看的大小,不足1M的按照1M显示。
还有一个参数 --max-depth=n, 其中 n 代表一个数字, 用来查看目录的层级。
1、查看 CPU 型号
cat /proc/cpuinfo | grep name | sort | uniq
2、查看 CPU 的详细信息:
cat /proc/cpuinfo
3、查看物理cpu个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq|wc -l
4、查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l
5、查看线程数
cat /proc/cpuinfo | grep "processor" | sort | uniq | wc -l
查看网络网卡信息:ifconfig
测试连通性:ping
查看网络信息:netstat -anp(显示程序名) -t(TCP) -u(UDP) -l (监听)
在后面加上管道符 | 过滤 grep 端口号 可以查看某个端口是否被占用
使用 lsof 命令也可以查看端口是否被占用:
lsof -i:port 没有这个命令的话,可以使用 yum install lsof 安装
curl -x 网址 可以模拟 HTTP 请求,可以使用 -X 或者 --request 执行特性的 HTTP METHOD
可以试一下 curl www.baidu.com
在 root 下面新建用户。
useradd 名字,就会新增一个用户
passwd 名字,修改该用户的密码
userdel -r 名字 ,删除该用户(以及目录),注意如果想要删除该用户的home目录。必须要加上参数 r
usermod -l newname oldname 修改名字
usermod -L 用户 锁定用户
usermod -U 用户 解锁用户
注意:这里虽然锁定用户了,但是还是可以从 root 用户su到被锁的普通用户。
可以用su - 用户名 来切换用户,在操作 Linux 时,如果当前用户的权限不够,可以通过 su - 命令,切换到高权限的用户,例如 root从权限高的用户切换权限低的用户,不需要输入密码,反之需要。
查看当前用户是谁:who am i 输出 用户名
查看当前登录的是谁以及使用的终端号:who am i 有空格的、会输出
查看用户所在的组:groups 用户名 ,可以看到用户属于什么 用户组。
也可以使用 id 命令来查看用户的更多信息:
查看:使用 ll
命令可以查看目录或者文件的权限
权限类别:有三种,分别是读r,写w,执行x。对应的数字是 4 2 1
UGO模型。user group other 分别是三个不同的权限组、
上面说了这么多权限的概念,下面开始修改权限:(注意是 root 下面执行)
(1)修改所属者与所属组
格式:chown 用户:用户组 文件或目录,比如:
chown test:root 123.txt
加上 -R 就是递归的修改
(2)修改文件或目录权限
使用 chmod 命令,后面可以使用 ugo+rwx 或者 ugo-rwx 或者 755 这样的。
上面 + 号代表授权,- 号代表取消授权
/etc/group
一个是只有root可以看到的 /etc/shadow ,普通用户是没有权限查看这个文件的。
另一个是普通用户可以看的的 /etc/passwd
查看 /etc/inittab 文件。
Linux 默认的级别是 3,不能把 initdefault 设置为0 或者 6 。
如图所示,init 后面有7种数字,常用的有 0,3 ,5,6
init 0
init 3 默认多用户模式
init 5 图形化界面
init 6 重启服务器
在 /etc/sysconfig/network 下面配置hostname = xxx。
在 /etc/hosts里面做映射
或者在 /etc/resolv.conf 设置nameserver
静态static配置网卡
yes
除了 root 管理员之外,其他的都是普通用户。不推荐直接给普通用户全部的 root 权限,
可以使用 sudo 来解决这个问题。让普通用户也能使用一些 root 权限的命令。
编辑文件 /etc/sudoers
vim /etc/sudoers , 可以添加格式: 授权用户 主机=(ALL或者指定用户) 特定某些命令或者ALL , 多个命令之间使用逗号隔开。
如果不想每次使用sudo的时候输入密码,可以加入 NOPASSWD: 来配置不需要密码!!
使用 sudo -l 可以查看该用户所有的 sudo 权限。
date 显示当前时间
cal 查看日历指令
cal 2022 显示2022年日历
cal 10 2022
更新系统时间
使用服务 ntp 来同步时间。
yum install -y ntp 来安装。
nptdate cn.ntp.org.cn 来更新同步时间。
全局环境变量在 /etc/profile 里面配置,慎用。
局部变量在 ~/.bash_profile 里面配置。主要是设置一些命令路径等
查看防火墙状态:systemctl status firewalld
查看80端口:firewall-cmd --query-port=80/tcp
关闭80端口:firewall-cmd --add-port=80/tcp --permanent
关闭防火墙:systemctl stop firewalld
禁止防火墙:systemctl disable firewalld
重启防火墙:systemctl restart firewalld
用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。
使用 ls 查看一个文件时,会显示一个文件的信息,例如 drwxr-xr-x 3 root root 18 Oct 6 00:18 .config
,对这个信息的解释如下:
常见的文件类型及其含义有:
9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。
文件时间有以下三种:
列出文件或者目录的信息,目录的信息就是其中包含的文件。
## ls [-aAdfFhilnrRSt] file|dir
-a :列出全部的文件
-d :仅列出目录本身
-l :以长数据串行列出,包含文件的属性与权限等等数据
更换当前目录。
cd [相对路径或绝对路径]
创建目录。
## mkdir [-mp] 目录名称
-m :配置目录权限
-p :递归创建目录
删除目录,目录必须为空。
rmdir [-p] 目录名称
-p :递归删除目录
更新文件时间或者建立新文件。
## touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间"
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。
cp [-adfilprsu] source destination
-a :相当于 -dr --preserve=all
-d :若来源文件为链接文件,则复制链接文件属性而非文件本身
-i :若目标文件已经存在时,在覆盖前会先询问
-p :连同文件的属性一起复制过去
-r :递归复制
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
删除文件。
## rm [-fir] 文件或目录
-r :递归删除
移动文件。
## mv [-fiu] source destination
## mv [options] source1 source2 source3 .... directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。
## chmod [-R] xyz dirname/filename
示例:将 .bashrc 文件的权限修改为 -rwxr-xr–。
## chmod 754 .bashrc
也可以使用符号来设定权限。
## chmod [ugoa] [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限
示例:为 .bashrc 文件的所有用户添加写权限。
## chmod a+w .bashrc
可以通过 umask 设置或者查看默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r–。
文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。
目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。
ln [-sf] source_filename dist_filename
-s :默认是实体链接,加 -s 为符号链接
-f :如果目标文件存在时,先删除目标文件
在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。
删除任意一个条目,文件还是存在,只要引用数量不为 0。
有以下限制:不能跨越文件系统、不能对目录进行链接。
## ln /etc/crontab .
## ll -i /etc/crontab crontab
38878855 -rw-r--r--. 2 root root 451 Oct 10 2022 crontab
38878855 -rw-r--r--. 2 root root 451 Oct 10 2022 /etc/crontab
符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。
当源文件被删除了,链接文件就打不开了。
因为记录的是路径,所以可以为目录建立符号链接。
## ll -i /etc/crontab /root/crontab2
38878855 -rw-r--r--. 2 root root 451 Oct 10 2022 /etc/crontab
38878855 lrwxrwxrwx. 1 root root 12 Oct 23 30:30 /root/crontab2 -> /etc/crontab
取得文件内容。
## cat [-AbEnTv] filename
-n :打印出行号,连同空白行也会有行号,-b 不会
是 cat 的反向操作,从最后一行开始打印。
和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。
和 more 类似,但是多了一个向前翻页的功能。
取得文件前几行。
## head [-n number] filename
-n :后面接数字,代表显示几行的意思
是 head 的反向操作,只是取得是后几行。
以字符或者十六进制的形式显示二进制文件。
指令搜索。
## which [-a] command
-a :将所有指令列出,而不是只列第一个
文件搜索。速度比较快,因为它只搜索几个特定的目录。
## whereis [-bmsu] dirname/filename
文件搜索。可以用关键字或者正则表达式进行搜索。
locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。
## locate [-ir] keyword
-r:正则表达式
文件搜索。可以使用文件的属性和权限进行搜索。
## find [basedir] [option]
example: find . -name "shadow*"
① 与时间有关的选项
-mtime n :列出在 n 天前的那一天修改过内容的文件
-mtime +n :列出在 n 天之前 (不含 n 天本身) 修改过内容的文件
-mtime -n :列出在 n 天之内 (含 n 天本身) 修改过内容的文件
-newer file : 列出比 file 更新的文件
② 与文件拥有者和所属群组有关的选项
-uid n
-gid n
-user name
-group name
-nouser :搜索拥有者不存在 /etc/passwd 的文件
-nogroup:搜索所属群组不存在于 /etc/group 的文件
③ 与文件权限和名称有关的选项
-name filename
-size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
-type TYPE
-perm mode :搜索权限等于 mode 的文件
-perm -mode :搜索权限包含 mode 的文件
-perm /mode :搜索权限包含任一 mode 的文件
Linux 底下有很多压缩文件名,常见的如下:
扩展名 | 压缩程序 |
---|---|
*.Z | compress |
*.zip | zip |
*.gz | gzip |
*.bz2 | bzip2 |
*.xz | xz |
*.tar | tar 程序打包的数据,没有经过压缩 |
*.tar.gz | tar 程序打包的文件,经过 gzip 的压缩 |
*.tar.bz2 | tar 程序打包的文件,经过 bzip2 的压缩 |
*.tar.xz | tar 程序打包的文件,经过 xz 的压缩 |
解压
tar -zxvf xxx.tar.gz
解压到指定文件夹
tar zxvf xxx.tar -C /usr/local/
压缩
tar -zcvf xxx.tar.gz 要压缩的文件夹
解压
unzip test.zip
压缩
zip -r test.zip /opt/apps
压缩
gzip test.txt
解压
zip -d test.txt.gz
压缩
bzip2 test.txt
解压
bzip2 -d test.txt.bz2
ps 命令可以查看进程,用法一般是:
ps -ef 或者 ps -ef | grep 进程名
ps 命令 一般加上参数 -ef 代表所有、全格式
动态的查看:使用 top 命令
使用 & 符号,加在命令后面,可以使得命令进入后台运行。
比如 ping www.baidu.com & 执行之后,就会进入后台一直执行,直到被挂起。
jobs -l 可以查看当前连接(终端)下的后台进程。
依次显示后台程序的jobnum ,pid ,状态,以及命令
nohup 保证后台进程不会被挂起。
一般 & 和 nohup 结合使用。例子:nohup ping www.baidu.com &
杀掉进程,使用 kill 命令
可以根据 jobs 显示的jobnum, kill jobnum
或者根据 ps 显示的pid , kill -9/-15 pid,表示强迫进程立即停止或结束任务后停止
kill 进程号:通过进程号来杀死进程
kill 进程名称:通过进程名称杀死进程,也支持通配符,这是系统因负载过大而变得很慢时很有用
如果是一个前台命令的话,使用 ctrl+c 就停止了。
但是一个后台命令,也可以变成前台命令吗?可以的。
使用 fg 命令可以使得一个后台的命令变至前台执行。fg jobnum
使用 bg 左右正好相反。bg jobnum
通过命令:cd /usr/lib/systemd/system
再通过命令:sudo vi neo4j.service 创建开机启动脚本 neo4j.service
i进入编辑模式,输入以下内容
[Unit]
Description=neo4j Graph Database
After=network-online.target
Wants= network-online.target
[Service]
Type=forking
User=root
Group=root
ExecStart=/root/neo4j/bin/neo4j start
ExecStop=/root/neo4j/bin/neo4j stop
ExecReload=/root/neo4j/bin/neo4j restart
Restart=on-faliure
LimitNOFILE=60000
TimeoutSec=600
PrivateTpm=true
[Install]
WantedBy=multi-user.target
加好后,通过esc按键退出编辑模式,然后使用命令:wq!保存退出即可。
通过命令: systemctl enable neo4j.service 设置开机启动
再通过命令:systemctl daemon-reload 重新加载systemd配置
启动neo4j服务通过命令: systemctl start neo4j.service (其他命令类似)
查看neo4j服务的启动日志通过命令:journalctl -e -u neo4j.service
其他systemctl命令
systemctl list-units 列出当前系统服务的状态
systemctl list-unit-files 列出服务的开机状态
systemctl status sshd 查看指定服务的状态
systemctl stop sshd 关闭指定服务
systemctl start sshd 开启指定服务
systemctl restart sshd 重启指定服务
systemctl enable sshd 设定指定服务开机开启
systemctl disable sshd 设定指定服务开机关闭
systemctl reload sshd 使指定服务重新加载配置
systemctl list-dependencies sshd 查看指定服务的依赖关系
systemctl mask sshd 冻结指定服务
systemctl unmask sshd 启用指定服务