| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux - 标准输入标准输出,重定向 -> 正文阅读 |
|
[系统运维]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文件, 一行代表一个用户
?为什么不在/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地址远程登录过来的 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:55:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |