Linux - 标准输入标准输出,重定向

目录

编译型语言和解释型语言

c语言,shell,cpython三种解释器的速度比较

安装pypy

python的字节码文件

wget软件

重定向和文件目录高级操作

标准输入和标准输出

交互式设置密码:

非交互式设置密码:

新建用户,密码练习:

如何判断用户是否创建成功?

如何想知道整个linux系统里面有哪些用户呢?

 为什么不在/home下面查看有哪些用户?

重定向:

ulimit 查看linux内核的限制参数

使用w查看linux用户登录情况


编译型语言和解释型语言

c语言编译型 --》一次性编译成二进制文件,然后去执行二进制文件,跟源代码文件没有关系了,c语言里面源代码文件进行了修改,必须要重新编译,然后去执行新的二进制文件。

python解释型语言 --》一边编译一边执行,只要源代码有更新会根据源代码一行一行解释

c的速度比python快,因为c语言是把文件全部编译为二进制文件然后再执行,所以速度快,python是一边编译一边执行,所以速度慢一点

pypy是用python的解释器

cpython是使用c语言写的解释器

cpython是默认的解释器

pypy 比 cpython快4.2倍? -->来自pypy官方网站

必须使用最新版本来测试,测试后的速度确实比python3快4倍左右

依据:pypy.org   --》pypy的官方网站

------------------------------------------------------------------------------------------------------------------------------

c语言,shell,cpython三种解释器的速度比较

先分别创建用c语言,shell,和python写的三个脚本

内容都是:输出:“hello,world”

c语言:

C语言的脚本需要先编译再执行

###########################################################################

[root@localhost jieshiqi]# gcc -o hello hello.c

[root@localhost jieshiqi]# time ./hello

hello,world

real 0m0.001s

user 0m0.001s

sys 0m0.000s

###########################################################################

------------------------------------------------------------------------------------------------------------------------------

shell:

###########################################################################

[root@localhost jieshiqi]# time bash hello.sh

hello,world

real 0m0.003s

user 0m0.000s

sys 0m0.002s

###########################################################################

------------------------------------------------------------------------------------------------------------------------------

python3(默认cpython)

###########################################################################

[root@localhost jieshiqi]# time python3 hello.py

hello,world!

real 0m0.031s

user 0m0.023s

sys 0m0.008s

###########################################################################

------------------------------------------------------------------------------------------------------------------------------

速度比较:

c语言: 0.001s

shell: 0.003s

python:0.031s

可以看出,c确实比python快

# shell的底层很多也是用c来写的,所以速度也比较快

------------------------------------------------------------------------------------------------------------------------------

安装pypy

首先安装epel-release --》epel源

epel是一个丰富的第三方软件库

centos里面可以使用的源:

源:软件的来源,软件仓库,大量的软件可以去下载使用

官方源:BASE源

第三方的源:epel源

[root@localhost lianxi]# yum install epel-release -y

然后安装pypy

[root@localhost jieshiqi]# yum install pypy -y

------------------------------------------------------------------------------------------------------------------------------

python的字节码文件

python文件执行 有一个中间过程

python文件执行是会生成一个字节码文件,相当于一个已经编译好的二进制文件

以.pyc结尾的文件就是字节码文件,起到加速的作用

如何看到以.pyc结尾的字节码文件?

需要在python3中导入这个python文件

###########################################################################

[root@localhost jieshiqi]# python3

Python 3.6.8 (default, Nov 16 2020, 16:55:22)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import hello.py --》导入python文件

hello,world!

Traceback (most recent call last):

###########################################################################

然后就可以看到字节码文件了

[root@localhost jieshiqi]# ls -a

. .. hello hello.c hello.py hello.sh __pycache__

[root@localhost jieshiqi]# cd __pycache__/

[root@localhost __pycache__]# ls

hello.cpython-36.pyc --》字节码文件

###########################################################################

wget软件

wget是linux里面的下载软件,类似于windows里面的迅雷

默认下载的软件放在当前文件夹下面

curl是linux下面字符界面的浏览器,也可以下载软件

curl和wget的区别

1.curl是浏览器,wget是纯下载

2.curl是默认安装,wget没有安装

------------------------------------------------------------------------------------------------------------------------------

重定向和文件目录高级操作

标准输入和标准输出

标准输入(STDIN):standard input

给计算机里输入内容地方式:键盘输入,语音,图像,图形等

规定从键盘输入是最标准的

标准输出(STDOUT):standard output

程序执行完成后,需要反馈

反馈到屏幕是最容易让人知道的

规定输出到屏幕是最标准的

正确的标准输出 --》都是输出到屏幕

错误的标准输出

标准输入和标准输出都是人

------------------------------------------------------------------------------------------------------------------------------

交互式设置密码:

[root@localhost lianxi]# useradd zhaojunjie

[root@localhost lianxi]# passwd zhaojunjie

更改用户 zhaojunjie 的密码 。

新的 密码:

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

------------------------------------------------------------------------------------------------------------------------------

非交互式设置密码:

[root@localhost lianxi]# echo 123456|passwd zhaojunjie --stdin

更改用户 zhaojunjie 的密码 。

\passwd:所有的身份验证令牌已经成功更新。

--stdin 是passwd命令的选项

作用是告诉passwd命令 管道符号送来的内容可以作为标准输入使用

如果不接--stdin的话会报错

[root@localhost lianxi]# echo 123456|passwd zhaojunjie

更改用户 zhaojunjie 的密码 。

新的 密码:无效的密码: 密码少于 8 个字符

重新输入新的 密码:密码更改取消。

新的 密码:密码更改取消。

新的 密码:密码更改取消。

passwd: 已经超出服务重试的最多次数

[root@localhost lianxi]#

------------------------------------------------------------------------------------------------------------------------------

新建用户,密码练习:

脚本:

接受用户输入的用户名,帮助新建用户,并且设置密码

可以使用shell或者python来完成

需求分析:

接受用户输入:read

新建用户:useradd

设置密码:passwd

脚本名:create_user_pwd.sh

###########################################################################

[root@localhost home]# cat /lianxi/script/create_user_passwd.sh

#!/bin/bash

read -p "请输入要新建的用户名:" user

useradd $user

read -p"请输入密码:" passwd

echo $passwd | passwd $user --stdin

echo "accessfully!"

###########################################################################

如何判断用户是否创建成功?

使用id命令

如果用户新建成功会显示:

[root@localhost home]# id kimi

uid=1014(kimi) gid=1014(kimi) 组=1014(kimi)

如果用户不存在会显示:

[root@localhost home]# id kimi21

id: kimi21: no such user --说明用户不存在。

shell脚本在执行的时候是从上而下,一条一条的执行,

中间哪条命令执行失败,后面的命令也会执行

------------------------------------------------------------------------------------------------------------------------------

如何想知道整个linux系统里面有哪些用户呢?

查看/etc/passwd文件,

一行代表一个用户

[root@localhost home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
xiaowang:x:1000:1000::/home/xiaowang:/bin/bash
chenhang:x:1001:1001::/home/chenhang:/bin/bash
zhnagjian:x:1002:1002::/home/zhnagjian:/bin/bash
zhangjian:x:1003:1003::/home/zhangjian:/bin/bash
wangshenghu:x:1004:1004::/home/wangshenghu:/bin/bash
yalin:x:1005:1005::/home/yalin:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
lilanqing:x:1006:1006::/home/lilanqing:/bin/bash
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
califeng:x:1007:1007::/home/califeng:/bin/bash
cali123:x:1008:1008::/home/cali123:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
shimengmeng:x:1010:1010::/home/shimengmeng:/bin/bash
zhouyiwei:x:1011:1011::/home/zhouyiwei:/bin/bash
wangyi:x:1012:1012::/home/wangyi:/bin/bash
zhaojunjie:x:1013:1013::/home/zhaojunjie:/bin/bash
kimi:x:1014:1014::/home/kimi:/bin/bash

 为什么不在/home下面查看有哪些用户?

因为有些用户新建可能没有建家目录

例如:在新建用户的时候 加一个选项 -r

[root@localhost home]# useradd -r kimi2

[root@localhost home]# ls /home

cali123 kimi shimengmeng wangyi zhouyiwei

califeng lilanqing wangshenghu zhaojunjie

可以看到家目录下面并没有kimi2这个用户

还有可能在新建用户的时候将家目录放到别的目录下面了

-d 选项,指定家目录的位置,默认放在/home下,可以是其他地方

[root@localhost home]# useradd -d /huashan linhucong

[root@localhost home]# id linhucong

uid=1015(linhucong) gid=1015(linhucong) 组=1015(linhucong)

[root@localhost home]# su - linhucong

[linhucong@localhost ~]$ pwd

/huashan

- 会加载新用户的环境变量,不使用上一个用户的环境变量

那么我们在家目录里面也找不到该用户

###########################################################################

这时我们的脚本有一个bug,就是当我们在输入一个已经存在的用户时候,会出错,提示用户已经存在,但是密码还是会继续修改,因为shell脚本从上往下执行,执行失败也会继续执行,所以我们要加一个if判断,判断用户是否存在

###########################################################################

#!/bin/bash

read -p "请输入要新建的用户名:" user

# 判断用户是否已经存在

# 无论是正确的还是错误的都输出到黑洞文件

if id $user &>/dev/null

then

echo "用户$user存在!"

else

useradd $user

read -p"请输入密码:" passwd

echo $passwd | passwd $user --stdin

echo "accessfully!"

fi

###########################################################################

$> /dev/null

/dev/null是一个特殊的文件,任何的内容重定向到这个文件,都不会保存

重定向:

改变命令的输出方向,本来标准输出往屏幕上输出,重定向后命令不再往屏 幕输出,而是输出到文件里,重定向不会影响命令的返回值的

无论正确的还是错误的重定向到黑洞文件 /dev/null

三个重要的链接文件文件:

###########################################################################

[root@localhost /]# ll /dev/std*

lrwxrwxrwx. 1 root root 15 2月 5 09:27 /dev/stderr -> /proc/self/fd/2

lrwxrwxrwx. 1 root root 15 2月 5 09:27 /dev/stdin -> /proc/self/fd/0

lrwxrwxrwx. 1 root root 15 2月 5 09:27 /dev/stdout -> /proc/self/fd/1

###########################################################################

linux操作系统的理论知识:

/proc : 存放linux内核信息的,外面的用户可以通过访问/proc文件夹·去了解内核里面的信息

processes 处理

 

内核 kernel : linux系统内部最核心的软件

1.对cpu进行调度管理

2.对内存进行

文件描述符 fd

linux内核给每个进程创建了一个文件描述符表,这个表里记载了这个进程所打开的所有文件,为了方便进程知道自己打开了哪些文件,就给每个文件进行了编号,这个编号就是文件描述符,而且进程对文件进行读写操作的时候,就直接使用编号了,不再使用文件名。

内核kernel利用文件描述符来访问文件,文件描述符是非负整数

linux里面一起切皆文件

任何硬件都会有一个文件和它对应

/dev/stdin --》/proc/self/fd/0 --》/dev/pts/3

/dev/pts/3 -->终端设备的文件名

0 --》标准输入 --》 /dev/pts/3

1 --》标准正确输出 --》 /dev/pts/3

2 --》标准错误输出 --》 /dev/pts/3

linux 操作系统默认允许一个进行只能打开1024个进程

所有默认的文件描述的范围:0~1024

使用

------------------------------------------------------------------------------------------------------------------------------

ulimit 查看linux内核的限制参数

[root@localhost lianxi]# ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 3795

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

使用w查看linux用户登录情况

------------------------------------------------------------------------------------------------------------------------------

[root@localhost lianxi]# w 查看linux登录的用户的情况

15:08:41 up 3:52, 3 users, load average: 0.03, 0.03, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 09:27 5:40m 0.26s 0.26s -bash

root pts/0 192.168.44.1 09:28 4:00m 0.15s 0.15s -bash

root pts/1 192.168.44.1 13:40 1.00s 0.71s 0.03s w

------------------------------------------------------------------------------------------------------------------------------

15:08:41 :当前的时间

up 3:52, : 已经开机启动的时间

3 users :三个用户登录

TTY : 终端类型 terminal type

终端:面向最终用户的端口

tty1:直接登录操纵的第1个终端 --》真正的终端

linux里面允许最多6个可以直接登录的终端

tty1 - tty6

ctrl + F1 - F6 切换终端

6个终端,一个终端卡住了可以换一个终端登录

pts文件夹下是远程登录过来的终端类型 --》仿终端,,模拟的终端

pts/1 --》 /dev/pts 下面的第一个文件夹

what : 用户登录进入linux系统里面正在使用的命令

FROM: 用户从哪里登录过来的

192.168.44.1 从这个ip地址远程登录过来的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值