linux常见指令

我是研究僧i 提交于 2019-11-29 19:00:18

lseek
tar
fcntl
shutdown及其他关机
init
dd
aptitude及其他安装
查找命令which、whereis、locate、find
grep

lseek

首先看下函数: off_t lseek(int fd, off_t offset, int whence);

所需要头文件:

#include <sys/types.h>
#include <unistd.h>

参数:

fd 表示要操作的文件描述符

offset是相对于whence(基准)的偏移量

whence 可以是SEEK_SET(文件指针开始),SEEK_CUR(文件指针当前位置) ,SEEK_END为文件指针尾

返回值:文件读写指针距文件开头的字节大小,出错,返回-1

lseek 主要作用是移动文件读写指针,因此还有以下两个作用

1.拓展文件,不过一定要一次写的操作。迅雷等下载工具在下载文件时候先扩展一个空间,然后再下载的。
https://blog.csdn.net/clamercoder/article/details/38361815空洞文件

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
 
void main()
{
    int add_len = 1024*8;
    int fd=open("test.txt",O_RDWR);
    if(fd == -1)
    {
        perror("open test.txt");
        exit(-1);
    }
    lseek(fd,add_len-1,SEEK_END);
    write(fd,"0",1);
    //程序在执行 lseek() 后,系统文件指针将转移到 结束位置,但是还没有向文件中的输出数据,在执行 write() 后,将向文件中输出一个字节的 '\0' 标志,这是典型的先分配后输出文件数据的使用方法。
以后程序的对文件的操作将调用 lseek() 函数转移到对应的结构体位置,输出对应的数据。
}

2.获取文件大小

//获取文件大小
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
  
void main()
{
    int fd=open("test.txt",O_RDWR);
    if(fd == -1)
    {
        perror("open test.txt");
        exit(-1);
    }
    printf("file len:%d \n",lseek(fd,0,SEEK_END));
    close(fd);
}

tar

https://www.cnblogs.com/wuyuetan/p/3778165.html
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
//特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
//因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
   『 tar -zcvPf tfile sfile』才对喔!

-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
–exclude FILE:在压缩的过程中,不要将 FILE 打包!

范例:
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<–仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc<–打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc<–打包后,以 bzip2 压缩
特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
如果加 j 参数,则以 .tar.bz2 来作为附档名啊~

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

fcntl

fcntl系统调用可以用来对已打开的文件描述符进行各种控制操作以改变已打开文件的的各种属性

#include<unistd.h>
#include<fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd ,struct flock* lock);

fcntl函数功能依据cmd的值的不同而不同。参数对应功能如下:
在这里插入图片描述
具体解释:https://www.cnblogs.com/zxc2man/p/7649240.html

设置:
阻塞:fcntl(fd,F_SETFL,0)
非阻塞:fcntl(fd,F_SETFL,FNDELAY)

shutdown及其他关机

语法
shutdown [-t seconds] [-rkhncfF] time [message]
参数说明:

-t seconds : 设定在几秒钟之后进行关机程序。
-k : 并不会真的关机,只是将警告讯息传送给所有使用者。
-r : 关机后重新开机。
-h : 关机后停机。
-n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
-c : 取消目前已经进行中的关机动作。
-f : 关机时,不做 fcsk 动作(检查 Linux 档系统)。
-F : 关机时,强迫进行 fsck 动作。
time : 设定关机的时间。
message : 传送给所有使用者的警告讯息

实例
立即关机

shutdown -h now

指定5分钟后关机

shutdown +5 “System will shutdown after 5 minutes” //5分钟够关机并显示警告信息

关机命令:

1、halt 立刻关机 最简单的关机命令
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用) -安全地将系统关机
4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
5.reboot 重启命令

https://blog.csdn.net/beckdon/article/details/36379661

init

///etc/inittab文件:
1.  # inittab       This file describes how the INIT process should set up    
2.  #               the system in a certain run-level.    
3.  #    
4.  # Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>    
5.  #               Modified for RHS Linux by Marc Ewing and Donnie Barnes    
6.  #   
7.  # Default runlevel. The runlevels used by RHS are:    
8.  #   0 - halt (Do NOT set initdefault to this)    停机(千万不能把initdefault 设置为0 ) 
9.  #   1 - Single user mode     单用户模式 
10. #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)    多用户,没有 NFS 不联网
11. #   3 - Full multiuser mode    完全多用户模式(标准的运行级) 
12. #   4 - unused    没有用到 
13. #   5 - X11    X11 (xwindow) 图形化界面模式
14. #   6 - reboot (Do NOT set initdefault to this)     重新启动 (千万不要把initdefault 设置为6 )
15. #     
16. id:3:initdefault:  设置默认启动模式3

