导航:首页 > 编程系统 > linuxstdin用法

linuxstdin用法

发布时间:2025-01-09 21:18:59

linux的stty命令详解

linux下的stty命令主要功能是改变和打印终端设置的常用命令,下面由我为大家搜集整理了linux的stty命令详解的相关知识,希望对大家有帮助!

linux的stty命令详解

stty是Linux下改变和打印终端设置的常用命令。

语法

stty(选项)(参数)

参数

1.打印终端行设置

-a,--all 以人可读的方式打印所有当前设置;-a参数比单独的stty命令输出的终端信息更详细

-g,--save 以stty可读的方式打印当前所有设置

-F,--file=DEVICE 打开并使用特定的设备((DEVICE)以代替标准输入(stdin)

--help 显示帮助并退出

--version 显示版本并退出

linux的stty命令用法

1. stty size 打印终端行数和列数

2,在命令行下禁止输出小写

stty olcuc #开启

stty -olcuc#恢复

3,打印出终端的行数和列数

stty size

4,改变ctrl+D的方法:

stty eof "string"

系统默认是ctrl+D来表示文件的结束,而通过这种方法,可以改变!

5,屏蔽显示

stty -echo #禁止回显

stty echo #打开回显

测试方法:

stty -echo;read;stty echo;read

6,忽略回车符

stty igncr #开启

stty -igncr#恢复

7 .利用它设置我们的串口打印操作信息。

stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb -echo

解释:通过stty设置/dev/ttyS0串口, 波特率为115200 ,数据位cs8,奇偶校验位-parenb,停止位-cstopb,同时-echo禁止终端回显

Ⅱ 在linux上单独执行屏幕有输出,重定向后没有任何输出了。 myprog > 1.log 或 myprog | tee 1.log

单独的重定向操作会隐藏原来的输出,可以配合 tee 命令来使用,具体用法请网络,简版单用例如下

输出到权 1.log

myprog|tee1.log

追加到 1.log

myprog|tee-a1.log

Ⅲ Linux下的并行神器——parallel

GNU Parallel的输入源支持文件、命令行和标准输入(stdin或pipe)。

当然,若不想像上面那样进行组合,可使用 --xapply 参数从每一个源获取一个参数(或文件一行),这个参数有些类似R中的函数,具有广播作用——如果其中一个输入源的长度比较短,它的值会被重复。

GNU Parallel可以通过 --arg-sep 和 --arg-file-sep 指定分隔符替代 ::: 或 ::::,当这两个符号被其它命令占用的时候会特别有用。

GNU Parallel默认把一行做为一个参数:使用 \n 做为参数定界符。可以使用 -d 改变:

GNU Parallel支持通过 -E 参数指定一个值做为结束标志:

GNU Parallel使用 --no-run-if-empty 来跳过空行:

如果parallel之后没有给定命令,那么这些参数会被当做命令:

此外,命令还可以是一个脚本文件,一个二进制可执行文件或一个bash的函数(须用 export -f 导出函数)

GNU Parallel支持多种替换字符串,默认使用 {},使用 -I 改变替换字符串符号 {}。其最常见的字符串替换包括以下几种: {.} ,去掉扩展名; {/} ,去掉路径,只保留文件名; {//} ,只保留路径; {/.} ,同时去掉路径和扩展名; {#} ,输出任务编号。同时对于每一个字符串替换都可以自己指定符号: -I 对应 {} ; --extensionreplace 替换 {.} ; --basenamereplace 替换 {/} ; --dirnamereplace 替换 {//} ; --basenameextensionreplace 替换 {/.} ; --seqreplace 替换 {#} 。

同时,如果有多个输入源时,可以通过 {编号} 指定某一个输入源的参数:

使用 --header 把每一行输入中的第一个值做为参数名。

使用 --colsep 把文件中的行切分为列,做为输入参数。

--xargs 会在一行中输入尽可能多的参数(与参数字符串长度有关),通过 -s 可指定一行中参数的上限。

为了获得更好的并发性,GNU Parallel会在文件读取结束后再分发参数。
GNU Parallel 在读取完最后一个参数之后,才开始第二个任务,此时会把所有的参数平均分配到4个任务(如果指定了4个任务)。
第一个任务与上面使用 --xargs 的例子一样,但是第二个任务会被平均的分成4个任务,最终一共5个任务。(奇怪的是我的结果与官网教程的结果不一样)

替换字符串可以是输出字符的一部分,使用 -m 参数表示每个job不重复输出“背景”(context), -X 则与 -m 相反,会重复输出“背景文本”,具体通过下面几个例子进行理解:

使用 -N 限制每行参数的个数,其中 -N0 表示一次只读取一个参数,且不输入这个参数(作为计数器来使用)。

如果命令行中包含特殊字符,就需要使用引号保护起来。
perl脚本 'print "@ARGV\n"' 与linux的 echo 的功能一样。

使用GNU Parallel运行这条命令的时候,perl命令需要用引号包起来,也可以使用 -q 保护perl命令:

使用 --trim 去除参数两头的空格:

使用 --tag 以参数做为输出前缀,使用 --tagstring 修改输出前缀:

--dryrun 作用类似于echo:

--verbose 则在运行之前先打印命令:

一般来说,GNU Parallel 会延迟输出,直到一组命令执行完成。使用 --ungroup ,可立刻打印输出已完成部分。

使用 --ungroup 会很快,但会导致输出错乱,一个任务的行输出可能会被另一个任务的输出截断。像上例所示,第二行输出混合了两个任务: '4-middle' '2-start'。使用 --linebuffer 避免这个问题(稍慢一点):

强制使输出与参数保持顺序 --keep-order/-k :

GNU Parallel可以把每一个任务的输出保存到文件中,临时文件默认保存在 /tmp 中,可以使用 --tmpdir改变(或者修改 $TMPDIR):

输出文件可以有结构的保存 --results ,输出文件不仅包含标准输出(stdout)也会包含标准错误输出(stderr):

在使用多个变量的时候会显示很有用:

使用 --jobs/-j 指定并行任务数。

通过使用 --interactive 在一个任务执行之前让用户决定是否执行。

当job有大量的IO操作时,为避免 “惊群效应” ,可使用 --delay 参数指定各个job开始的时间间隔。

若已知任务超过一定时间未反应则为失败则可以通过 --timeout 指定等待时间避免无谓的等待。GNU parallel能计算所有任务运行时间的中位数,因此可以指定时间为中位数的倍数关系。

GNU parallel有多种方式可用来动态的显示任务进度信息,如:

使用 --joblog 参数能够生成各个任务的日志文件:

通过 --resume-failed 参数可以重新运行失败的任务; --retry-failed 的作用与 --resume-failed 类似,只是 --resume-failed 从命令行读取失败任务,而 --retry-failed 则是从日志文件中读取失败任务:

GNU parallel支持在某一情况下(如第一个失败或成功时,或者20%任务失败时)终止任务,终止任务又有两种类型,其一为立即终止(通过 --halt now 指定),杀死所有正在运行的任务并停止生成新的任务,其二为稍后终止(通过 --halt soon 指定),停止生成新任务并等待正在运行任务完成。

GNU parallel还支持在任务失败后重试运行 --retries :

关于终止信号的高级用法参考 官方入门文档 。

GNU parallel能够在开始一个新的任务前检查系统的负载情况防止过载(通过 --load 可指定负载),同时还能检查系统是否使用了交换空间(swap)(通过 --noswap 限制使用swap)。

同时,对于某些占用内存较多的程序,parallel会检查内存只有内存满足时才启动任务(通过 --memfree 指定需要内存大小),而且在启动任务后内存不够50%时会杀掉最新开始的任务,直到这个任务完成再重新开始那些杀死的任务。

还可以通过 --nice 来指定任务的优先级。

可使用 -S host 来进行远程登陆:
parallel -S username@$SERVER1 echo running on ::: username@$SERVER1

GNU parallel 文件传输使用的是rsync。

更多远程操作参见入门文档。

--pipe 参数使得我们可以将输入(stdin)分为多块(block),然后分配给多个任务多个cpu以达到负载均衡,最后的结果顺序与原始顺序一致。使用 --block 参数可以指定每块的大小,默认为1M。

如果不关心结果顺序,只想要快速的得到结果,可使用 --round-robin 参数。没有这个参数时每块文件都会启动一个命令,使用这个参数后会将这些文件块分配给job数任务(通过 --jobs 进行指定)。若想分配更为均匀还可同时指定 --block 参数。

参考:
官方文档
GNU Parallel指南

Ⅳ 文件管理与重定向

Linux的 文件系统分层结构标准 :FHS Filesystem Hierarchy Standard

参考文档: http://www.pathname.com/fhs/ 其中对每个文件目录有详细说明

/ :根目录,最顶级目录,也是 管理员的家目录

/boot:引导文件、内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此

/bin: 所有用户 使用的基本命令(二进制文件)

/sbin:管理类的基本命令 (仅由root执行)

​ /bin与/sbin:不能关联至独立分区,OS启动即会用到的程序

/etc 配置文件目录

/home/USERNAME:各个用户家目录,存放用户数据

/proc: 用于输出内核与进程信息相关的虚拟文件系蔽亮统

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

/usr: universal shared, read-only data (通用只读文件)
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share

/var: variable data files (可变数据)
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据

/dev:设备文件及特殊文件存储位置

/tmp:临时文件存储位置

/srv:系统上运行的服务用到的数据

/media:便携式移动设备挂载点(优盘)
/mnt:临时文件系统挂载点

/opt:第三方应用程序的安装位置

注意:CentOS 7 以后版本目录结构变化 (以下两者相同)

/bin 和 /usr/bin
/sbin 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 /usr/lib64

范例:

二进早并困制程陆念序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件: /lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件: /etc, /etc/DIRECTORY, /usr/local/etc
帮助文件: /usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

用 ll 命令查看首字母:

(-) 普通文件
d 目录文件
b 块设备
c 字符设备
l 符号链接文件
p 管道文件pipe
s 套接字文件socket

每个shell和系统进程 都有一个当前的工作目录(current work directory,简称CWD)

显示当前shell CWD的绝对路径: 使用pwd命令 (printing working directory)

范例:

[图片上传失败...(image-8b8689-1596285623724)]

基名 :basename,只取文件名而不要路径
目录名 :dirname,只取路径,不要文件名

范例:

命令 cd : change directory 改变目录(可以使用绝对或相对路径)

选项:-P 切换至物理路径

切换至父目录 : cd ..
切换至当前用户家目录: cd
切换至上一个工作目录 : cd -

相关的环境变量:
PWD:当前目录路径
OLDPWD:上一次目录路径

文件相关信息:metadata(属性,元数据), data(数据内容)

每个文件有三个时间戳: (touch创建已存在的文件时,刷新3个时间戳)
access time 访问时间,atime,读取文件内容
modify time 修改时间,mtime,改变文件内容(数据)
change time 改变时间,ctime,元数据发生改变(属性)

mtime的改变必然引起ctime的改变

执行ll命令默认显示mtime

范例:

用来匹配符合条件的多个文件,方便批理管理文件

通配符采有特定的符号,表示特定的含义,此特符号称为 元字符

范例:只显示文件夹

别外还有在Linux系统中预定义的字符类:命令man 7 glob可以查看

使用以上通配符,需要双重中括号!!!!!!!!!!!!!!

{a..e} 与 [a - e] 排序内容不相同!!!

范例:

范例: 创建一个以昨天日期命名的.log文件

cp 命令格式:

默认cp=cp -i,提示是否覆盖

范例:

1、将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见

2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求 保留原有权限

mv 命令可以实现文件或目录的 移动和改名

常用选项:
-i 交互式
-f 强制
-b 若目标存在,覆盖前先备份

利用 rename 可以 批量修改文件名

范例: (改名对象打不打引号都可以)

使用rm 命令可以删除文件

常用选项
-i 交互式
-f 强制删除
-r 递归,对目录进行操作时必须使用
--no-preserve-root 用来删除根目录

范例:删除特殊文件

rm虽然删除了文件,但是被删除的文件仍然 可能被恢复
在安全要求较高的场景下,可以使用shred安全删除文件

补充技巧: 防止rm造成严重后果,定义别名进行备份 (修改配置文件永久有效)

配置文件目录:/root/.bashrc

显示目录树 tree

常见选项:
-d: 只显示目录
-L level: 指定显示的层级数目
-P pattern: 只显示由指定wild-card pattern匹配到的路径

常见选项:
-p: 存在于不报错,且可自动创建所需的各目录 (用于一次创建多层目录)
-v: 显示详细信息
-m MODE: 创建目录时直接 指定权限!!!!!!!!!!

rmdir 只能删除空目录 ,如果想删除非空目录,可以使用rm -r 命令递归删除目录树

常见选项:
-p 递归删除父空目录
-v 显示详细信息

练习
(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a,
/testdir/dir1/y/b

(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b

(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

inode = (index node)

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的 元数据
这些元数据存放在 inode表中

inode 表 中有很多条记录组成, 第一条记录保存元数据,包括以下信息:

inode number 节点号(身份证号)
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据

一般情况下inode表会占用系统磁盘inode总量的1%

节点号表示 文件的唯一编号 !!!整个系统中 节点号是有限的
当节点号用尽时,即使还有储存空间,也会提示无剩余空间 !!!!!!

目录 是个特殊文件,目录的元数据保存了 目录中文件的列表及节点号的对应关系!!!

系统引用文件是 使用 inode号
实际用户是 通过文件名 来引用一个文件
目录是 目录下的文件名和文件inode号之间的映射

执行cp命令:

执行rm 命令:

执行mv命令:

硬链接本质上就 给一个文件起一个新的名称 ,实质是同一个文件

范例:对文件f1.log创建新的名称f1link.log,两者inode都是132

硬链接特性

目录的链接数至少为2,因为目录中的 . 即为自身
创建子目录会导致链接数增加!

一个符号链接指向另一个文件, 就像windows中的快捷方式

软链接特点:

关于源文件相对路径:只有跨分区创建软链接时才有此问题!

案例一:
提示空间不足 No space left on device,但是 df 查看磁盘空间剩余很多

案例二:
提示储存空间不足,删除无用的大文件后,空间并未释放,什么原因?如何解决?

读入数据:Input
输出数据:Output

打开的文件都有一个 fd : file descriptor (文件描述符)

Linux给程序提供 三种 I/O 设备

I/O重定向:将默认的输入,输出或错误 对应的设备进行修改,指向新的目标

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端

支持的操作符号包括:

把STDOUT重定向到文件或其他终端

重定向到文件时,若文件不存在则创建,若文件存在则覆盖内容
再次重定向到同一文件,内容再次覆盖

若 > 符号之前不输入命令,则效果为生成空文件或清空目标文件
是迅速清空文件内容的一种方式

借助/dev/null也可实现同样的功能

磁盘空间不足时,大文件被占用不能停,而且rm删除无法立即腾出空间,应使用 > 或/dev/null >

把STDERR重定向到文件或其他终端

set - C 命令, 禁止将内容覆盖已有文件,但可追加 (此时>|可以强制覆盖)
set + C 命令,允许覆盖

强制覆盖

用 ( )或者{ }合并多个命令的out或err, 注意使用花括号的格式!!!

使用 < 来重定向标准输入:从文件中导入STDIN,代替当前终端的输入设备

使用 单行或多行重定向 来创建新文件,并输入指定内容

同时存在 < > ,优先进行 输入运算

只能对新文件进行!!!!!

只能对新文件进行!!!!!

使用 "<<终止词" 命令 把接下来输入的多行内容进行重定向,
直到终止词位置之前的所有文本都发送给STDIN

终止词 可以是任何一个或多个符号,
比如:!,@,$,EOF(End Of File),mage等, 其中EOF比较常用

易错点: tr命令实现的是 单个字符一一对应的转换关系!!!!

基本格式:

常见用途: 全局大小写转换

-d 删除 所有含有SET1的字符

-c 取字符集的补集,即 取反(一般与-d搭配使用)

-s 把 连续重复的单个字符 以单独一个字符表示,即 去重

管道(使用符号“|”表示) 用来连接多个命令

功能说明:

注意:STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现,格式如下

因此, 当不确定命令的输出结果,或者已知结果中存在error时 ,应该使用上述命令

范例:将 /home 里面的 文件打包 ,不生成文件,而是传送到 stdout,经过管道后,
将 tar -cvf - /home 传送给后面的 tar -xvf - , 最后的这个 - 表示 取前一个命令的 stdout

利用tee命令 可以既重定向到文件,又显示在屏幕

tee的功能:

基本用法

若后面不加命令2

Ⅳ linux中,ls >filename 与ls 1>filename 有什么区别

一、ls > filename 与 ls 1> filename 的作用是相同的

都是将标准输出也就是ls命令的结果重定向到 filename 文件中,并不在屏幕上输出!

二、linux重定向的设备代码

  1. 标准输入(stdin) 代码为 0 ,实际映射关系:/dev/stdin -> /proc/self/fd/0

  2. 标准输出(stdout)代码为 1 , 实际映射关系:/dev/stdout -> /proc/self/fd/1

  3. 标准错误输出(stderr)代码为 2 ,实际映射关系: /dev/stderr ->/pro/self/fd/2

#举例:正常输出和错误信息都不显示,把标准输出和标准错误都重定向到/dev/null

# ls 1>/dev/null 2>/dev/null

三、linux重定向的符号意义

1、> 和 < 分别代表重定向的方向,是从左到右还是从右到左

2、>> 和 << 代表追加,也就是不改变重定向目标文件原有的内容,追加在后面。

#举例: 将执行 "ls -d" 命令的结果追加到文件lsd.txt中 ls -d >> lsd.txt

3、>&n 使用系统调用 p (2) 复制文件描述符 n 并把结果用作标准输出;

#举例: 让标准错误输出和标准输入一样都被存入到文件中 ls -d > test.txt 2>& 1

4. <&n 标准输入复制自文件描述符 n;

5. n<&- 表示将 n 号输入关闭

6. <&- 表示关闭标准输入(键盘)

7. n>&- 表示将 n 号输出关闭

8. >&- 表示将标准输出关闭

#举例: 关闭 1 ,2 文件描述符

ls test.sh test1.sh 1>&- 2>&-

熟练记住前三个重定向符号的用法就可以了。

Ⅵ linux标准输入输出

linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。

STDIN是标准输入,默认从键盘读取信息;

STDOUT是标准输出,默认将输出结果输出至终端;

STDERR是标准错误,默认将输出结果输出至终端。

由于STDOUT与STDERR都会默认显示在终端上,为了区分,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。

2>&1,指将标准输出、标准错误指定为同一输出路径

举栗子:

eg1:cat >>filetest 2>&1 <<END-------建立filetest文件,当输入遇到END时,退出

eg2:

1、以普通用户执行find /etc -name passwd命令,默认会将命令的执行结果(STDOUT)与错误信息(STDERR)都输出至终端显示器。

2、执行find /etc -name passwd >find.out 2>find.err,会将STDOUT与STDERR分别存放至find.out和find.err中。该命令也可以写成下面三种形式

          find /etc -name passwd 1>find.out 2>find.err

          find /etc -name passwd 2>find.err >find.out

          find /etc -name passwd 2>find.err 1>find.out

3、若要将所有标准输出及标准错误都输出至文件,可用&表示全部1和2的信息,eg:

          find /etc -name passwd &>find.all 或 find /etc -name passwd >find.all 2>&1

4、2>&1 ---标准错误重新定向到标准输出

5、用法:find /etc -name passwd &2>&1 |less

可分解成

find /etc -name passwd & 表示前面的命令放到后台执行。

2>&1 |less 表示将标准错误重定向至标准输出,并用less进行分页显示

阅读全文

与linuxstdin用法相关的资料

热点内容
微信文爱聊天截图图片 浏览:427
糖果小号密码查看工具 浏览:191
pm一般做什么编程 浏览:937
linux共享文件给mac 浏览:428
ps另存为时找不到文件 浏览:818
iphone6s朋友圈视频没声音 浏览:728
win10系统工具文件夹 浏览:862
微信扔出去的怎样找回来 浏览:744
编程怎么录视频 浏览:470
东方财富app解套率怎么计算 浏览:74
win10系统为excel文件在哪里 浏览:578
字幕文件哪个网站下载 浏览:745
app怎么推广推广 浏览:674
小鸟壁纸哪个文件夹删不掉 浏览:419
闺蜜圈app怎么样 浏览:931
新版天猫app如何查看详情 浏览:390
sql数据库同步 浏览:492
网络面板线错了怎么办 浏览:343
cs6画笔工具在哪 浏览:290
微信删了数据怎么恢复 浏览:162

友情链接