ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux命令学习笔记

2021-06-01 22:33:05  阅读:121  来源: 互联网

标签:文件 target 查看 用户组 笔记 echo 命令 Linux


1.基本命令

日期

date

日历

cal [month] [year]
cal 2015
cal 10 2015

数据同步写入磁盘

sync

关机

shutdown

重启

reboot 

2.文件相关命令

列出文件

ls -al

修改用户组

chgrp [-R] 用户组名称 文件或目录

修改拥有者

chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录

修改权限

一般权限
chmod [-R] 777 文件或目录 # rwxrwxrwx 系数(r:4, w: 2, x: 1)
chmod u=rwx,go=rx 文件或目录 #rwxr-xr-x
chmod a+w 文件或目录    #给owner groud other都加上w权限
chmod u-x 文件或目录    #给owner 减去x权限

特殊权限
SUID、SGID、SBIT(系数分别为,4,2,1)
SUID:仅对二进制程序有效,执行者在执行该文件期间具有该程序拥有者权限
SGID:仅对二进制程序有效,执行者在执行该文件期间具有该程序用户组权限
SBIT:仅对目录有效, 用户在该目录下建立文件,仅有root和该用户才有权利删除该文件

chmod 4755 test # 加入SUID权限 rwsr-xr-x
chmod 6755 test # 加入SUID/SGID权限 rwsr-sr-x
chmod 1755 test # 加入SBIT权限 rwxr-xr-t

切换目录

cd [相对或绝对路径]

显示当前路径

pwd

创建新目录

mkdir test
mkdir -m 711 test
mkdir -p test1/test2/test3

复制文件和目录

cp 源文件 目标文件
-p: 连同文件属性一起复制
-r: 目录的递归复制
-i: 覆盖时询问
-a: 全部属性复制 

删除文件和目录

rm 文件或目录
-r: 递归删除
-f: 忽略不存在文件,不报错

移动文件和目录

mv source1 source2 source3 ... 目录
-i: 询问覆盖 
-f: 直接覆盖,不询问

获取文件名和目录名

basename 路径
dirname 路径

查看文件

cat
less #可翻页
head -n 10 文件   #查看头部10行
tail -n 10 文件   #查看尾部10行
od -t [acdfox] 文件   #查看非纯文本文件

新建文件或修改文件时间

touch 文件
-d: 后接时间
-c: 仅修改时间,不建立新文件

文件默认权限

umask
umask 002 # rwxrwxr-x 后接数值是对应减掉的权限

查看文件格式

file 文件名
# ascii文件、data文件、二进制文件

查找文件

which command  # 查找命令的位置,根据环境变量PTAH查找

whereis 文件和目录名

locate keyword # 根据数据库记录查询, updatedb 更新数据库
-r: 表明后接正则
-l: 输出行数
-i: 忽略大小写

find [PATH] [OPTION] [ACTION]
-mtime n: 在前第n那天被修改的文件
-mtime +n: 在n天前被修改的文件
-mtime -n: 在n天内被修改的文件
-uid 用户id
-gid 用户组id
-user 用户名
-group 用户组名
-name 文件名
-size [+-]文件大小:查找比指定文件size大或者小的文件
-perm mode:权限等于mode的文件
-perm -mode: 权限等于或包含mode的文件
-perm /mode: 包含任一mode权限的文件
# 根目录下找出文件名包含passwd的文件
find / -name passwd 
# 根目录下找出在前第三天被修改的文件
find / -mtime 3
# 根目录下找出含有SUID、SGID、SBIT权限的文件
find / -perm /7000

3.磁盘和文件系统

列出文件系统及其容量

df -h
-h:人性化显示
-i: 显示inode数量

列出目录容量

du -sh 文件和目录
-s: 列出总量
-h:人性化显示

建立链接

ln -s 源文件 目标文件 # 不加-s为硬链接,否则为符号链接

列出系统上磁盘列表

lsblk

4.压缩和解压缩

压缩

tar -jcv -f filename.tar.bz2 文件或目录
-z: gzip[*.tar.gz]
-J: xz[*.tar.xz]
-j: bzip2[*.tar.bz2]

解压