用法:init命令很简单。直接输入init + 你想要的模式 回车就行。
比如输入: init 0 就是关机
init 3 就是切换到多用户-命令行模式
init 5 就是切换到图形化界面
init 6 就是重启
注意:万万不能把默认设为0或者6。因为0代表关机,6代表重启。如果设置为这两个中的其中一个,就会反复地关机和重启。切记!

dd

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
参数注释:

  1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
  2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
  3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
  4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
  5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
  6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
    注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
  7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  8. conv=conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
    ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swab:交换输入的每对字节
    noerror:出错时不停止
    notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
    二、dd应用实例
    破坏iNand中的bootloader以从SD2启动
    linux下:
    busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
    sync

1.将本地的/dev/hdb整盘备份到/dev/hdd
#dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
#dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
#dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
#dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
#gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
#dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
#dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.备份软盘
#dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)
8.拷贝内存内容到硬盘
#dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
#dd if=/dev/cdrom(hdc) of=/root/cd.iso
10.销毁磁盘数据
#dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

查找命令which、whereis、locate、find

(1)which [-a] cmdname1 cmdname2 …
作用:locate a command,从环境变量PATH中,定位/返回与指定名字相匹配的可执行文件所在的路径
默认只返回找到的第一个(-a依次返回找到的全部可执行文件的路径名)
在这里插入图片描述
(2)whereis [-bmsu] filename1 filename2 …

      作用:locate the binary, source, and manual page files for a command.即:定位/返回与指定名字匹配的二进制文件、源文件和帮助手册文件所在的路径。

      原理:whereis命令首先会去掉filename中的前缀空格和以.开头的任何字符,然后再在数据库(var/lib/slocate/slocate.db)中查找与上述处理后的filename相匹配的二进                         制文件、源文件和帮助手册文件,使用之前可以使用updatedb命令手动更新数据库。

      适用场合:二进制文件、源文件和帮助手册文件路径的查找。

在这里插入图片描述

(3)locate [option] filename1 filename2 …

     作用:find files by name from one or more databases prepared by updatedb. 同whereis指令一样,也是从数据库建立的索引中查找,不同的是该命令查找所有部分匹配的文件,使用之前可以使用updatedb命令手动更新数据库。

     原理:默认情况下(当filename中不包含通配符*),locate会给出所有与*filename*相匹配的文件的路径。

     适用场合:没有文件类型性质的模糊查找(你只记得某个文件的部分名称)。

在这里插入图片描述

(4)find [option] [path1 path2 …] [filename]

      参数说明:

                 时间查找参数:
                             -atime  n: 将n*24小时内access过的文件列出来
                             -ctime   n: 将n*24小时内状态发生改变的文件列出来
                             -mtime  n: 将n*24小时内被修改过的文件列出来
                             -newer file: 把比file还要新的文件列出来

                  名称查找参数:
                             -gid   n:  寻找群组ID为n的文件
                             -group name: 寻找群组名称为name的文件
                             -uid   n:  寻找拥有者ID为n的文件
                             -user name:  寻找拥有者名称为name的文件
                             -name file:    寻找文件名为file的文件(可以使用通配符)

作用:search for files in a directory hierarchy. 从当前目录递归的搜索文件。

      原理:遍历当前工作目录及其子目录,find命令是在硬盘上遍历查找,非常耗硬盘资源,查找效率相比whereis和locate较低。

      适用场合:能用which、whereis和locate的时候尽量不要用find.

在这里插入图片描述

在这里插入图片描述

aptitude及其他安装

aptitude aptitude 是 Debian GNU/Linux 系统中, 非常神奇的的软件包管理器,基于大名鼎鼎的 APT 机制, 整合了 dselect 和 apt-get的所有功能, 并提供的更多特性,特别是在依赖关系处理上。   aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用 的包,整个系统更为干净。   以下是一些常用 aptitude命令,仅供参考。
【Ubuntu】aptitude命令详解 - widiot的博客 - CSDN博客 https://blog.csdn.net/White_Idiot/article/details/58348957

安装aptitude管理软件

$sudo apt-get install aptitude
这样可以使用aptitude来管理软件
如下命令:
$sudo aptitude update 更新软件源
$sudo aptitude search xxx 搜索软件
$sudo aptitude install xxxx 安装软件

apt-get安装卸载存在缺陷-可能卸载不干净https://blog.csdn.net/coco2d_x2014/article/details/75209767

【记录】Ubuntu下简单的软件安装-aptitude安装,samba安装,terminator软件 - lichangtian07的专栏 - CSDN博客
https://blog.csdn.net/lichangtian07/article/details/72835919

grep

linux下查找某字符串通常使用grep指令

grep [选项] ‘str’ filename 在文件filename里查找’str’字符串
https://www.cnblogs.com/nurruden/p/6279412.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!