1. ps 查看进程的命令
ps aux查看所有的进程
ps -ef 查看全格式的全部进程
2.磁盘分区
linux内的所有数据都是以文件的形式来呈现,整个Linux系统最重要的地方就是在于目录树结构。目录树结构(directory tree)就是以根目录为主,然后向下呈现为分支状的目录结构的一种文件架构。根目录的表示方法为一条斜线“/”.
3.关机方式
- 关机命令:shutdown
- 重新启动:reboot
4.文件
1.显示文件的文件名和相关属性 ls -l -a
2.修改权限 chmod chmod 777
3.复制文件命令 cp cp 源文件 目标文件
4.将一个文件内容读出来的命令 cat/nl cat main.cpp
5. 创建文件夹 mkdir
6.创建文件 touch
7.删除文件夹 rmdir
8.删除文件 rm
9.文件类型 file file main.cpp
10.剪贴 mv 目录/文件名称 目录/文件的新位置
5.目录配置
目录 应放置文件内容
/bin 系统有很多存放执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被使用的命令。在/bin下面的命令可以被root与一般账号使用,主要有:cat、chmod、chown、date、mv、mkdir、cp、bash等常用的命令。
/boot 这个目录主要是放置启动会使用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用的文件名为:vmlinuz,如果使用的是grub2这个启动引导程序,则还会存在/boot/grub2/这个目录。
/dev 在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中。你只要通过读写这个目录下面的某个文件,就等于读写某个设备,比较重要的文件有/dev/null/dev/zero、/dev/tty、/dev/loop*、/dev/sd*等。
/etc 系统主要的配置文件几乎都放在这个目录内,例如人员的账号密码文件、各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但是只有root有权利修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有:/etc/modprobe.d/、/etc/passwd、/etc/fstab、/etc/issue等。另外FHS还规范几个重要的目录最好要存在/etc/目录下:
- /etc/cpt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件;
- /etc/X11/(建议):与X Window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件;
- /etc/sgml/(建议):与SGML格式有关的各项配置文件;
- /etc/xml/(建议):与XML格式有关的各项配置文件;
/lib 系统的函数库非常多,而/lib放置的则是在启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库而已。什么是函数库?你可以将它想成是外挂,某些命令必须要有这些外挂才能够顺利完成程序的执行之意,另外FSH还要求下面的目录必须要存在:
- /lib/modules/:这个目录主要放置可抽换式的内核相关模块(驱动程序)。
/media media是媒体的英文,顾名思义,这个/media下面放置的就是可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有:/media/floppy、/media/cdrom等。
/mnt 如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。在早些时候,这个目录的用途和/media相同。只是有了/media之后,这个目录就暂时用来挂载了。
/opt 这个是给第三方辅助软件放置的目录。什么是第三方辅助软件?举例来说,KDE这个桌面管理系统是一个独立的软件,不过它可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下。另外,如果你想要自行安装额外的软件(非原来的发行版提供),那么也能够将你的软件安装到这里来。不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。
/run 早期的FHS规定系统启动后所产生的各项信息应该要放置到/var/run目录下,新版的FHS则规范到/run下面,由于/run可以使用内存来模拟,因此性能上会好很多。
/sbin Linux系统有非常多命令是用来设置系统环境的,这些命令只有root才能够用来设置系统,其他用户最多只能用来查询而已。放在/sbin下面的为启动过程中所需要的,里面包括了启动、修复、还原系统所需要的命令。至于某些服务器软件程序,一般则是放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了。常见的命令包括:fdisk、fsck、ifconfig、mkfs等。
/srv srv可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务例如WWW、FTP等。举例来说。WWW服务器需要的网页数据就可以放置在/srv/www/里面。不过,系统的服务数据如果尚未要提供给因特网任何人浏览的话,默认还是建议放置到/var/lib下面即可。
/tmp 这是让一般用户或是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存放的,所以你需要定期地清理一下。当然,重要数据不可放置在此目录。因为FHS甚至建议在启动时,应该要将/tmp下的数据都删除。
/usr 第二层FHS设置,后续介绍。
/var 第二层FHS设置,主要为放置变动性的设置,后续介绍。
第二部分:FHS建议可以存在的目录
/home 这是系统默认的用户家目录(home directory)。在你新增应该一般用户账号时,默认的用户家目录都会规范到这里来,比较重要的是家目录有两种代号:
- ~:代表目前这个用户的家目录;
- ~dmtsai:则代表dmtsai的家目录。
/lib 用来存放与/lib不同的格式的二进制函数库,例如支持64位的/lib64函数库等。
/root 系统管理员(root)的家目录,之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
根据FHS的基本定义,/usr里面放置的数据属于可分享与不可变动(shareable,static)。
usr是UNIX Software Resource的缩写,这个目录有点内似于Windows系统的“C:\Windows\(当中的一部分)+C:\Program Files\”这两个目录的综合体。
目录 应放置文件内容
/usr/bin/ 所以一般用户能够使用的命令都放在这里。目前新的CentOS 7已经将全部的用户命令放置于此,而使用链接文件的方式将/bin链接至此。也就是说,/usr/bin与/bin是一模一样的。另外,FHS要求在此目录下不应该有子目录。
/usr/lib/ 基本上,与/lib功能相同,所以/lib就是链接到此目录中。
/usr/local/ 系统管理员在本机安装自己下载的软件(非发行版默认提供者)。建议安装到此目录,这样会比较便于管理。举例来说,你的发行版提供的软件较旧,你想安装较新的软件但又不想删除旧版,此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别。你可以自行到/usr/local去看看,该目录下也是具有bin、etc、include、lib...的子目录。
/usr/sbin/ 非系统正常运行所需要的系统命令,最常见的就是某些网络服务器软件的服务命令(daemon)。不过基本功能与/sbin也差不多,因此目前/sbin就是链接到此目录中的。
/usr/share/ 主要放置只读的数据文件,当然也包括共享文件。、在这个目录下放置的数据几乎是不分硬件架构的可读取的数据,因为几乎都是文本文件。在此目录下常见的还有这些子目录:
- /usr/share/man:在线帮助文件;
- /usr/share/doc:软件的说明文档;
- /usr/share/zoneinfo:与时区有关的时区文件。
第二部分:FHS建议可以存在的目录
/usr/games/ 与游戏比较相关的数据放置处。
/usr/include/ c/c++等程序语言的头文件(header)与包含文件(include)放置处,当我们以Tarball方式(*.tar.gz的方式安装软件)安装某些程序时,会使用到里面的许多文件。
/usr/libexec/ 某些不被一般用户常用的执行文件或脚本(script)等,都会放置在此目录中。例如大部分的X窗口下面的操作命令,很多都是方在此目录下。
/usr/lib/ 与/lib/功能相同,因此目前/lib就是链接到此目录中。
/usr/src/ 一般源代码建议放置到这里,src有source的意思。至于内核源代码则建议放置到/usr/src/Linux/目录下。
6.绝对路径和相对路径
-
.: 代表当前的目录,也可以使用./来表示;
-
…: 代表上一层目录,也可以使用…/来表示。
跳转命令 cd
当前路径 pwd
7.磁盘与目录的容量
df(列出文件系统的整体使用量) df [-ahikHTm] [文件或目录名]
du查看文件系统的磁盘使用量(常用在查看目录所占的磁盘空间) du [-ahskm] [文件或目录名]
8.压缩命令 tar
-c : 建立打包文件,可搭配 -v 来查看过程中被打包的文件名(filename);
-t : 查看打包文件的内容含有哪些文件名,重点在查看【文件名】;
-x : 解压的功能,可以搭配 -C(大写) 在特定目录解压,特别留意的是,-c、-t、-x不可同时出现在一串命令行中;
-z : 通过gzip的支持进行压缩/解压缩;此时文件名最好为 *.tar.gz;
-j : 通过bzip2的支持进行压缩/解压缩;此时文件名最好为 *.tar.bz2;
-J : 通过xz的支持进行压缩/解压缩;此时文件名最好为 *.tar.xz,特别留意,-z、-j、-J不可以同时出现在一串命令行中;
-v : 在压缩/解压缩的过程中,将正在处理的文件名显示出来;
-f filename :-f 后面要立刻接要被处理的文件名,建议 -f 单独写一个选项。(比较不会忘记)
-C 目录 : 这个选项用在解压缩,若要在特定目录解压缩,可以使用这个;
- 压缩 : tar -jcvf filename.tar.bz2 要被压缩的文件或目录名称;
- 解压缩 : tar -jxvf filename.tar.bz2 -C 欲解压缩的目录。
9 echo 输出命令
echo [-neE] [arg ...]
-n:
表示输出字符串不换行
echo "hello"
echo > 输出重定向
用法:echo 参数 > 输出文件
这句话的意思即是:输出Hello,Binn字符串到一个位置,如果tmp.txt存在,我们即【清空其内容,更新为Hello,Binn】,不存在,创建之
10.grep 过滤文本 使用正则表达式搜索文本,并把匹配的行打印出来
grep [-acinv] [--color=auto] '查找字符' filename
如 grep -i show main.cpp
-o : 只显示匹配的内容
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数,注意如果同时使用-cv选项是显示有多少行没有被匹配到
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
–color=auto : 可以将找到的关键字部分加上颜色的显示。
11.sed 修改文本
sed 命令是利用脚本来修改文本文件
sed编辑器被称作流编辑器( stream editor),并不会修改文本文件的数据.它只会将修改后的数据发送到STDOUT。如果你查看原来的文本文件,它仍然保留着原始数据。
可以对数据行进行替换、删除、新增、选取等特定工作
sed作用于一整行的处理,而awk将一行分成数个字段来处理
sed的命令格式:sed [options] 'command' file(s);
sed的脚本格式:sed [options] -f scriptfile file(s);
如
sed -e '8 a int a = 1;' main.cpp //在main.cpp文件的第8行后面添加上int a = 1;并输出到屏幕来。实际上main.cpp文件并没有改动
选项说明:
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容;
-n :只打印模式匹配的行;
-r :支持扩展表达式;
-h或--help:显示帮助;
-V或--version:显示版本信息。
参数说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
c :取代, c 的后面可以接字串,这些字串可以把选定的行改为新的文本;
d :删除, 删除选择的行, d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(在当前行上面插入文本);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g ;
l :列表不能打印字符的清单;
n :读取下一个输入行,用下一个命令处理新的行而不是用第一个命令;
N :追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码;
q :退出Sed;
w :表示把行写入一个文件;
= :打印当前行号;
y :表示把一个字符翻译为另外的字符(但是不用于正则表达式);
12.awk 处理文本文件
awk就是把文件逐行读入
awk处理数据的方式:逐行扫描文件,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定动作,则把匹配的行显示到标准输出(屏幕)。如果没有指定模式,则所有被操作所指定的行都被处理
sed作用于一整行的处理,而awk将一行分成数个字段来处理
语法:
awk [options] ‘commands’ filenames
(options)选项
-F 指定分隔符 默认的分割符号是空格或者制表符
内置变量
$n | 指定分隔的第n个字段,如$1、$3分别表示第1、第3列.$0代表输入整行内容 |
awk -F: '/root/{print $0}' /etc/passwd (awk中匹配有root内容的行)
awk -F: '{print $1}' /etc/passwd 显示第一列
13.DIR=$(cd “$(dirname “$0“)“;pwd)的解释
# $0 表示运行的命令名,一般用在shell脚本中
# dirname 用于取指定路径所在的目录
# $(命令) 返回该命令的结果
# cd "$(dirname "$0")":切换到 脚本所在的目录
DIR=$(cd "$(dirname "$0")";pwd)
# 获取shell脚本所在目录的绝对路径,不能直接用pwd命令,pwd是输入命令时所在的绝对路径
14.LD_PRELOAD
LD_PRELOAD环境变量是一个非常有用的Linux环境变量,它可以在程序启动时强制动态链接器(ld.so)加载指定的共享库文件,从而覆盖原有的库文件或者添加新的功能。
当程序启动时,动态链接器会首先搜索LD_PRELOAD环境变量指定的共享库文件,如果找到了,则会先加载该共享库文件,然后再加载程序所依赖的其它库文件。这样就可以在程序执行过程中,优先使用LD_PRELOAD环境变量指定的共享库文件,而不是系统默认的库文件。
LD_PRELOAD=$DIR/libcef.so
15.#!/bin/bash
是指此脚本使用/bin/bash来解释执行。
其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。
#!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。
16.ln命令
为某一个文件在另外一个位置建立一个同步的链接。
创建硬链接
ln [源文件/目录] [目标软链接]
创建软链接
ln -s [源文件/目录] [目标软链接]
如:
为/usr/lib/i386-linux-gnu/mesa/目录下的openGL动态链接库文件在/usr/lib目录下创建软链接
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so
17.重定向
指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。
1. < 将标准输出重定向到文件,如果文件已存在则覆盖它
echo "Hello World" > output.txt
2. >>将标准输出追加到文件末尾,如果文件不存在则创建它
echo "Hello Again" >> output.txt
3. | tee:将标准输出同时写入终端和文件,如果文件不存在则创建它
echo "Hello World" | tee output.txt
18./etc/ld.so.conf
/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录>。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。
对于此种情况有2种解决办法:
(1)在用源码安装时,用--prefix指定安装路径为/usr/lib。
(2) 直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib
19.linux ld.so.conf,ld.so.conf.d配置文件
查看ld.so.conf以后可以看到是包含了ld.so.conf.d中的所有配置文件
include ld.so.conf.d/*.conf
即也可以在ld.so.conf.d目录下加上自定义的.conf 文件
20.ldconfig
ldconfig这个程序位于/sbin下,它的作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新的搜索路径,需要运>行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。