linux实践

GNU public license(GPL)

  1. access source code
  2. copy
  3. modify
  4. redistribute
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

alias lx=ls
lx
unalias lx

在这里插入图片描述
在这里插入图片描述
*.o
a*b.o
[a-z][0-9]
~/??

在这里插入图片描述

free -h
//临时改名
sudo hostname <new-hostname>
date +%Y-%m-%d-%H:%M
uname -a(all)
cat /proc/cpuinfo
df

ls -a 显示隐藏文件

用户管理

useradd -d /home/test king(指定家目录)
passwd king

删除用户

userdel king
保留家目录 userdel king
把家目录也删除 userdel -r king

查询用户

id root

切换用户

高权限切换到低权限
su test
su root
who am i 显示的是首次登录的用户

目录管理

pwd显示绝对路径
分区,格式化,挂载

创建目录

mkdir
mkdir -p /home/animal/dog
rmdir
rm -rf递归删除

复制文件

cp -r(递归) 源文件 目的地文件夹

移动文件

在同一文件夹,叫做重命名
不在,

读取文件

cat -n 显示行号
cat -n /etc/profile |more
more 进行交互地看文件
less 要查看的文件
echo
> 输出重定向 >> 追加,单箭头是覆盖
tail -f 文件名(实时监控)
在这里插入图片描述

file命令用于辨识文件类型。
file /etx/passwd
普通文件

