manjaro初始化配置

proxy 见:https://yangchnet.github.io/Dessert/posts/env/%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AEclash/ 系统更新 首先要换源 sudo pacman-mirrors -i -c China -m rank 在弹出的窗口中选择你要切换的源。 然后 sudo pacman -Syyu 安装yay包管理 sudo pacman -S yay vim 配置 见:https://yangchnet.github.io/Dessert/posts/linux/vim%E9%85%8D%E7%BD%AE/ 输入法配置 安装fcitx5(输入法框架) yay -S fcitx5-im 配置fcitx5的环境变量: vim ~/.pam_environment 内容为: GTK_IM_MODULE DEFAULT=fcitx QT_IM_MODULE DEFAULT=fcitx XMODIFIERS DEFAULT=\@im=fcitx SDL_IM_MODULE DEFAULT=fcitx 安装fcitx5-rime(输入法引擎) yay -S fcitx5-rime 安装fcitx5-gtk yay -S fcitx5-gtk # 不装的话,部分软件可能会出现不能输入中文的情况 安装rime-cloverpinyin(输入方案) yay -S rime-cloverpinyin 如果出现问题可能还需要做下面这步: yay -S base-devel 创建并写入rime-cloverpinyin的输入方案: vim ~/.local/share/fcitx5/rime/default.custom.yaml 内容为: patch: "menu/page_size": 5 schema_list: - schema: clover 可参考:https://github....

April 11, 2022 · 1 min · 李昌

Linux下的用户和用户组管理

1.概述 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。 例如,某台 Linux 服务器上有 4 个用户,分别是 root、www、ftp 和 mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www 用户不能执行 mysql 用户的 SQL 查询操作,ftp 用户也不能修改 www 用户的网页程序。 不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。 因此,如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。 每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。 用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢? 显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。 将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。 2.用户和用户组的关系 用户和用户组的对应关系有以下 4 种: 一对一:一个用户可以存在一个组中,是组中的唯一成员; 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限; 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限; 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。 用户和组之间的关系可用下图表示:图 1 Linux用户和用户组 3. UID和GID(用户ID和组ID) 登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。...

March 26, 2022 · 10 min · 李昌

croc: 跨网络、跨系统的空投

1. install curl https://getcroc.schollz.com | bash 或 go install github.com/schollz/croc/v9@latest 2. basic usage sender: $ croc send [file(s)-or-folder] Sending 'file-or-folder' (X MB) Code is: code-phrase receiver: croc code-phrase 3. comment 可用于替代ftp上传文件,用于不同主机之间文件共享,类似“空投”的效果

December 21, 2021 · 1 min · 李昌

TCMalloc : Thread-Caching Malloc

