千家信息网

Linux命令、文件管理

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,Linux命令 文件管理 用户管理一、linux命令 命令语法通用格式 #COMMAND OPTION ARGUMENTS1、命令的含义:发起一命令:就是请求内核将某个二进制程序运行为一个
千家信息网最后更新 2024年09月22日Linux命令、文件管理

Linux命令 文件管理 用户管理

一、linux命令


    命令语法通用格式    #COMMAND OPTION ARGUMENTS
1、命令的含义:发起一命令:就是请求内核将某个二进制程序运行为一个进程; 命令是一个可执行的二进制程序文件,有可能会调用共享文件库。
[root@localhost tmp]# file /bin/ls   -----查看ls文件类型/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0xec333a104e045327c5e3d0ca6dda16c610a210f3, stripped
     程序-->进程     静态-->动态 (有生命周期)
    file  文件: 查询文件类型信息;    ldd:可以查看一个可执行程序依赖的共享库;
[root@localhost tmp]# ldd /bin/lslinux-vdso.so.1 =>  (0x00007fffb81fe000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f7882e89000)libcap.so.2 => /lib64/libcap.so.2 (0x00007f7882c84000)libacl.so.1 => /lib64/libacl.so.1 (0x00007f7882a7a000)libc.so.6 => /lib64/libc.so.6 (0x00007f78826b9000)libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f7882458000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f7882253000)/lib64/ld-linux-x86-64.so.2 (0x00007f78830c3000)libattr.so.1 => /lib64/libattr.so.1 (0x00007f788204e000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7881e32000)
    库: 别人写好的现有的,成熟的,可以复用的代码,可以使用但要遵守许可协议;      静态库的后缀是.a;      动态库(共享库)的后缀是.so,它由gcc加特定参数编译产生;

如何定位共享库文件?新安装一个库之后如何让系统识别?Linux中如何创建静态库和动态库,以及使用它们?

详细可参考: https://www.cnblogs.com/yangg518/p/5842651.html


2、系统程序存放路径:   /bin; /sbin; /usr/bin; /usr/sbin; /usr/local/bin; /usr/local/sbin;   普通命令:/bin; /usr/bin; /usr/local/bin;    管理命名:/sbin;  /usr/sbin; /usr/local/sbin;   共享库文件: /lib; /lib64; /usr/lib;/usr/lib64; /usr/local/lib; /usr/local/lib64;   注意:并非所有的命令都有一个在某个目录与之对应的可执行程序文件。


3、命令的类别:以是否有可执行文件来区分。

   查看命令的类型及位置:type COMMAND    内置命令: 由shell程序自带的命令; builtin   [root@localhost bin]# type printf    printf is a shell builtin
      外部命令: 独立的可执行程序文件,文件即命令:    [root@localhost bin]# type zip    zip is /bin/zip

4、shell

shell程序是独特的程序,负责解析用户提供的命令;

环境变量:PATH

[root@localhost bin]# echo $PATH/usr/java/jdk1.6.0_45/bin:/bin:/usr/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin


PATH:从路径中查找用户键入的命令字符串所对应的命令文件:查找的顺序是,自左向右,以第一次查找到的命令为止。    OPTIONS:     两种表现形式:     短选项; 如  -l  -d (注意有些选项没有-);可合并,如 -ld;     长选项: 如  --word  ; 不能合并;
    ARGUMENTS: 命令作用对象,对何生效      部分可以带多个参数,以空白字符分开,如
[root@localhost bin]# ls /tmp /etc/ssh/etc/ssh:moduli       ssh_host_ecdsa_key      ssh_host_ed25519_key.pubssh_config   ssh_host_ecdsa_key.pub  ssh_host_rsa_keysshd_config  ssh_host_ed25519_key    ssh_host_rsa_key.pub/tmp:2004-02-29 16:21:42  script2017-02-29 16:21:42  sort.txt2017-4-5      systemd-private-1f0c154d3be34ae4bc6670cd76168c21-colord.service-NOKmzLcat        systemd-private-1f0c154d3be34ae4bc6670cd76168c21-rtkit-daemon.service-ekYjoAfatabmy      vmware-rootfunctions     yum_save_tx.2019-06-24.08-11.VV74Ze.yumtxglfstab      yum_save_tx.2019-06-25.16-52.9YerbK.yumtxmagedu.com
语法格式:尖括号< >:必选参数,实际使用时应将其替换为所需要的参数大括号{ }:必选参数,内部使用,包含此处允许使用的参数方括号[ ]:可选参数,在命令中根据需要加以取舍小括号( ):指明参数的默认值,只用于{ }中竖线|:a|b|C ;用于分隔多个互斥参数,含义为"或",使用时只能选择一个。省略号...:任意多个参数。

