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/ls linux-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.pub ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub /tmp: 2004-02-29 16:21:42 script 2017-02-29 16:21:42 sort.txt 2017-4-5 systemd-private-1f0c154d3be34ae4bc6670cd76168c21-colord.service-NOKmzL cat systemd-private-1f0c154d3be34ae4bc6670cd76168c21-rtkit-daemon.service-ekYjoA fatabmy vmware-root functions yum_save_tx.2019-06-24.08-11.VV74Ze.yumtx glfstab yum_save_tx.2019-06-25.16-52.9YerbK.yumtx magedu.com
语法格式: 尖括号< >:必选参数,实际使用时应将其替换为所需要的参数 大括号{ }:必选参数,内部使用,包含此处允许使用的参数 方括号[ ]:可选参数,在命令中根据需要加以取舍 小括号( ):指明参数的默认值,只用于{ }中 竖线|:a|b|C ;用于分隔多个互斥参数,含义为“或”,使用时只能选择一个。 省略号...:任意多个参数。
5、获取命令帮助
内置命令: help COMMAND 所有命令: 1) 命令自带简要格式的使用帮助 # COMMAND --help
[root@localhost bin]# mke2fs --help mke2fs: 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 passwd sslpasswd (1ssl) - compute password hashes passwd (1) - update user's authentication tokens passwd (5) - password file [root@localhost bin]# man 5 passwd PASSWD(5) Linux Programmer's Manual PASSWD(5) NAME passwd - 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]# 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 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]# date Sun Jul 7 02:00:35 PDT 2019 [root@localhost script]# date +%F 2019-07-07 [root@localhost script]# date +%T 02:05:31 [root@localhost script]# date +%s 1562490341
设定系统时间
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]# ls mydir 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 sda brw-rw----. 1 root disk 8, 0 Jul 3 07:14 sda brw-rw----. 1 root disk 8, 1 Jul 3 07:14 sda1 brw-rw----. 1 root disk 8, 2 Jul 3 07:14 sda2 brw-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/mydir mkdir: 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 director mkdir: 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 file Device: 803h/2051d Inode: 103529576 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1002/ user1) Gid: ( 1002/ user1) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2019-06-23 06:31:29.863083244 -0700 Modify: 2019-06-23 06:31:29.863083244 -0700 Change: 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 file Device: 803h/2051d Inode: 103529576 Links: 1 Access: (0674/-rw-rwxr--) Uid: ( 1002/ user1) Gid: ( 1002/ user1) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2017-07-07 07:07:00.000000000 -0700 Modify: 2017-07-07 07:07:00.000000000 -0700 Change: 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 file Device: 803h/2051d Inode: 103529576 Links: 1 Access: (0674/-rw-rwxr--) Uid: ( 1002/ user1) Gid: ( 1002/ user1) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2019-07-06 22:40:43.228353962 -0700 Modify: 2019-07-06 22:42:30.142275224 -0700 Change: 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:]]] /tmp cp: 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 。。。。。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。