翻译自:TCMalloc : Thread-Caching Malloc(性能测试部分没有翻译) 动机 在我测试过的所有malloc(动态内存分配器)中,TCMalloc比glibc 2.3 malloc(作为一个单独的库称作ptmalloc2)以及其他内存分配器都要快。对于小内存对象来说,在Intel® Pentium® 4 Processor 2.80 GHzCPU上ptmalloc2执行一次内存分配/回收操作需要大约300ns,而TCMalloc完成相同的操作只需要50ns。显然对于内存分配操作来说,速度十分重要,因为如果内存分配不够及时,开发人员就倾向于在malloc上编写他们自己的空闲列表,这会造成额外的复杂性以及更多的内存占用,除非开发人员非常小心的估算空闲列表的大小并清理其中的空闲对象。 TCMalloc也降低了多线程应用中的锁冲突。对于小内存对象来说几乎不存在冲突。对于大内存对象来说,TCMalloc尝试使用细粒度和高效的自旋锁。ptmalloc2也尝试通过一些方法降低锁冲突,其为每个线程分配一个arena空间,但ptmalloc2对于arena空间的使用存在一个大问题:在ptmalloc2中内存将不可能从一个arena空间转移到另一个arena空间,也即内存不可以在线程之间进行二次分配。这会导致巨大的内存浪费。例如,在一个Google应用中,阶段一为其数据结构分配了大约300MB。当其第一阶段结束后,阶段二将在相同的地址空间上开始。如果阶段二分配了一个与阶段一不同的arena空间,那么阶段二的计算将不会重复使用阶段一留下的任何内存空间,而是重新分配另一个300MB内存空间。这种内存的“blowup”问题同样出现在其他应用中。 TCMolloc的另一个优点是针对小内存对象的空间的有效利用。例如,可以将8N bytes大小的对象分配到8N*1.01bytes的空间上,即只需要1%的空间开销。ptmalloc2对每一个对象分配一个4bytes的头,(我认为)这种方式将本来只需要8N bytes大小对象变成了需要16N bytes 用法 要想使用TCMalloc,只要使用-l tcmalloc标志将tcmalloc链接到你的应用。 你也可以在不是你编译的应用中使用tcmalloc,通过使用LD_PRELOAD环境变量 LD_PRELOAD="/usr/lib/libtcmalloc.so" 但我们不推荐在非必要的情况下使用这种方式。 TCMalloc也包括一个堆检查器和一个堆分析器。 如果你只想要链接一个没有堆检查器和分析器的TCMalloc版本(可能想要减小二进制包的大小),你可以链接libtcmalloc_minimal 概览 TCMalloc为每个线程分配一个本地线程缓存thread-local cache。小的内存分配将直接被本地线程缓存满足。对象按需从中间部件central data structure移动到本地线程缓存。定期的垃圾收集被用来把内存从本地线程缓存放回中间部件central data structure。 TCMalloc对于大小<=32K的(小)对象的处理方式与大对象不同。大对象由顶层堆管理器central heap使用页级的分配器直接分配。(一个页面是一个4K对齐的内存区域),同时,大对象总是页对齐并且占据整数个页面。 页面可被一系列的小对象瓜分为大小相同的区域。例如:一个4K的内存将被32个对象分割为每个128bytes的内存序列。 小对象的分配 每个小对象都对应于170个可分配内存大小size-classes中的一种,例如,大小范围在961-1024bytes的对象将占据1024bytes。这些内存大小级别被不同大小的间距分隔开,其中较小尺寸为8bytes,大尺寸为16bytes,更大的是32bytes,以此类推。最大的空间是256bytes(对于size-classes)大于等于2k。 本地线程缓存thread-local cache持有不同size-class的空闲链表。 当分配一个小对象时: 将其大小映射到相应的size-class 为当前线程在其thread-local cache的(内存)空闲链表中寻找对应size-class链表 如果空闲链表非空,那么我们将链表的第一个对象移出并返回之,当执行这种快速路径时,TCMalloc不需要任何锁,因为加锁解锁这一对操作在2.8GHz的机器上大约需要100ns,这使得内存分配速度明显加快。 如果空闲链表为空: 从central free list(central data structure)获取一系列对应大小的内存。(central data structure被所有线程共享) 将获取到的内存放入thread-local cache的空闲链表。 返回其中一个新获取的内存对象给应用 如果central free list也为空: 从central page allocator(central heap)分配一系列页面 将这些页面分割为对应size-class大小的内存对象 将这些新的内存对象放入central free list 像之前所说将内存对象放入thread-local free list 大内存的分配 大对象被对齐到页大小(4K),并且被central page heap管理。central page heap同样是一个空闲列表数组。当数组下标i小于256时,第k个数组元素是一个每个节点包含k个页的空闲列表,而第256个数组元素中,链表的节点长度大于256页...

September 30, 2021 · 1 min · 李昌

为apt设置代理

1. 临时设置 sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8000/" update 2. 永久设置 创建/etc/apt/apt.conf touch /etc/apt/apt.conf 写入如下内容: Acquire::http::Proxy "http://yourproxyaddress:proxyport"; 如果proxy需要密码,则格式如下: Acquire::http::Proxy "http://username:password@yourproxyaddress:proxyport"; Reference: https://www.jianshu.com/p/fdae9cb5181b https://askubuntu.com/questions/257290/configure-proxy-for-apt

September 3, 2021 · 1 min · 李昌

Linux程序前台后台切换

1. 前后台切换 在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行 $ ./main & 如果程序正在前台运行,可以使用 Ctrl+z 选项把程序暂停,然后用 bg %[number] 命令把这个程序放到后台运行,摁Ctrl+z,然后在最后一行加上bg %number 对于所有运行的程序,我们可以用jobs –l 指令查看 $ jobs -l 也可以用 fg %[number] 指令把一个程序掉到前台 $ fg %1 也可以直接终止后台运行的程序,使用 kill 命令 $ kill %1 2. fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令 & 加在一个命令的最后,可以把这个命令放到后台执行,如 watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本 ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态。 jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。...

May 18, 2021 · 1 min · 李昌

Linux上安装与配置clash

安装与配置 参考了这位老哥的博客 0. 来由 阿里云与腾讯云git太慢了。。想快点 1. 下载安装 地址在这里,找到对应自己系统的版本,可以先下载到自己本地主机后再用FileZilla上传到云服务器(虽然蛮麻烦,但是它快呀) 2. 安装 将下载的上传到自己的服务器之后,解压之: gunzip clash-linux-amd64-v1.4.1.gz 解压结果就是一个可执行文件 重命名: mv clash-linux-amd64 clash 赋予运行权限: chmod +x clash 移动到bin目录下: mv clash /usr/local/bin/clash 3. 编辑config.yaml文件 vim ~/.config/clash/config.yaml # port of HTTP port: 7890 # port of SOCKS5 socks-port: 7891 …… # 这里输入你自己的配置文件 4. 将添加为系统服务 cd /etc/systemd/system/ vim clash.service clash.service的内容为: [Unit] Description= proxy After=network.target [Service] Type=simple ExecStart=/usr/local/bin/clash -f /home/YourUsername/.config/clash/config.yaml [Install] WantedBy=multi-user.target 要想深入了解systemctl服务,可前往阮一峰大佬的教程 编辑完成后,重载systemctl systemctl daemon-reload 开启服务...