5、获取命令帮助

   内置命令:  help COMMAND   所有命令:     1) 命令自带简要格式的使用帮助       # COMMAND --help
[root@localhost bin]# mke2fs --helpmke2fs: invalid option -- '-'Usage: mke2fs [-c|-l filename] [-b block-size] [-C cluster-size][-i bytes-per-inode] [-I inode-size] [-J journal-options][-G flex-group-size] [-N number-of-inodes][-m reserved-blocks-percentage] [-o creator-os][-g blocks-per-group] [-L volume-label] [-M last-mounted-directory][-O feature[,...]] [-r fs-revision] [-E extended-option[,...]][-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]


 2) 手册查询帮助:  manual COMMAND   或者  man COMMAND              手册位于: /usr/share/man      ----需要有手册      手册为压缩格式文件,有章节CHAPTER之分: man1;  man2;  man3......        1:  用户命令        2: 系统调用        3: C库调用        4: 设备文件及特殊文件        5: 文件格式(配置文件格式)        6: 游戏使用帮助;        7: 杂项        8: 管理工具及守护进程;系统管理员手册。
       # whatis COMMAND      ---查询命令有哪个CHAPTER手册        # man CHAPTER COMMAND ---指定查询CHAPTER的手册;         -M /PATH/         ---到指定目录查找手册;


[root@localhost bin]# whatis passwdsslpasswd (1ssl)     - compute password hashespasswd (1)           - update user's authentication tokenspasswd (5)           - password file[root@localhost bin]# man 5 passwdPASSWD(5)   Linux Programmer's Manual   PASSWD(5)NAMEpasswd - password file
    手动更新man的数据库:   # makewhatis
   # info COMMAND   查看该命令的info帮助文档
      应用程序自带文档: /usr/share/doc/APP-VERSION
google 搜索查询:    keyword  filetype :pdf    指定文档类型;    keyword  site:domain       指定网站;

6、命令别名

  外部命令可以起别名,可以与原名相同,若相同,则原名被隐藏。
[root@localhost dev]# type ls      ls is aliased to `ls --color=auto'       -----ls是ls --color=auto的别名[root@localhost dev]# alias         -----查询别名alias cp='cp -i'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --color=auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias ls='ls --color=auto'alias mv='mv -i'alias rm='rm -i'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'[root@localhost dev]# unalias ls   -----撤销别名[root@localhost dev]# aliasalias cp='cp -i'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --color=auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias mv='mv -i'alias rm='rm -i'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'[root@localhost dev]# type ls    ----看到了ls是外部命令,ls is hashed (/bin/ls)[root@localhost dev]# alias ls='ls --color=auto'  -----加回去
   要执行别名的原命令,使用\COMMAND;    别名设置是对当前的shell有效

7、常用命令

 pwd: 当前目录
 cd:  cd 或者 cd ~  切换到家目录  cd -  切换到上一个目录     隐含了两个变量: $PWD; $OLDPWD
[root@localhost tmp]# echo $PWD/tmp[root@localhost tmp]# echo $OLDPWD/bin[root@localhost tmp]# cd -/bin[root@localhost bin]# cd -/tmp

ls:ls [OPTION]... [FILE]...

-l

如:

-rw-r--r--. 1 root root 18281 Jun 4 06:08 functions

文件类型: -; d; b; c; l; s; p

-rw-rwxr--: 权限

左: user; 宿主;

中: group 宿组;

右: other 其它用户;

18281: 字节;(注意,目录的大小不代表它下一级所有文件的大小之和,谨代表它自己)

4: 硬连接数;


-h 文件大小换算;

-d 查看目录自身

[root@localhost tmp]# ls -ld /tmp

drwxrwxrwt. 13 root root 4096 Jul 7 01:29 /tmp

-r 逆序显示;

-R 递归显示所有;


cat:查看文本文件(去看二进制文件,乱码一堆)

cat [OPTION]... [FILE]...

-n: 编行号显示;

-E: 显示结束符;


tac:cat的逆序;


file: 查看文件类型;


echo:

echo [SHORT-OPTION]... [STRING]...

-e 显示转义字符 \n 换行 \t 制表符

STING 用单引号和双引号

单引号: 强引用 变量引用不执行替换;

双引号: 弱引用 变量引用会被替换

wall : 发消息


日期命令:

date

显示系统时间

+FORMAT

+%F ;full date; same as %Y-%m-%d

+%T : time; same as %H:%M:%S

+%S :seconds since 1970-01-01 00:00:00 UTC