tar -jxv -f filename.tar.bz2 文件或目录

5.shell

查询命令

type 命令

列出环境变量

env

列出所有变量

set

键盘输入读取变量

read 变量名

命令别名设置

alias rm='rm -i'

查看输入的历史命令

history

管道

cat > test # 新建test文件
> 标准输出(覆盖)
>> 标准输出(追加)
< 标准输入(覆盖)
< 标准输入(追加)

查找信息

grep '查找字符或正则' [file or stdin]

排序

sort [file or stdin]

去重

uniq [stdin]

参数代换

xargs 命令
find /usr/sbin -perm /7000 | xargs ls -l

文本处理

sed [n1[,n2]] function [stdin]
function: a新增, c替换, d删除, i插入, p打印, s正则替换
nl /etc/passwd | sed '2a drink tea' # 在第二行后加上drink tea

awk '条件类型1(操作1)条件类型2(操作2)...' [filename | stdin]
NF:每行字段总数
NR:当前为第几行
FS:分隔符

last -5 | awk '{print $1 "\t" $3}' # 打印出last命令第1列和第三列
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}' #以:为分隔符,打印符合条件第3列小于10的行中的第1和3列

文件对比

diff fromFile toFile

在当前bash进程中执行shell文件

source xxx.sh

检测文件相关属性

test [options] [文件名]

shell脚本的变量

$0 命令文件名
$1, $2, $3, $4....   接在后面的参数
$# 参数的个数
$@ 所有参数

shell文件调试

sh [option] 文件名
x: 输出当前执行的命令脚本
v: 输出所有脚本内容

shell语法

数组
array_name=(value1 value2 ... valuen)
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

算术运算符
val=`expr 1 + 1`
val=`expr 1 - 1`
val=`expr 1 \* 2`
val=`expr 1 / 2`

[$a 运算符 $b]
关系运算符包括:-eq, -ne, lt, -gt, -le, -ge
布尔运算: !(非运算),-o(或),-a(且)
逻辑运算: &&、||
字符运算: 字符串是否相等(=)、不等(!=)、-n(字符串长度不为0返回true)

条件语句
if [ $a == $b ] then
  echo "a 等于 b"
fi 

if [ $a == $b ] then
   echo "a 等于 b"
elif [ $a -gt $b ] then
   echo "a 大于 b"
elif [ $a -lt $b ] then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

case "$site" in
   "runoob") echo "菜鸟教程"
   ;;
   "google") echo "Google 搜索"
   ;;
   "taobao") echo "淘宝网"
   ;;
esac

循环
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

while(( $int<=5 ))
do
    echo $int
    let "int++"
done

for((i=1;i<=5;i++))
do
    echo "这是第 $i 次调用";
done
跳出循环:break
跳到下一循环: continue

函数
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

6.账号相关

查看当前用户支持的用户组

groups

切换当前用户用户组(必须是已加入的用户组)

newgrp 用户组名

新增用户

useradd [-u UID] [-g 初始化用户组] [-d 家目录绝对路径] [-s shell] 账号名称

设置或修改密码

paaswd [账号名称]

修改用户账号属性

usermod [options] [账号名称]

删除用户

userdel [-r] [账号名称]

查看用户信息

id 账号名称
finger 账号名称

用户组的增删改

groupadd [-g gid] 用户组名称
groupmod [-g gid] [-n 新组名] 用户组名称
groupdel 用户组名称

切换用户

su [-lm] [-c 命令] 用户名
su -  #切换到root
su - zjw #切换到zjw 

使用某账号的身份执行命令

sudo [-u 账号] 命令
# 通过/etc/sudoers 来查看用户是否有sudo权限

查看当前登录的用户

who

查看用户登录历史记录

lastlog
last

发送邮件

mail -s 邮件标题 用户
mail -s "hello" zjw < ~/test

7. 计划任务

一次性任务

at [-mldv] 时间
at -c 任务号码
at now + 5 minutes
at -c 1
at 23:00 2020-09-08

列出当前的一次性任务

atq

删除当前的一次性任务

atrm 任务号

在cpu任务负载小于0.8时执行计划任务

batch

循环计划任务

