linux基础

用户

Linux下两种类型用户:超级用户和普通用户

超级用户: root用户;终端表示:#;  1个;  不要在root用户下工作; home目录: /root
普通用户: 可有多个,用户名可指定;终端列示:$;工作要在普通用户下; home目录:/home/用户名可指定;终端列示:$;工作要在普通用户;home目录:/home/用户名
超级用户/普通用户 修改密码: passwd

~ 代表  当前用户的home目录

相关命令:

创建普通用户(超级用户下):useradd -m user1
为 user1 这个普通用户创建密码: passwd user1

由超级用户切换到 user1 这个普通用户: su - user1

删除user1:
userdel user1  # 1. 超级用户删除普通用户
rm -rf /home/user1  # 2. 删除user1的文件目录

如果user1正在登陆,需要先把user1退出再删除:
1. ctrl D   # 退出
2. exit  # 退出user1

 

PATH环境变量:

示例要求:输入 my_date 就显示当前的时间

linux 自带的 date 就能实现该功能,所以就用自带的 date 
# 1. 创建自己的文件夹:
    mkdir work
# 2. 查找 date 在哪个文件夹下:
    whereis date
# 3. 把 date 复制到 work 下:
    cp /bin/date ./work/my_date    # .表示当前目录

# way1:
# 4. 调用my_date:(路径+命令;路径可以是绝对路径也可以是相对路径)
    /home/user/work/my_date

# way2:
# 4. 查看环境变量的值:
    echo $PATH
# 5. 把 my_date 所在的目录添加到环境变量:
    export PATH=$PATH:/home/user/work
# 通过这种方式,就可以直接调用 my_date 来实现 date的功能;但是,export 的导入只是临时性的,换个终端或者重启系统就不能再调用 my_date;想永久保留该命令,可以把命令写入到配置文件 /etc/profile  中

 

文件属性和权限操作

文件属性:

文件属性:
cp /bin/date my_date
ls -l my_date  # 查看文件属性;结果如下:
# -rwxr-xr-x. 1 user user 59392 10月  3 17:30 my_date  # 第一个user表示 owner,第二个表示 group

# -rwxr-xr-x. 表示权限:(开头的 - 表示文件;目录开头用 d 表示)
    # r :读;w :写;x :执行
    # 权限分成了3组:第一组 表示 Owner的(rwx);第二组 Group的(r-x);第三组 Others(r-x)
    # 每组权限的顺序都是rwx,没有的权限用 - 表示,如果用 0和1表示某个权限有没有,则上述权限可写成:755;(八进制) 
    # 如果想把这三个组的 x 权限都去掉,可以用: chmod 644 ./my_date 
    


# 如果文件开头是 . 则表示该文件为隐藏文件,此时用 ls -l 是显示不出来的,要用 ls-la 才能显示出 .开头的文件

# 查看某个命令(如:ls)的详细用法:
    man ls

文件操作:

操作:创建,查看,写入,复制,删除,重命名

# 创建:touch
touch helloworld  # 创建名为 helloworld 的文件
vi helloworld  # 编辑 helloworld 文件;vim中 i 表示 插入, Esc + :wq 表示 保存并退出;:q! 表示不保存
ls -l helloworld  # 查看 helloworld 的文件属性

# 查看:cat
cat helloworld  # 查看 helloworld 的文件内容;cat 用于显示文本文件的内容,如果要查看二进制文件的内容,可通过: vi helloworld --> :%!xxd  ,就会显示文件内容的二进制格式

# 复制:cp
cp helloworld helloworld_bk  # 复制文件:由 helloworld 复制到 helloworld_bk

# 删除:rm
rm helloworld_bk  # linux 下的删除不像windows,能通过回收站找回;linux删除后很难找回

# 重命名:mv
mv helloworld helloworld_rename  # 把 helloworld 重命名为 helloworld_rename

文件内容:

