基础命令
cd : 切换目录
cd :切换路径
cd ~ 切换到当前用户的家目录
cd . 切换到当前路径
cd .. 切换到上一级路径
cd ../.. 切换到上上级路径(其中:在linux中路径分隔符为斜杠/)
cd - 切换到上一次的路径
ls : 列出目录内容
ls:列出目录内容
ls -l:列出详细信息
ls -a:列出全部文件信息,包括隐藏文件
ls -d:列出目录详细信息
ls -h:列出文件信息并显示文件大小单位
alias/unalias : 命令别名/取消命令别名
alias 别名='命令' :给命令起别名
unalias 别名 :取消命令别名
unalias -a 别名 :取消所有别名
mv : 移动、重命名文件
mv 旧文件名 新文件名 ====>修改文件名
如:mv file1 filea将当前目录的文件file1改名为filea
mv 旧目录名 新目录名 ====>修改目录名
如:mv dir1 dira将当前目录下的目录dir1改为dira
mv 文件名 目录名 ====>移动路径
如:mv filea dira将当前目录下filea移动到dira子目录
如:mv filea ~ 将当前目录下filea移动家目录
如:mv ~/filea ..将家目录下的fila移动到上一个路径
cp :复制文件(目录)
==复制 cp -r 目录 -v 详细 -f 强制 -n 静默
1) cp 源文件名 目标文件名
举例:
cp File1 file2将当前目录下的文件File1拷贝成file2
2) cp 源文件名 目标目录名
举例:
cp file2 dira/将当前目录下的文件file2拷贝到dira子目录
3) cp 源目录名 目标目录名
举例:
cp -r dira dirb复制dira目录下的所有内容到dirb。其中,-r参数是递归复制
cp -i file2 dira如果dira目录下面有同名的file2,加入-i参数就会要求你确认是否覆盖同名的文件
mkdir : 创建空目录
mkdir dir1
创建两个目录:
mkdir /home/dir2 /home/dir3
mkdir /home/{dir4,dir5}
mkdir -v /home/{dir6,dir7} #-v :verbose 冗长的。显示创建时的详细信息
mkdir -p /home/dir8/111/222 #-p 创建连级目录,一级一级的创建
rmdir : 删除空目录
==删除 rm -r 递归删除目录 -f force强制 -v 详细过程 *通配符
rm:删除目录及内容
rm -rf :删除所有
touch : 创建空文件
[root@linux-server ~]# touch file1.txt //无则创建,如果存在修改时间
[root@linux-server ~]# touch /home/file10.txt
[root@linux-server ~]# touch /home/{zhuzhu,gougou} //{}集合
[root@linux-server ~]# touch /home/file{1..20} //批量创建
echo : 写入
echo 加内容 > 加文件名 #覆盖:把之前的内容替换掉
echo 123 > a.txt
echo 加内容 >> 加文件名 #追加:保留之前的内容,在后面添加新内容
echo 345345 >> a.txt
当使用echo 123 >> a.txt 这个命令的时候在文件不存在的时候会创建该文件并将内容追加到改文件中
stat : 详细查看文件访问时间等信息
root@localhost ~] #stat file文件: "file"
大小 : 24 块 :8 IO块 : 4096 普通文件
设备 : fdooh/64768d Inode : 35493573 硬链接∶1
权限 : ( 0644/- rw- r--r-- ) Uid : ( 0/ root) Gid : ( 0/ root)
环境 : unconfined_u: object_r: admin_home_t: so
最近访问:2023-04-05 11:31:37.678858345 +080O
最近更改:2023-04-05 11:31:35.590867350 +080O
最近改动:2023-04-05 11:31:53.385790608 +080O
创建时间: -
awk:以关键字分隔查看内容
awk -F ":" '{print $2}' 文件路径
[root@localhost ~]# cat /home/a
aaaa:skas:asdd
[root@localhost ~]# awk -F ":" '{print $2}' /home/a
skas
sort: 排序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd #以: 分隔,将第三列按字数升序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd -r #以: 分隔,将第三列按字数降序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd |head #以: 分隔,将第三列按字数升序看前十行
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd |tail #以: 分隔,将第三列按字数升序看后十行
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行
wc :统计数据
wc -l :统计有多少行数据
find : 针对文件属性查找文件
-name : 按文件名查找
[root@linux-server ~]# find /var/cache/yum/ -name "*.rpm" #查找/var/cache/yum下以.rpm结尾的文件
[[email protected] ~]# find /etc -iname "Ifcfg-ens33" #-i忽略大小写
-size : 按文件大小查找
[[email protected] ~]# find /etc -size +5M #查找大于5M
[[email protected] ~]# find /etc -size 5M #等于5M
[[email protected] ~]# find /etc -size -5M #小于5M
[[email protected] ~]# find / -size +3M -a -size -5M #查找/下面大于3M而且小于5M的文件 —a:and
[[email protected] ~]# find / -size -1M -o -size +8M #查找/下面小于1M或者大于8M的文件 -o:or
[[email protected] ~]# find / -size -3M -a -name "*.txt" #查找/下面小于3M而且名字是以.txt结尾的文件
-atime/mtime/ctime : 按时间查找
-atime = access访问时间 #单位是 天
-mtime = modify改变时间 内容修改时间会改变
-ctime = change修改时间 属性修改时间会改变
-amin #分钟
-mmin
-cmin
[[email protected] ~]# find /opt -mtime +5 #修改时间5天之前
[[email protected] ~]# find /opt -atime -1 #访问时间1天之内
[[email protected] ~]# find . -amin +1 #访问时间在1分钟之前
-type : 按文件类型查找
-type f:普通文件
-type l:链接文件
-type d:目录文件
-type b:设备文件
[[email protected] ~]# find /dev -type f
-perm : 按文件权限
[[email protected] ~]# find . -perm 644 #查找当前目录下权限是644的文件或目录
[[email protected] ~]# find /usr/bin -perm -4000 #包含set uid
-exec/xargs : 参数传递
-exec:参数是一个一个传递的,传递一个参数执行一次命令。
[[email protected] ~]# find /etc -name "ifcfg*" -exec cp -rf {} /tmp \; #exec命令查找带ifcfg开头的文件复制到tmp下
[[email protected] ~]# find /home/ -name test* -exec tar cvzf test.tar.gz {} \; #由于-exec是一次一次执行,所以会产生覆盖导致最终只会产生一个tar.gz文件,故需要将 “\;” 改成 “+;”
xargs:将前一个命令的标准输出传递给下一个命令,作为它的参数转换成下一个命令的参数列表。
[[email protected] ~]# # find /home/ -name "test*" | xargs -i cp {} /tmp/ #找到之后删除处理xargs 参数传递
区别:
1、exec每处理一个文件或者目录,它都需要启动一次命令,效率不好;
2、xargs不能操作文件名有空格的文件;
ping : 检查主机是否可以联网
[root@linux-server ~]# ping www.baidu.com #ping命令,可以检查主机是否可以联网
PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
[root@linux-server ~]# ping -c 3 www.baidu.com
-c:指定次数
ntp :实现服务器对时
[root@localhost ~]# yum install ntp
[root@localhost ~]# ntpdate ntp.aliyun.com
[root@localhost ~]# ntpdate cn.pool.ntp.org #cn.pool.ntp.org是ntp网络授时组织的中国授时源
which :查找命令
[[email protected] ~]# which cd
/usr/bin/cd
查看文件内容
cat:查看一个文件的全部内容
cat -n : 显示行号
cat -A : 显示控制字符
head :头部
[root@linux-server ~]# head /etc/passwd //默认查看前十行
[root@linux-server ~]# head -2 /etc/passwd //查看前两行
tail :尾部
[root@linux-server ~]# tail /etc/passwd //默认查看文件的后十行
[root@linux-server ~]# tail -1 /etc/passwd //查看文件最后一行
[root@linux-server ~]# tail /var/log/messages
[root@linux-server ~]# tail -f /var/log/secure //-f 动态查看文件的尾部
[root@linux-server ~]# tailf /var/log/secure //功能同上
grep:过滤关键字
过滤文件中带有root的内容:
[root@linux-server ~]# grep 'root' /etc/passwd
过滤以root开头的行:^ --以什么开头
[root@linux-server ~]# grep '^root' /etc/passwd
过滤以bash结尾的行:$ --以什么结尾
[root@linux-server ~]# grep 'bash$' /etc/passwd
less :分页显示
[root@linux-server ~]# less /etc/makedumpfile.conf.sample
1.空格键是翻页 回车键是翻行
2.上下箭头可以来回翻
3./关键字 #搜索 (n按关键字往下翻 N按关键字往上翻)
4.快捷键:q -quit 退出
more :分页显示文件内容
[[email protected] ~]# more 文件名
空格键是翻页 回车键是翻行
用户管理
useradd / userdel / usermod : 用户管理
-M : 不创建用户主目录
-r : 创建系统用户
[root@linux-server ~]# useradd user02 -u 503 //指定uid为503
[root@linux-server ~]# useradd user05 -s /sbin/nologin //创建用户并指定shell
[root@linux-server ~]# useradd user07 -G it,fd //创建用户,指定附加组
[root@linux-server ~]# useradd -g 1003 user8 #指定用户的主属组为1003组。
[root@linux-server ~]# useradd user10 -u 4000 -s /sbin/nologin
userdel -r :完全删除用户
1.修改用户名:
-l
[root@linux-server ~]# usermod -l NEW_name user8
[root@linux-server ~]# id user8
id: user8:无此用户
2.修改GID:
-g
[root@linux-server ~]# id user10
uid=1000(user10) gid=1000(tom) groups=1000(tom)
[root@linux-server ~]# usermod user10 -g new_gid #gid需要提前存在
3.修改UID
-u
[root@linux-server ~]# usermod -u new_id jack
[root@linux-server ~]# id jack
uid=1005(jack) gid=1004(jack) groups=1004(jack)
4.修改用户的登录shell
-s
[root@linux-server ~]# usermod -s /sbin/nologin user07 #修改用户的登录shell
groupadd / groupmod / groupdel:组管理
[root@linux-server ~]# groupadd hr //创建一个用户组叫hr
[root@linux-server ~]# groupadd net01 -g 2000 //创建组叫net01,并指定gid为2000
[root@linux-server ~]# grep 'net01' /etc/group //查看/etc/group中组net01信息
net01:x:2000:
[root@linux-server ~]#groupmod 参数 组名
-g:修改组的gid
-n:修改组名
[root@linux-server ~]#groupmod -g 2000 grp1
[root@linux-server ~]#groupmod -n 新组名 grp1
[root@linux-server ~]# groupdel net01 #删除组net01
注意:用户的主属组不能删除
gpasswd : 组成员管理
注意:只针对已存在的用户
1.给组添加账户
-a
[root@linux-server ~]# gpasswd -a user10 grp2
Adding user user10 to group grp2
2.同时添加多个用户到组
-M:members成员的缩写
[root@linux-server ~]# gpasswd -M tom,alice it (**会覆盖该组之前的组成员**)
3.从组删除用户
-d
[root@linux-server ~]# gpasswd -d user07 hr
权限管理
chown:改变文件或目录的所属主以及所属组
chown :(chown 属主.属组 文件名)
[root@linux-server ~]# chown alice.hr file1.txt //修改属主、属组
[root@linux-server ~]# chown tom file1.txt //修改属主
[root@linux-server ~]# chown .it file1.txt //只改属组
[root@linux-server ~]# chown -R alice.hr dir1 //递归修改---针对目录
chmod : 更改权限
基本权限类型:
读 :r ----> 4
写 :w ----> 2
执行: x(exec) -----> 1
[root@linux-server ~]# chmod -R a=rwx dir1 //递归更改目录及其中文件的权限
a. 使用符号*
[root@linux-server ~]# chmod u+x file1.txt //属主增加执行
[root@linux-server ~]# chmod a=rwx file1.txt //所有人等于读写执行
[root@linux-server ~]# chmod a=- file1.txt //所有人都没有权限
[root@linux-server ~]# chmod ug=rw,o=r file1.txt //属主属组等于读写,其他人只读
[root@linux-server ~]# ll
-rw-rw-r--. 1 tom it 0 Nov 1 15:30 file1.txt
b.使用数字*
[root@linux-server ~]# chmod 644 file1.txt
[root@linux-server ~]# ll file1.txt
-rw-r--r--. 1 tom it 0 Nov 1 15:30 file1.txt
[root@linux-server ~]# chmod 755 file1.txt
[root@linux-server ~]# ll
-rwxr-xr-x 1 root root 0 Jul 23 22:40 file1.txt
[root@linux-server ~]# chmod 521 file1.txt
[root@linux-server ~]# ll
-r-x-w---x 1 root root 0 Jul 23 22:40 file1.txt
chgrp : 更改属组
[
root@linux-server ~]# chgrp hr file1.txt //更改文件file1.txt所属组为hr
[root@linux-server ~]# chgrp -R hr dir1 //递归更改目录dir1及其中文件所属组为hr
ACL权限
getfacl :查看文件或目录当前设定的 ACL 权限信息
[root@localhost ~]# getfacl 文件名
setfacl :直接设定用户或群组对指定文件的访问权限
setfacl -m:给用户或群组添加 ACL 权限
chattr:文件隐藏属性
[root@linux-server ~]# touch file1 file2 file3
1.查看文件属性
[root@linux-server ~]# lsattr file1 file2 file3 #查看文件隐藏属性
---------------- file1
---------------- file2
---------------- file3
2.设置权限
[root@linux-server ~]# chattr +a file1 #不允许修改,只允许追加
[root@linux-server ~]# chattr +i file2 #不允许做任何操作
[root@linux-server ~]# chattr +A file3
[root@linux-server ~]# lsattr file1 file2 file3
-----a---------- file1
----i----------- file2
-------A-------- file3
i:即Immutable,系统不允许对这个文件进行任何的修改
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖或截断这个文件
A:即Atime,告诉系统不要修改对这个文件的最后访问时间
取消权限
[root@linux-server ~]# chattr -a file1
[root@linux-server ~]# chattr -i file2
管道与重定向
awk:过滤并输出文件中符合条件的内容
awk -F "分隔符" '{print $第几列}'
[root@localhost ~]# cat /home/aaa
sdjlasjlk
asldjasjlkdasjl
[root@localhost ~]# grep 'sd' /home/aaa | awk -F "j" '{print $2}' #过滤aaa中的一行内容然后将结果通过管道传递给 awk,过滤并输出以j为分隔符的第二列内容
las
sort: 排序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd #以: 分隔,将第三列按字数升序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd -r #以: 分隔,将第三列按字数降序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd |head #以: 分隔,将第三列按字数升序看前十行
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd |tail #以: 分隔,将第三列按字数升序看后十行
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行
xargs:参数传递
对与 ls cp rm mv命令,管道不能执行。所以通过xargs实现。
语法:
cat a.txt | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效
目录时 -r
解释:前面传过来的东西交给大括号
cat file.txt |xargs ls -l
前面是目录或者目录的路径。 ls - l 后面可以不加大括号,直接执行。
[[email protected] ~]# touch /home/file{1..5}
[[email protected] ~]# # cat files.txt | xargs -i cp -rvf {} /tmp/
‘/home/file1’ -> ‘/tmp/file1’
‘/home/file2’ -> ‘/tmp/file2’
‘/home/file3’ -> ‘/tmp/file3’
‘/home/file4’ -> ‘/tmp/file4’
‘/home/file5’ -> ‘/tmp/file5’
软件管理
rpm:管理软件
rpm -ivh 软件包:安装软件
-i install 安装
-vh verbose human 人性化显示安装过程
-u upgrade 升级
rpm -q{a,l,f} 软件包:查询
==查询
(从本地的rpm数据库)
-q query (查询)
-l list (列出)
-f file
-a all
rpm -ql 软件包名 :列出某个软件包安装后,生成了哪些文件以及文件对应的存储位置
[root@linux-server ~]# rpm -qa | grep 软件名 # 查找软件是否安装
[root@linux-server ~]# rpm -ql httpd #查询http安装的文件
[root@linux-server ~]# rpm -qf /usr/share/httpd/noindex #查询该文件属于哪个包,只能查询已经安装好的软件
rpm -e:删除软件
语法:# rpm -e 软件名称
-e erase的意思
[root@linux-server ~]# rpm -e httpd
yum:管理软件
清理yum缓存:(元数据建立)
# yum clean all
缓存软件包信息:
提高搜索/安装软件的速度
# yum makecache
查询yum源信息: #也具有缓存功能
# yum repolist
查看命令属于哪个软件
# yum provides rz
查看系统已经安装好的软件和没有安装的软件(源里存在即可查到):
# yum list
安装软件:
# yum -y install 软件名称
进程管理
ps aux/ps -ef:静态查看进程
[root@linux-server ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
============================================================================
USER: #运行进程的用户
PID: #进程ID
%CPU: #CPU占用率
%MEM: #内存占用率
VSZ 进程占用的虚拟内存大小 ,一般以B为单位
RSS 占用的物理内存大小
TTY 终端 (?表示不占用终端) (? 表示没有占用终端)
STAT: #进程状态 ---了解
START: #进程的启动时间
TIME: #进程占用CPU的总时间
COMMAND: #进程文件,进程名
[root@linux-server ~]# ps aux | less
参数解释:
ps :process nsapashot
a 只能查看系统里面运行的所有终端进程
u 显示进程拥有者
x 显示系统内所有进程
f 显示进程之间的父子关系
[root@linux-server ~]# ps -ef
参数解释:
-e 显示所有进程
-l 长格式显示
-f 完整格式
cat ... :查看单个PID
[root@linux-server ~]# systemctl start httpd #启动
[root@linux-server ~]# cat /var/run/httpd/httpd.pid
1043
ps aux | grep '进程名':查看指定PID
[root@linux-server ~]# ps aux | grep sshd
root 1043 0.0 0.2 105996 4120 ? Ss 01:32 0:00 /usr/sbin/sshd -D
netstat -tlanp:查看端口
ip地址: 为了确定一个服务器在互联网的位置
服务端口: 为了确定一个服务在服务器中位置
#查网络进程和正在监听的端口
[root@linux-server ~]# netstat -tlanp (该命令对应的包名:net-tools)
参数详解:
-a 显示全部的进程
-u 显示udp
-n 以数字的新式显示协议名称
-t tcp
-p:显示进程的名称和pid
-l :只显示正在被监听的端口
[root@localhost ~]# netstat -alntp | grep 'sshd'(可跟端口号/进程名/PID) ##可查看到sshd服务的端口号是22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1106/sshd
tcp 0 0 192.168.201.142:22 192.168.201.1:10025 ESTABLISHED 17303/sshd: root@no
tcp 0 0 192.168.201.142:22 192.168.201.1:10024 ESTABLISHED 17034/sshd: root@no
tcp 104 0 192.168.201.142:22 192.168.201.1:9813 ESTABLISHED 1820/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1106/sshd
lsof -i:端口号 :根据端口号查询进程
[root@linux-server ~]# yum install lsof #安装软件包
[root@linux-server ~]# lsof -i:80 #端口号,这能查看带端口的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 64249 root 4u IPv6 1373628 0t0 TCP *:http (LISTEN)
top:动态查看进程
[root@linux-server ~]# top #动态显示信息,三秒刷新一次。
kill/pkill:进程控制
kill,pkill
语法: kill 信号 PID #信号也是进程间通信的一种方式
pkill 信号 进程名
[root@linux-server ~]# kill -l #查看所有信号
-1 HUP 重新加载进程或者重新加载配置文件,PID不变
-9 KILL 强制杀死
-15 TERM 正常杀死(这个信号可以默认不写)
-18 CONT 激活进程
-19 STOP 挂起进程
进程状态解释--了解:
+:表示运行在前台的进程组
S+:休眠状态
T+:暂停,挂起状态
s:父进程
jobs:作业控制
sleep 工作号 & :让命令或程序后台运行
sleep 工作号 #ctrl Z :把程序从前台放到后台并暂停
jobs :查看后台工作号
bg %工作序号 :让暂停的程序在后台运行
fg %工作序号 :将后台的程序调到前台
常用命令
uptime : 查看当前CPU负载
free -m : 查看内存使用情况
查看系统版本和内核
[root@linux-server ~]# cat /etc/redhat-release #查看版本
CentOS Linux release 7.4.1708 (Core)
[root@linux-server ~]# uname -a #看查正在运行的内核版本
Linux linux-server 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@linux-server ~]# uname -r #查看内核版本
3.10.0-693.el7.x86_64
修改主机名
[root@linux-server ~]# hostnamectl set-hostname xxxx #主机名,修改完之后断开与终端连接,然后在重新连接即可。
查看主机名
[root@linux-server ~]# hostname
vim /etc/hostname #直接更改hostname,然后reboot重启
lrzsz : 上传下载
# yum install -y lrzsz
上传
# rz
下载
# sz 文件
计划任务
at : 一次调度执行
at使用规则
[root@linux-server ~ ]# yum -y install at
[root@linux-server ~ ]# systemctl status atd #查看启动状态
[root@linux-server ~ ]# systemctl start atd #首先要启动服务
方式一:
[root@linux-server ~ ]# at now +1min #一分钟后开始执行
at> useradd uuuu
at> #Ctrl+D
job 1 at Sat Mar 21 22:34:00 2015
方式二:
[root@linux-server ~ ]# vim at.jobs
useradd u99
[root@linux-server ~ ]# at 20:33 < at.jobs #在20:33执行计划任务
at是以输入重定向方式将文件中的内容输入给at调度执行任务,所以不需要执行文件,即不需要给予执行权限。
atq : 查看一次性计划任务
# atq
2 Tue Aug 9 14:29:00 2022 a root
atrm : 删除一次性计划任务
# atrm 计划任务序号
cron :循环调度执行 用户级
crontab -l //列出当前用户的计划任务
crontab -r //删除当前用户所有的计划任务
crontab -e //编辑当前用户的计划任务
crontab -u username //(仅管理员可使用)管理其他用户的计划任务