[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text

[root@localhost ~]# file -b install.log      <== 不显示文件名称
UTF-8 Unicode text

[root@localhost ~]# file -i install.log      <== 显示MIME类别。
install.log: text/plain; charset=utf-8

[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8

磁盘分区

lsblk
在这里插入图片描述

硬盘说明

IDE硬盘 “hdx~” x为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助存储盘) ~代表第几个分区
“hda1”,“hdb2”
SCSI硬盘 “sdx~” "sd"表示类型

查看所有设备挂载情况

lsblk -f
在这里插入图片描述
fdisk /dev/sdb 分区(/dev下是设备文件)
分区sdb1有了,但是还没格式化,需要格式化
mkfs -t ext4 /dev/sdb1 ext4是分区类型
挂载

mkdir newdisk
mount /dev/sdb1 /newdisk/
umount /newdisk or /dev/sdb1
永久挂载
vim /etc/fstab
写入 /dev/sdb1 /newdisk/
mount -a

查看硬盘使用情况

在这里插入图片描述
一开始默认三个目录挂载
/
swap
/boot

显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
df -h
df /dev/sdb1
在这里插入图片描述

查询指定目录的磁盘占用情况

会显示指定的目录或文件所占用的磁盘空间
du -h
-h header 显示
-a all 列出文件
–max-length=1 查看目录深度

du -s ~
只显示工作目录占用的空间,不关心目录下文件

sudo fdisk -l
fdisk /dev/sdb
mkfs -t ext4(文件系统格式/swap) /dev/sdb1
mount -t ext4 /dev/sdb1 /mnt

ls -l /opt |grep "^-" |wc -l
用正则表达式列出文件,并统计文件数
ls -l /opt |grep "^d" |wc -l
目录
ls -lR /opt |grep "^-"|wc -l
递归查询子文件夹的个数

目录文件
字符文件
链接文件
块设备文件
命名管道文件
socket文件
在这里插入图片描述
目录层次结构

//查看硬盘分区
df -hs /var
df /var
//查看占用空间大小
du /tmp/hello
du -s ~
//创建完整目录的路径
mkdir -p /bdir/cdir
//循环删除目录
rmdir -p
ls -l
//可以查看文件大小,和du -h的区别 以硬盘的数据块为单位,ls -l显示2字节,du -h显示数据块的单位4k
//用于在特定的分区上建立 linux 文件系统
mkfs
ls -ld ~
//显示目录的详细信息
rm -i a//询问
rm -rf a//删除目录,包括子目录

逻辑卷管理
linux logical volumn manager

sudo pvdisplay(physical volumn 查看物理卷)
sudo pvscan
sudo vgdisplay(vloumn group由多个physical volumn组成)
sudo lvdisplay(logical volumn逻辑卷)

安全
chgrp -R(递归更改)更改文件组别

sudo chgrp stu /tmp/hello
chmod 777 a.txt
chmod g-r(g+w) a.txt

能不能删除文件由所在目录的权限决定,并不是由文件的权限决定

umask
0022
022
666
//取反与666与
000 010 010
111 101 101
110 110 110
--------------
110 100 100
//直接算
666-022=644
chmod 640 test1
chmod u=rw,g=r,o=  test1

umask存储在哪里
.bash_profile
.bash_login
.profile

chmod u+s 文件名
guid位
黏着位sticky bit
sudo chmod +t /tmp
man cat
head -3 文件名
tail -3 文件名
od -c(-h) 文件名
ls /var/log
# 查看文件大小
du 文件
wc 文件
ls -l 文件
who | wc -l
diff hello1.cpp hello2.cpp > hello.patch
patch hello1.cpp hello.patch

suid位

  1. 只有可执行的二进制程序或者shell程序才能设定SUID权限

  2. 命令执行者要对该程序(命令)拥有x(执行)权限

  3. 命令执行者在执行该程序时获得该程序文件owner的身份(在执行程序的过程中灵魂附体为文件的owner)

  4. SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

du命令用于显示目录或文件的大小

wc命令用作计数
-l 选项可以获得指定文件内容的行数,每行以回车键作为结尾进行统计
-c 统计字节数
-w 统计单词数

od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来

uniq /tmp/uniq.txt
只能删除连续出现的行
uniq -d(看哪行重复出现) -c(看每行出现了多少次) /tmp/uniq.txt

find ~ -name ’ *.c’
find ~ -size 0 -exec ls -l {} ;
找出大小为0的文件并执行查看
find ~ -size 0 -ok rm {} ;
执行询问
find ~ -size +2M
find ~ -size 0 -o -name ‘* .c’
find ~ -name ‘*.swap’ -exec rm {} ;
which python
where is python

sort -nrk4 /tmp/student_records
按第4列的key,并按数字而非字符串排序,从大到小排序
sort -t: -k4 -n /etc/passwd

cut -f1-3 /tmp/student_records
默认分隔符为tab
cut -d’ ’ -f1 cut.txt
-d指定分隔符为空格
cut -c3,4,8-11 cut.txt
按字符分隔
paste sort.txt a.txt
paste 指令会把每个文件以列对列的方式,一列列地加以合并。

grep -n(显示行号) +正则表达式
grep ‘[1-5]$’ -c /tmp/exam1.txt
-w 以完整单词匹配
-v 反向查找
wc -l /tmp/exam1.txt

{}在grep、sed里面要加上反斜杠,在awk里面不用加

sed命令
-n选项:只显示匹配处理的行(否则会输出所有)
sed ‘s/CS/English/’ /tmp/student_records
sed ‘/CS/d’ /tmp/student_records
sed ‘s/E/e/g’ /tmp/student_records
sed -n ‘/CS/!p’ /tmp/student_records
sed ‘/CS/i High salary’ /tmp/student_records
awk ‘/CS/{print $1,$2}’ /tmp/student_records
awk ‘/CS/{print $1","$2}’ /tmp/student_records
awk -F"[: ]" ‘{print $4}’ /tmp/donors
awk -F"[: ]" ‘/Dan/{print $4}’ /tmp/donors
awk -F"[: ]" ‘/Susan/{print $1, $4}’ /tmp/donors
awk -F"[: ]" ’ $2~/^D/ {print $2}’ /tmp/donors
awk -F"[: ]" ’ $1~/1[a-z]*/ {print $1}’ /tmp/donors
awk -F"[: ]" ’ $1~/<.{4}>/ {print $1}’ /tmp/donors
awk -F’[ :]’ ‘$3~/916/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' /tmp/donors a…%s %s %s",$5,$6,$7}’ /tmp/donors
awk -F’[: ]’ ‘{print $1","$2}’ /tmp/donors
awk -F’[:]’ ‘{if($4>100) print $1}’ /tmp/donors
awk -F’[:]’ ‘{if($5<85) print $1","$2}’ /tmp/donors
awk -F’[:]’ ‘{if($3 < 150 && $3 > 75) print $1}’ /tmp/donors
awk -F’[:]’ ‘{if($3+$4+$5 < 800) print $1}’ /tmp/donors
awk -F’[:]’ ‘{if( ($3+$4+$5)/3 > 200) print $1","$2}’ /tmp/donors
awk -F’[: ]’ ‘$3!~/(916)/ { print $1}’ /tmp/donors
awk -F’[:]’ ’ { print NR $1}’ /tmp/donors
awk -F’[:]’ ’ { print $1","$3+$4+$5}’ /tmp/donors

输入输出重定向

<
tr a-z A-Z < /tmp/student_records
转换为大写
>
2>
标准错误输出重定向
find /tmp -name ‘*.cpp’ 2> /dev/null
忽略错误

管道

who | grep -E -o ‘^s20.*(10.’ | wc -l
-o 只显示匹配的部分
awk and&&

df /var|sed -n ‘2p’| awk ‘{print $5}’|sed ‘s/%//g’

ln -s 源文件 链接文件

进程

&的意思是在后台运行,当你在执行 ./start.sh & 的时候
date;echo “hello”
并行
(date;pwd) > result

jobs -l
查看后台进程

进程是资源调度和分配的基本单位
nice -n 3 sort /tmp/databook设置进程优先级
僵尸进程

type echo
内部命令
echo,cat
这些命令包含在shell进程中

外部命令
grep,rm
来自可执行文件
在这里插入图片描述
ps -l显示详细信息
ps -el显示所有进程
pstree

top查看进程使用状况(动态)

信号量
9表示sure kill,kill -9 pid
15表示kill
2表示ctrl c
对于信号量,进程可以忽略,执行自定义命令
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

退出连接会发送一个值为1的信号量,表示子进程挂起
nohup 退出连接不停止进程

crond任务调度

crontab

  1. -e 编辑crontab定时任务
  2. -l 查询crontab任务
  3. -r 删除当前用户所有的crontab任务

设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab -e命令
接着输入任务到调度文件

*/1 * * * *
第一个* 一小时当中的第几分钟 0-59
第二个* 一天当中的第几小时 0-23
一个月当中的第几天 1-31
一年中的第几月 1-12
一周当中的星期几 0-7

* 任何时间
,不连续时间
- 连续的时间范围,代表在周一到周六的凌晨5点0分执行命令
*/n 每隔多久执行一次

设置定时任务
(1)创建脚本
(2)crontab -e

计划任务
at 23:00
ctrl d退出编辑
crontab -e
minute hour dom month dow
0 1 * * 6 backup
凌晨3点每月1号和15号
0 3 1,15 * * calculate

Shell脚本

PATH=$PATH:.
bash hello.sh
source
.

#!/bin/bash
读入命令
env环境变量
export name
export TOMCAT_HOME=/opt/tomcat
变为环境变量
source /etc/profile(刷新全局变量)
echo $变量名
.
不会新建新的进程,直接由当前的父进程执行shell文件的命令,因此脚本改变了环境变量

多行注释
:<<!
内容
!

Shell 变量

#!/bin/bash
A=100
echo A=$A
readonly B=2(不能unset)

delare -i b声明b变量为整型
b=$b+1
echo $b
b=`date`
unset b

/opt/prevar.sh &

$0 表示现在执行的哪个脚本
$1-$9 表示输入脚本的第一到第九个参数
$* 参数整体
$@ 参数列表
$# 参数个数
$? 函数返回值?0表示成功,1表示失败
$$ 返回pid
常见的shell变量

运算符

RES2= [ ( 2 + 3 ) ∗ 4 ] e c h o " r e s = [(2+3)*4] echo "res= [(2+3)4]echo"res=RES2"

g++ -o hello hello.c
./hello
执行c程序
获取主函数返回值
echo $?
命令置换
usage=

条件判断
  1. = 字符串比较
  2. 两个整数的比较
    -lt 小于less than
    -le 小于等于 less equil
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于

基本输入输出
read -p “Please input your name” name
echo “Hello,$name”
echo -e “zhangsan\tlisi”
特殊字符处理
echo -n “Hello,$name”
不换行

if [ $grade -ge 60 ] ;
then
echo “pass”
else
echo “fail”
fi
方框两端一定要有空格
if [ $grade -ge 90 ]
then
echo “excellent”
elif [ $grade -ge 60 ]
then
echo “pass”
else
echo “fail”
fi
exit 0

for name in zhangsan lisi wangwu
do
echo “Hello,$name”
done

./for.sh zhangsan lisi wangwu
for 的值取程序输入的值

prefix=10.188.2.
for i in {250…254}
do
ping -c 1 $prefix$i >& /dev/null
if [ $? -eq 0 ]
then
echo $prefix$i
fi
done

for i in `cat ip.txt`

read passwd
while [ $passwd != ‘007’ ]
do
read passwd
done
echo “congratulations”


  1. CE ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值