文件内容 <===> 文件类型 (文件内容决定了文件类型;文件的类型只与文件的内容有关,与后缀名无关)

# 查看文件类型: file
file helloworld_rename    # 查看 helloworld_rename 的文件类型  # 结果如下:
# helloworld_rename: UTF-8 Unicode text  # UTF-8 Unicode 格式的文本

 

目录操作:

目录:英文--> directory, windows下称为 文件夹;作用:容纳子目录和文件

linux系统中,目录也是一个特殊的文件,也有自己的属性
mkdir my_dir
touch my_dir/a
ls -l  
# 其中关于 my_dir 的显示为:
# drwxrwxr-x.  2 user user  4096 10月  3 20:54 my_dir  # 权限以 d开头表示目录;4096 表示目录自身的大小;
# 补充:
    返回前一次的路径: cd -
    当前工作路径: pwd
    # 以 . 开头的目录也是隐藏目录,如: 
        mv my_dir/ .my_dir  # 重命名
        # 此时不能用 "ls -l" 查看,而应该用 "ls -la"

目录权限:

以上面的 my_dir 目录为例:
# drwxrwxr-x.  2 user user  4096 10月  3 20:54 my_dir # 以 d开头表示目录
rwxrwxr-x 也是分为三组:Owner,Group 和 Other;
r 表示 可读,即可使用 ls 来查看;w 表示可写,即能在该目录下使用 touch 去创建文件
x, 与文件的x代表 “执行” 不同,目录的 x 表示 “可进入”,即能 cd 进去
# 对于目录的权限而言, x 是最基本的属性,如果没有 x 权限,其它所有的操作都无法成功

# 删除目录:rm -rf my_dir/  # -r表示采用了递归、循环的删除(目录下面有可能还包含子目录...)# -f表示强制删除

# 某一个目录下所有文件和文件夹的大小: 
du -sh 目录名

 

Winrar-Tar命令

压缩、打包:tar
打包:多个文件 合并 为一个文件

# 打包
# pwd: /home/user/work
mkdir 1
cp /bin/date 1/date_01
cp /bin/date 1/date_02
cp /bin/date my_date
# 把上面的子目录1和二进制程序my_date 打包成一个文件:
tar cf my_tar.tar 1 my_date  # tar:打包命令; c:create,f:file;tar包名.tar;所要打包的对象

# 查看tar包里面的内容:
tar tvf my_tar.tar  # t:列出 tar包中具体文件的内容以及目录的内容;v:列出冗余的详细信息;f:要操作的文件对象

# 压缩:tar cjf
# 把上面的子目录1和二进制程序my_date 压缩:
tar cjf my_compress.tar.bz2 1 my_date  # j:表示用 bz2这种方法来压缩文件

# 注:打包并不会改变文件的大小,压缩可以使包变小

# 解包、解压:tar xf
mkdir my_tar
tar xf my_tar.tar -C my_tar  # x:extract,解压; -C 表示解压到的目录

mkdir my_compress
tar xf my_compress.tar.bz2 -C my_compress  # 解压到 my_compress 目录下

# 查看两个目录下的内容是否一样:
diff -r my_compress my_dir  # -r 表示 递归循环子目录

 

搜索(文件查找):Find命令

基本用法:

# 查找 /usr 下的 time.c 文件:
find /usr -name "time.c"  # /usr:要查找的目录 ; -name:参数;"time.c":要查找的文件名

# 假如不知道文件的具体名字: 可利用 * 通配符
find /usr -name "*ime.c"  # * 表示长度不限的通配符; ? 表示1 个通配符

mkdir 1
touch 1/1.c
touch 1/1
find . -name "1"  # 查询结果有两个: ./1 (目录) 和 ./1/1(文件)
# 如果想查找文件 “1”,如下:
find . -type f -name "1"  # -type f:表示要查找的是常规的文件
# 如果想查找目录 “1”,如下:
find . -type d -name "1"  # -type d:表示要查找的是目录