crontab [-u 用户名] [-e | -l | -r]
-e: 编辑
-l: 查看
-r: 删除所有任务


0 12 * * * mail -s "at 12:00" zjw < ./test
# 每天12点都发送邮件到zjw邮箱

0 3,6 * * * 命令
# 每天3点和6点执行命令

20 8-12 * * * 命令
# 8点至12点,每小时的20分都执行命令

*1/5 * * * * 命令
# 每隔5分钟执行命令


# 系统配置文件
/etc/crontab、/etc/cron.d/*

8. 进程

将命令放到后台执行

命令 &

将目前任务放到后台中暂停

[crtl] + z

查看后台任务状态

jobs [-lrs]

取出后台任务

fg %任务号
fg %1  # 取出1号任务

将后台任务状态由暂停转变为运行

bg %任务号

杀掉进程

kill -signal %任务号
killall -signal 命令名称 
-1: 重新读取配置文件,reload
-2: ctrl + c
-9: 强制结束
-15: 正常结束

脱机后台运行任务

nohup 命令 &

查看进程

ps -l # 查看当前bash相关的进程
ps aux  # 查看系统所有进程
ps -ez # 查看进程的selinux相关信息

状态:
R: 运行
S: 休眠
+: 处于前台
s: 一些子进程的leader进程

动态监测进程状态

top [-d 间隔秒数] [-p 指定PID]

查看进程树

pstree -A [-up]

调整nice值,影响进程执行优先级

# 执行命令时,指定nice值
nice -n 数字 命令
# 调整已有进程的nice值
renice 数字 PID

数字范围: -19 - 20

查看系统信息

uname -a

查看网络连接服务信息

netstat [option]
-a: 列出所有信息
-t: 列出tcp链接
-u: 列出udp链接
-p: 列出pid
-l: 列出正在监听的服务
-n: 显示端口号

发出网络请求

# Get请求
curl https://www.example.com

# POST请求
curl -d'login=emma&password=123'-X POST https://google.com/login 

# 带header
curl -H 'Accept-Language: en-US' https://google.com

# 将响应保存为为文件
curl -o example.html https://www.example.com

# 显示响应的头部信息
curl -i https://www.example.com

查看系统资源信息

vmstat

查找进程pid

pidof 程序名

查找进程所使用的文件

lsof [-aUu] [+d 目录]
-a:条件同时成立
-u:接用户名
-U:列出socket文件
+d:后接查找目录

查看/设置SELinux模式

getenforce
# enforcing: 开启并正常运行
# permissive: 开启但不限制,只触发警告
# diabeld: 完全关闭

setenforce [0|1]
# 0: 对应permissive
# 1: 对应enforcing

查看当前SELinux策略

sestatus

查看当前SELinux规则的布尔值

getsebool

9. 服务

管理单一服务

systemctl [命令] [服务unit]

命令:
start 启动服务
stop 关闭服务
restart 重启服务
reload 重新加载配置文件
enable 下次开机时,启动unit
disable 下次开机时,不启动unit
status 列出服务状态
is-active 查看目前有没有运行
is-enable 查看目前有没有启用
mask 注销服务,服务不可被自启动或被唤醒
unmask 取消注销服务
show 查看服务详细信息

服务类型包括:service、socket(内部程序交换)、target(服务集合)、mount(挂载相关)、timer(循环执行的服务)等

服务状态:
active(running、exited、waiting):运行、一次运行、等待执行
inactive:未运行
enabled:开机时会被启动
disabled:开机时不会被启动
static:不可自己启动,可被其他服务唤醒
mask:无论如何都无法启动

# 关闭atd服务
systemctl stop atd.service

查看所有服务

systemctl [命令] [--type=类型] [--all]

命令:
list-units: 列出当前启动的unit,加上--all才会列出没启动的
list-unit-files: 依据/usr/lib/systemd/system/内的文件,进行列出说明

类型: 服务类型 service、socket、target等

查看/设置操作模式 target

systemctl [命令] [操作模式]

命令:
get-default: 取得目前的target
set-default:设置后面接的target为默认模式
isolate: 切换到后接的模式

操作模式:
graphical.target: 图形界面
multi-user.target: 纯命令行
rescue.target:临时系统
emergency.target: 紧急处理
shutdown.target: 关机模式
getty.target: 设置tty数量

快捷操作:
systemctl poweroff 关机
systemctl reboot 重启
systemctl suspend 挂起
systemctl hibernate 休眠

分析服务依赖

systemctl list-dependencies [服务unit] [--reverse]

服务配置文件

位置:/usr/lib/systemd/system/、/etc/systemd/system/

示例配置文件
[Unit] 执行服务依赖性相关
Description=OpenSSH server daemon
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service] 与执行的命令参数有关
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install] 挂载unit到哪个target
WantedBy=multi-user.target

新增或修改服务配置文件后,使systemd重新读取配置

systemctl daemon-reload 

10. 日志

各类服务日志文件常见位置:/var/log/

rsyslog.service 的配置文件: /etc/rsyslog.conf

# info级别以上的mail信息都记录到/var/log/maillog_info中
mail.info    /var/log/maillog_info

#重要服务类别
0 kern 内核产生信息
1 user 用户层级产生的信息,例如logger命令
2 mail 邮件
3 daemon 系统服务
4 auth 认证、授权相关
5 syslog rsyslogd程序本身产生的信息
6 lpr 打印机相关
7 news 新闻组
9 cron 计时任务
11 ftp相关任务
16-23 保留给本地终端用户使用

# 信息等级
debug
info
notice
warning
err
crit
alert
emerg

查看日志

journalctl  [-nrpf] [--since 起始时间] [--until 终止时间] [选项]

-n 后接显示行数
-r 颠倒顺序,从最新到最旧的信息
-p 后接信息等级,info、err等
-f 持续刷新显示

选项:
_PID=pid 只输出该pid相关信息
_UID=uid 只输出该uid相关信息
_SYSTEM_UNIT=unit.service 只输出该服务相关信息
SYSLOG_FACILITY=[0-23] 只输出对应服务类别的信息

示例
journalctl --since "2020-06-01 00:00:00" --until "2020-06-02 00:00:00"
journalctl --since today
journalctl -p err
journalctl _SYSTEM_UNIT=crond.service -n 10

输出信息到日志保存

logger [-p 服务名称.等级] “信息”

示例
logger -p syslog.info "1234"

11. 内核和软件源码编辑

Centos Linux内核启动流程:

  • BIOS:Basic Input Output System,加载CMOS内主机硬件配置信息,读取MBR(Master Boot Record,主引导记录)中 boot loader
  • boot loader: 操作系统启动引导程序
  • kernal + inittramfs:操作系统内核、虚拟文件系统用于启动系统模块
  • systemd: 启动 default.target 中的各种系统和用户服务

makefile

目标(target): 目标文件1、目标文件2
<tab>	gcc -o 建立的可执行文件名称 目标文件1 目标文件2

OBJ = main.o haha.o sin_value.o # 变量
main: ${OBJ}
	gcc -o main ${OBJ}
clean: # 清除
	rm -f main.o haha.o sin_value.o

详细语法:https://seisman.github.io/how-to-write-makefile/introduction.html

安装软件

yum [选项] [命令] [参数]
选项:
-y: 执行自动提供yes
--installroot=/some/path: 将该软件安装到/some/path
命令:
search: 搜索某个软件
list: 列出目前所有软件与版本
info: 列出某软件的详细信息
provides: 从文件去查找软件
install: 安装
update: 更新
remove: 删除

yum配置文件
/etc/yum.repos.d/CentOS-Base.repo

12. 相关概念及命令扩展阅读

inode: http://www.ruanyifeng.com/blog/2011/12/inode.html
SELinux: https://zhuanlan.zhihu.com/p/30483108
curl命令:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
磁盘阵列RAID:https://zh.wikipedia.org/wiki/RAID
make命令语法: https://seisman.github.io/how-to-write-makefile/introduction.html
linux 父/子进程: http://wuchong.me/blog/2014/07/24/linux-process-manage/

标签:文件,target,查看,用户组,笔记,echo,命令,Linux
来源: https://blog.csdn.net/zjw_python/article/details/115471305

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有