March 4, 2021 · 1 min · 李昌

CentOS安装Python环境

CentOS安装Python环境 吐槽:网上一堆从官网获取安装包然后自己编译的,慢不说,还容易出错 可使用以下命令安装Python3环境: yum install rh-python36 使用这条命令,安装Python3.6,但是安装后找不到,输入Python3后还是找不到命令 scl enable rh-python36 bash 上面的命令是调用/opt/rh/rh-python36/enable更改shell环境变量的脚本。 如果再次检查Python版本,你会发现Python 3.6现在是当前shell中的默认版本。 需要指出的是,Python 3.6仅在此shell会话中设置为默认的Python版本。如果退出会话或从另一个终端打开一个新会话,Python 2.7将是默认的Python版本。 可使用当前shell窗口建立一个Python3虚拟环境,这样就可以使用Python3 #首先,创建项目目录并切换到它: mkdir ~/my_new_project cd ~/my_new_project #使用该scl工具激活Python 3.6 : sl enable rh-python36 bash # 从项目根目录内部运行以下命令以创建名为的虚拟环境my_project_venv: python -m venv my_project_venv #要首先使用虚拟环境,我们需要输入以下命令来激活它: source my_project_venv/bin/activate #激活环境后,shell提示符将以环境名称作为前缀: (my_project_venv) user@host:~/my_new_project$

February 25, 2021 · 1 min · 李昌

Linux下的权限管理

Linux下的权限管理 Linux 系统中为什么需要设定不同的权限,所有用户都直接使用管理员(root)身份不好吗? 由于绝大多数用户使用的是个人计算机,使用者一般都是被信任的人(如家人、朋友等)。在这种情况下,大家都可以使用管理员身份直接登录。但在服务器上就不是这种情况了,往往运行的数据越重要(如游戏数据),价值越高(如电子商城数据、银行数据),则服务器中对权限的设定就要越详细,用户的分级也要越明确。 和 Windows 系统不同,Linux 系统为每个文件都添加了很多的属性,最大的作用就是维护数据的安全。举个简单的例子,在你的 Linux 系统中,和系统服务相关的文件通常只有 root 用户才能读或写,就拿 /etc/shadow 这个文件来说,此文件记录了系统中所有用户的密码数据,非常重要,因此绝不能让任何人读取(否则密码数据会被窃取),只有 root 才可以有读取权限。 此外,如果你有一个软件开发团队,你希望团队中的每个人都可以使用某一些目录下的文件,而非团队的其他人则不予以开放。通过前面章节的学习我们知道,只需要将团队中的所有人加入新的群组,并赋予此群组读写目录的权限,即可实现要求。反之,如果你的目录权限没有做好,就很难防止其他人在你的系统中乱搞。 比如说,本来 root 用户才能做的开关机、ADSL 拨接程序,新增或删除用户等命令,一旦允许任何人拥有这些权限,系统很可能会经常莫名其妙的挂掉。而且,万一 root 用户的密码被其他人获取,他们就可以登录你的系统,从事一些只有 root 用户才能执行的操作,这是绝对不允许发生的。 因此,在服务器上,绝对不是所有的用户都使用 root 身份登录,而要根据不同的工作需要和职位需要,合理分配用户等级和权限等级。 Linux 系统中,文件或目录的权限信息,可以使用 ls 命令查看,例如: [root@localhost ~]# ls -al total 156 drwxr-x---. 4 root root 4096 Sep 8 14:06 . drwxr-xr-x. 23 root root 4096 Sep 8 14:21 .. -rw-------. 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw-------. 1 root root 199 Sep 8 17:14 ....

February 25, 2021 · 18 min · 李昌

Linux后台运行程序

Linux后台运行程序 使用screen screen介绍 Screen是一个控制台应用程序,允许您在一个窗口中使用多个终端会话。该程序在shell会话中运行,并充当其他终端会话的容器和管理器,类似于窗口管理器管理窗口的方式。 在许多情况下,创建多个终端窗口是不可能或不理想的。您可能需要在没有运行X服务器的情况下管理多个控制台会话,您可能需要轻松访问许多远程云服务器,或者您可能需要在处理其他任务时监视正在运行的程序的输出。所有需求都可以通过屏幕的强大功能轻松解决。 安装srceen ubuntu下 sudo apt-get install screen manjaro下 sudo pacman -S screen 基本使用方法 使用screen命令打开一个新的窗口,在其中运行你想运行的脚本。 开始运行后, 按ctrl+ad退出窗口 使用screen -r重新进入窗口 附:重定向 命令 说明 command > file 将输出重定向到 file。 command < file 将输入重定向到 file。 command » file 将输出以追加的方式重定向到 file。 n > file 将文件描述符为 n 的文件重定向到 file。 n » file 将文件描述符为 n 的文件以追加的方式重定向到 file。 n >& m 将输出文件 m 和 n 合并。 n <& m 将输入文件 m 和 n 合并。 « tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 Edited by Li Chang

February 25, 2021 · 1 min · 李昌