- : (hyphen) do not pad the field


[root@localhost script]# dateSun Jul  7 02:00:35 PDT 2019[root@localhost script]# date +%F2019-07-07[root@localhost script]# date +%T02:05:31[root@localhost script]# date +%s1562490341

设定系统时间

date [MMDDhhmm[[CC]YY][.ss]


Linux系统启动从硬件读取时间和日期,读取完成后,这日期时间就不再与硬件项相关联了。

系统时钟:

硬件时钟:


hwclock : query or set the hardware clock 显示或设置硬件时钟

-s : Set the System Time from the Hardware Clock 硬为准

-w : Set the Hardware Clock to the current System Time 系统为准


cal; display a calendar

cal [options] [[[day] month] year]


练习:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

[root@localhost mk]# echo "tfile-/date"       -----命令date无执行,引用命令结果要$(COMMAND)tfile-/date[root@localhost mk]# echo "tfile-$(date)"      ----- date的格式要处理tfile-Sun Jul  7 07:24:53 PDT 2019[root@localhost mk]# echo "tfile-$(date +%F-+%H-+%M-+%S)"  ----- 这个+一个就足够了tfile-2019-07-07-+07-+25-+45[root@localhost mk]# echo "tfile-$(date +%F-%H-%M-%S)" ----- 结果快出来了tfile-2019-07-07-07-25-59[root@localhost mk]# touch "tfile-$(date +%F-%H-%M-%S)"[root@localhost mk]# lsmydir  tfile-2019-07-07-07-26-18

二、文件管理


1. 文件类型

- 常规文件,即file

d 目录文件

b block device 即块设备文件,如硬盘;支持以block为单位进行随机访问

c character device 即字符设备文件,如键盘支持以character为单位进行线性访问

major number: 主设备号,用于标识设备类型,加载驱动;

minor number: 次设备号,用于标识同一设备类型的不同设备.

[root@localhost dev]# ls -l /dev |grep sdabrw-rw----. 1 root disk      8,   0 Jul  3 07:14 sdabrw-rw----. 1 root disk      8,   1 Jul  3 07:14 sda1brw-rw----. 1 root disk      8,   2 Jul  3 07:14 sda2brw-rw----. 1 root disk      8,   3 Jul  3 07:14 sda3


l symbolic link 即符号链接文件,又称软链接文件

p pipe 即命名管道文件

s socket 即套接字文件,用于实现两个进程进行通信 -----这个套接字当时写TCP通讯程序非常熟悉,现在全忘了!



2、常用命令

mkdir: make directories创建目录

-p : 自动创建父目录

[root@localhost tmp]# mkdir /tmp/mk/mydirmkdir: cannot create directory '/tmp/mk/mydir': No such file or directory[root@localhost tmp]# mkdir -p /tmp/mk/mydir   -----创建成功

-v : verbose 显示创建过程

-m : 设置权限


rmdir: remove empty directories 删除目录

-P : 删除某目录,若父辈为空,则一并删除;rmdir -p a/b/c' is similar to 'rmdir a/b/c a/b a'


tree : 显示目录层次

-L level 显示指定层组,如 tree -L 3

练习:

1)创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b。

利用{}分组,可承载以逗号为分割的路径列表

[root@localhost mk]# mkdir /tmp/a{1{a,b},2}[root@localhost mk]# cd /tmp/[root@localhost tmp]# tree ├── a1a├── a1b├── a2 [root@localhost tmp]# mkdir -pv /tmp/a{1/{a,b},2}     ----r若不带p,则显示mkdir:cannotcreate directory '/tmp/a1/a': No such file or directormkdir: created directory '/tmp/a1'mkdir: created directory '/tmp/a1/a'mkdir: created directory '/tmp/a1/b'mkdir: created directory '/tmp/a2


2)在/tmp目录下创建目录:x_y, x_z, q_y, q_z

[root@localhost tmp]# mkdir -pv /tmp/{x,q}/{y,z}mkdir: created directory '/tmp/x'mkdir: created directory '/tmp/x/y'mkdir: created directory '/tmp/x/z'mkdir: created directory '/tmp/q'mkdir: created directory '/tmp/q/y'mkdir: created directory '/tmp/q/z'[root@localhost tmp]# mkdir -pv /tmp/{x,q}_{y,z}mkdir: created directory '/tmp/x_y'mkdir: created directory '/tmp/x_z'mkdir: created directory '/tmp/q_y'mkdir: created directory '/tmp/q_z'


3、文件的数据信息及查询

文件查看工具:

cat;tac; less; more; head; tail;

tail : - output the last part of files 显示文件尾部n行,默认10行。

tail -20 somefile