高级应用:

find /usr/src -name "*.c" -exec wc -l {} \; 
# 上面的命令分为两部分:find /usr/src -name "*.c" 和 -exec wc -l {} \; 
# -exec wc -l {} \; 部分: -exec 后面连接的是一个 linux command ,该命令对第一部分find找到的结果进行处理,并且这个命令是以“;”结尾,但在linux中“;”是一个特殊的运算符,用以分隔两个不同的命令,所以直接打“;”系统会认为该分号是一个运算符,所以在分号前面加了一个“\”用于转义(让“;”变成一个普通的符号,这样的“;”在系统中表示命令的结束);
# wc -l 是一个命令,可以用来统计一个文件中的行数;
# {} 代表 find 一次(每次)匹配的结果


# 把 /usr/src 下所有的 .c 文件 复制到 当前目录下的 src 文件中:
find /usr/src -name "*.c" -exec cp {} src/ \;  # {} 表示find每次匹配到的结果; \;代表命令的结束

# 统计 /usr/src 中所有 .c文件的个数:
find /usr/src -name "*.c" >> count   # >> 表示 追加方式的重定向,即 找到 /usr/src下的所有.c文件重定向到 count 文件中(如果不加 >> ,那么find 的查找结果是要输出到标准输出,即屏幕)
wc -l count # 统计count文件中的行数,即可得到 .c文件的个数

# s可使用 “;” 把上面的两个命令结合到一起:
find /usr/src -name "*.c" >> count ; wc -l count ; rm count  # 最后要把 count rm 掉
# 上面的 count 文件只是承担了 find 和 wc 之间的桥梁作用,在linux 中其实不需要这样的一个中间文件,可使用 管道(|)让find的输出作为 wc 的输入
# 所以上面的命令可优化为:
find /usr/src -name "*.c" | wc -l  
# 在linux中,可使用 | (管道)让一个命令的输出作为另一个命令的输入,并且在命令的组合中可使用多个管道,连接多个命令

 

文本编辑工具:Vim

基本应用:

Vim的三种状态:命令行状态、插入状态和末行状态,如:
# vi helloworld 进入 命令行状态,此时不能编辑,输入 “i” 进入 插入状态就可以编辑了;编辑完后按“Esc” 可退出插入状态、进入命令行,此时输入“:”可进入末行状态,末行中可输入“wq”保存,也可输入“q!”不保存

高级应用:

# 1.显示行数:(末行状态下完成)
vi helloworld.py
# : 进入末行,输入 “set number” 后按 回车键, 就能显示行数;如果文件没有做修改,进入末行后输入“q” 直接退出

# 2. 跳转:(命令状态下完成)
# 让光标跳转到某一行
# 跳转到第一行:
1 + G
# 跳转到最后一行:
GG
# 跳转到第n行:
n + G

# 在一行中,跳转到行的结尾:
$
# 在一行中,跳转到行的开头:
^ (Shift + 6# 3. 删除:(命令状态下完成)
# 删除一整行:
dd
# 删除选中内容:
v d   # 先输入 v 进入 “可视”,按 方向键 来选择区域,最后按“d”删除
# 删除文件中所有内容:
1 G d G # 先到文件的首行,再输入 “dG” 删除所有
# 撤消操作:
u

# 复制/粘贴:(命令状态下)
# 复制一整行:
yy
# 复制选中:
v y 
# 粘贴:
p

# 剪切:(命令下)
v x
p

# 搜索:(命令下)
/要搜索的内容 + Enter键
# 下一个:
n

# 缩进:(命令)
先把光标移到某一行,输入一个数字n,再输入 “==”,那么从这一行开始,下面的n行都会缩进

# 自动补全:(插入下)
Ctrl P

 

posted @ 2018-10-03 23:20  neozheng  阅读(226)  评论(0编辑  收藏  举报