-f : output appended data as the file grows; -----通常用于追踪转化为后台应用程序的日志;


文件包含两类数据: 元数据+正文实际数据

元数据Metadata:描述数据的数据,即数据属性(property)信息,

如大小、权限、宿主宿组、时间戳、数据块的分布信息(inode)等

时间戳:

access time : ATime 数据最后一次读取时间;

modify time : MTime 数据最后一次更改时间;

(当实际数据更改了,并不一定会产生读取!,如重定向>>输入)

change time : CTime 元数据最后一次更改时间;

(实际数据更改了,这个就一定会跟着变,但是如果你是用touch去修改数据戳,就不会跟着变)

查看文件数据信息: stat file

[root@localhost tmp]# stat glfstab File: 'glfstab'Size: 0               Blocks: 0          IO Block: 4096   regular empty fileDevice: 803h/2051d      Inode: 103529576   Links: 1Access: (0644/-rw-r--r--)  Uid: ( 1002/   user1)   Gid: ( 1002/   user1)Context: unconfined_u:object_r:user_tmp_t:s0Access: 2019-06-23 06:31:29.863083244 -0700Modify: 2019-06-23 06:31:29.863083244 -0700Change: 2019-06-23 08:40:41.242916831 -0700 Birth: -

修改文件时间戳的信息:

touch [OPTION]... FILE... 改变时间戳,默认为当下,CTime无法指定更换, 文件不存在则创建文件

-a ATime;

-m MTime;

human readable date string such as "Sun, 29 Feb2004 16:21:42 -0800" or "2004-02-29 16:21:42" or

even "next Thursday"

-c CTime do not create any files

-t 指定时间; [[CC]YY]MMDDhhmm[.ss]

[root@localhost tmp]# touch -t 201707070707 glfstab [root@localhost tmp]# stat glfstab File: 'glfstab'Size: 0        Blocks: 0    IO Block: 4096   regular empty fileDevice: 803h/2051d      Inode: 103529576   Links: 1Access: (0674/-rw-rwxr--)  Uid: ( 1002/   user1)   Gid: ( 1002/   user1)Context: unconfined_u:object_r:user_tmp_t:s0Access: 2017-07-07 07:07:00.000000000 -0700Modify: 2017-07-07 07:07:00.000000000 -0700Change: 2019-07-06 22:38:48.310288863 -0700 Birth: -[root@localhost tmp]# echo "be a test" >> glfstab   (用vim修改,Atime必然跟着MTime而变,用>>,ATim不变)[root@localhost tmp]# stat glfstab File: 'glfstab'Size: 28       Blocks: 8     IO Block: 4096   regular fileDevice: 803h/2051d      Inode: 103529576   Links: 1Access: (0674/-rw-rwxr--)  Uid: ( 1002/   user1)   Gid: ( 1002/   user1)Context: unconfined_u:object_r:user_tmp_t:s0Access: 2019-07-06 22:40:43.228353962 -0700Modify: 2019-07-06 22:42:30.142275224 -0700Change: 2019-07-06 22:42:30.142275224 -0700 Birth: -


4.文件管理工具

cp:

单--->单(可重命名) ----通常用来备份文件

多(用{})--->目录

-i :交互

-n : do not overwrite an existing file

-f :强制复制,不询问覆盖性的复制

-R -r: 递归复制目录


mv: move (rename) files -----你说这东西拷到一半出故障了,目录两边各一部分内容,怎么还原呢?

ctrl+c ctrl+V 比直接ctrl+X安全

-b : like --backup but does not accept an argument -----这个也安全

rm:remove files or directories -----危险动作,还是先mv到临时文件夹,过段时间在临时文件夹rm安全

-i : 交互

-f : force

-R -r : recursive;递归删除

删除目录 rm -rf

严重警告 :

在root的权限下输入此命令,极容易出现rm -rf / 的操作,所有都没有了,因此最后对其限制或者用别名。

root权限危险,rm危险,两者结合很危险。



练习:复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

[root@localhost tmp]# cp -rv  /etc/[p]*[^[[:digit:]]] /tmpcp: cannot stat '/etc/[p]*[^[[:digit:]]]': No such file or directory[root@localhost tmp]# cp -rv  /etc/[p]*[^[:digit:]] /tmp  '/etc/pam.d' -> '/tmp/pam.d''/etc/pam.d/config-util' -> '/tmp/pam.d/config-util''/etc/pam.d/other' -> '/tmp/pam.d/other''/etc/pam.d/chfn' -> '/tmp/pam.d/chfn''/etc/pam.d/chsh' -> '/tmp/pam.d/chsh。。。。。



0